设为首页 收藏本站
查看: 1920|回复: 0

[经验分享] Apache Arrow官方文档-IPC进程间通信

[复制链接]

尚未签到

发表于 2018-11-17 09:45:45 | 显示全部楼层 |阅读模式
封装消息格式
    流和文件格式中的数据组件表示为封装 消息,包括:


  • 指示元数据大小的长度前缀
  • 消息元数据作为Flatbuffer 平铺缓冲区
  • 将字节填充到8字节边界
  • 消息体  示意,我们有:
      

      

      

      


   所述metadata_size包括flatbuffer加填充的大小。所述 Message flatbuffer包括版本号,特定消息(作为flatbuffer联合),和消息体的大小:
  

table Message {  version: org.apache.arrow.flatbuf.MetadataVersion;
  header: MessageHeader;
  bodyLength: long;
  
}
  

    目前,我们支持4种类型的消息:


  • Schema
  • RecordBatch
  • DictionaryBatch
  • Tensor
流式格式
    我们提供用于RecordBatch的流格式。它被作为封装消息的序列呈现,每个消息遵循上述格式。该模式首先在流中,对于以后的所有RecordBatch都是相同的。如果模式中的任何字段都是字典编码的,则一个或多个 DictionaryBatch消息将跟随模式。
  

  

  
...
  

  

  
...
  

  

  

    当流读取器实现读取流时,在每个消息之后,它可以读取接下来的4个字节以知道以下消息元数据的大小。读取消息flatbuffer后,您可以读取消息体。
    流写入器可以通过写入0长度作为int32或简单地关闭流接口来发送流终端(EOS)信号。

文件格式
    我们以与流格式非常相似的格式定义支持随机访问的“文件格式”。该文件以魔术字符串ARROW1 (加上填充)开始和结束。文件中的内容与流格式相同。在文件末尾,我们编写一个页脚,包括文件中每个数据块的偏移量和大小,以便随机访问是可以实现的。有关文件页脚的精确细节,请参阅 format / File.fbs。
  示意, 我们有:
  

  

  

  


  
  

  

RecordBatch体结构
  所述RecordBatch元数据包含一个深度优先(先序)扁平化设置字段的元数据和物理内存缓冲区(Message.fbs 中的一些注释已经缩短/移除):
  

table RecordBatch {  length: long;
  nodes: [FieldNode];
  buffers: [Buffer];
  
}
  

  
struct FieldNode {
  length: long;
  null_count: long;
  
}
  

  
struct Buffer {

  /// The shared memory page>  /// not used
  page: int;
  


  /// The>  /// buffer starts
  offset: long;
  

  /// The absolute length (in bytes) of the memory buffer. The memory is found
  /// from offset (inclusive) to offset + length (non-inclusive).
  length: long;
  
}
  

    在文件的上下文中,不使用page,Buffer偏移量用作消息正文开头的参考帧。因此,在通用IPC设置中,这些偏移量可能是一个或多个共享内存区域中的任何位置,在文件格式中偏移量从0开始。
    RecordBatch的位置以及元数据块的大小以及缓冲区的大小存储在文件页脚中:
  

struct Block {  offset: long;
  metaDataLength: int;
  bodyLength: long;
  
}
  

    一些关于这个的注释


  • 该Block偏移量表示记录批次的起始字节。
  • 元数据长度包括平缓缓冲区大小,记录批量元数据平缓缓冲区以及任何填充字节
    字典Batches
        字典Batch尚未实现,但它们在元数据中提供。目前,文件中显示的DICTIONARY细分片段不会出现在任何文件实现中。

    Tensor(多维数组)信息格式
        Tensor消息类型提供一种方式来编写使用Arrow的共享内存工具的固定大小的值(如一个NumPy的ndarray)的多维数组。尽管我们在C ++中提供了一个参考实现,但通常不需要实现这种数据格式的Arrow实现。
        当编写独立封装的Tensor消息时,我们使用上述格式,但另外将起始偏移(如果写入共享内存区域)对齐为8的倍数:
      


      
      

      





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-636079-1-1.html 上篇帖子: Apache Arrow官方文档-元数据 下篇帖子: Apache Hawq功能测试脚本
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表