Apache Arrow 内存数据

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介:

1.概述

  Apache Arrow 是 Apache 基金会全新孵化的一个顶级项目。它设计的目的在于作为一个跨平台的数据层,来加快大数据分析项目的运行速度。

2.内容

  现在大数据处理模型很多,用户在应用大数据分析时,除了将 Hadoop 等大数据平台作为一个存储和批处理平台之外,同样也得关注系统的扩展性和性能。过去开源社区已经发布了很多工具来完善大数据分析的生态系统,这些工具包含了数据分析的各个层面,例如列式存储格式(Parquet,ORC),内存计算模型(Drill,Spark,Impala 和 Storm)以及其强大的 API 接口。而 Arrow 则是最新加入的一员,它提供了一种跨平台应用的内存数据交换格式。

  在数据快速增长和复杂化的情况下,提高大数据分析性能一个重要的途径是对列式数据的设计和处理。列式数据处理借助了向量计算和 SIMD 使我们可以充分挖掘硬件的潜力。而 Apache Drill 其大数据查询引擎无论是在硬盘还是内存中数据都是以列的方式存在的,而 Arrow 就是由 Drill 中的 Value Vector 这一数据格式发展而来。此外,Arrow 也支持关系型和动态数据集。

  Arrow 的诞生为大数据生态带来了很多可能性,有了 Arrow 作为今后标准数据交换格式,各个数据分析的系统和应用之间的交互性可以说是揭开了新的篇章。过去大部分的 CPU 周期都花在了数据的序列化与反序列化上,现在我们则能够实现不同系统之间数据的无缝链接。这意味着使用者在不同系统结合时,不用在数据格式上话费过多的时间。

3.Arrow Group

  Arrow 的内存数据结构如下所示:

  从上图中,我们可以很清晰的看出,传统的内存数据格式,各个字段的分布是以没一行呈现,相同字段并未集中排列在一起。而通过 Arrow 格式化后的内存数据,可以将相同字段集中排列在一起。我们可以很方便的使用 SQL 来操作数据。

  传统的访问各个数据模型中的数据以及使用 Arrow 后的图,如下所示:

  通过上图可以总结出以下观点:

  • 每个系统都有属于自己的内存格式。
  • 70~80% 的 CPU 浪费在序列化和反序列化上。
  • 在多个项目都实现的类似的功能(Copy & Convert)。

  而在看上述使用 Arrow 后,得出以下结论:

  • 所有的系统都使用相同的内存格式。
  • 没有跨系统通信开销。
  • 项目可以贡献功能(比如,Parquet 到 Arrow 的读取)。

4.Arrow 数据格式

  Arrow 列式数据格式如下所示:

复制代码
persons = [{
    name: 'wes',
    iq: 180,
    addresses: [
    {number: 2, street 'a'},
    {number: 3, street 'bb'}
    ]
}, {
    name: 'joe',
iq: 100,
addresses: [
{number: 4, street 'ccc'}, {number: 5, street 'dddd'}, {number: 2, street 'f'}
]
}]
复制代码

  从上述 JSON 数据格式来看,person.iq 分别是 180 和 100,以如下方式排列:

  而 persons.addresses.number 的排列格式如下所示:

5.特性

5.1 Fast

  Apache Arrow 执行引擎,利用最新的SIMD(单输入多个数据)操作包括在模型处理器,用于分析数据处理本地向量优化。数据的列式布局也允许更好地利用 CPU 缓存,将所有与列操作相关的数据以尽可能紧凑的格式放置。

5.2 Flexible

  Arrow 扮演着高性能的接口在各个复杂的系统中,它也支持工业化的编程语言。Java,C,C++,Python 以及今后更多的语言。

5.3 Standard

  Apache Arrow 由 13 个开源项目开发者支持,包含 Calcite, Cassandra, Drill, Hadoop, HBase, Ibis, Impala, Kudu, Pandas, Parquet, Phoenix, Spark, 和 Storm。

6.Example

  使用 Python 来处理 Spark 或是 Drill 中的数据,如下图所示:

  • 快速的、语言无关的二进制数据帧格式的文件。
  • 使用 Python 去写。
  • 读取速度接近磁盘 IO 性能。

  部分实现示例代码,如下所示:

import feather
path = 'my_data.feather'
feather.write_dataframe(df, path)
df = feather.read_dataframe(path)

7.总结

  Apache Arrow 当前发布了 0.1.0 第一个版本,官方目前获取的资料的信息较少,大家可以到官方的 JIRA 上获取更多咨询信息,以及 Arrow 提供的开发者聊天室去获取更多的帮助。

8.结束语

  这篇博客就和大家分享到这里,如果大家在研究学习的过程当中有什么问题,可以加群进行讨论或发送邮件给我,我会尽我所能为您解答,与君共勉!

联系方式: 
邮箱:smartloli.org@gmail.com 
Twitter: https://twitter.com/smartloli 
QQ群(Hadoop - 交流社区1): 424769183 
温馨提示:请大家加群的时候写上加群理由(姓名+公司/学校),方便管理员审核,谢谢! 

热爱生活,享受编程,与君共勉!



本文转自哥不是小萝莉博客园博客,原文链接:http://www.cnblogs.com/smartloli/,如需转载请自行联系原作者

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
7月前
|
存储 SQL 分布式计算
Spark中的数据加载与保存
Spark中的数据加载与保存
|
3月前
|
存储 缓存 分布式计算
Spark cache()与unpersist()使用位置
Spark在执行过程中是懒加载模式,RDD转换仅仅是构建DAG描述而不执行,只有遇到action算子才会真正的运行
54 9
|
7月前
|
存储 分布式计算 Apache
✨[hadoop3.x]新一代的存储格式Apache Arrow(四)
✨[hadoop3.x]新一代的存储格式Apache Arrow(四)
103 1
|
分布式计算 Java Spark
求TOP3广告点击次数,java spark rdd pairrdd 键值对转化
求TOP3广告点击次数,java spark rdd pairrdd 键值对转化
|
分布式计算 Spark
《Sparksheet - Transforming Spreadsheets into Spark Data Frames》电子版地址
Sparksheet - Transforming Spreadsheets into Spark Data Frames
76 0
《Sparksheet - Transforming Spreadsheets into Spark Data Frames》电子版地址
|
SQL 存储 缓存
Spark在处理数据的时候,会将数据都加载到内存再做处理吗?
对于Spark的初学者,往往会有一个疑问:Spark(如SparkRDD、SparkSQL)在处理数据的时候,会将数据都加载到内存再做处理吗?
Spark在处理数据的时候,会将数据都加载到内存再做处理吗?
|
分布式计算 Spark 缓存
Apache Spark Delta Lake 写数据使用及实现原理代码解析
Apache Spark Delta Lake 写数据使用及实现原理代码解析 Delta Lake 写数据是其最基本的功能,而且其使用和现有的 Spark 写 Parquet 文件基本一致,在介绍 Delta Lake 实现原理之前先来看看如何使用它,具体使用如下: df.
4615 0
|
分布式计算 Spark Apache
Apache Spark Delta Lake 删除使用及实现原理代码解析
Apache Spark Delta Lake 删除使用及实现原理代码解析 Delta Lake 的 Delete 功能是由 0.3.0 版本引入的。在介绍 Apache Spark Delta Lake 实现逻辑之前,我们先来看看如何使用 delete 这个功能。
2021 0
|
存储 分布式计算 Apache
使用Apache Arrow助力PySpark数据处理
Apache Arrow从Spark 2.3版本开始被引入,通过列式存储,zero copy等技术,JVM 与Python 之间的数据传输效率得到了大量的提升。本文主要介绍一下Apache Arrow以及Spark中的使用方法。

推荐镜像

更多