天天看點

Apache Arrow 記憶體資料1.概述2.内容3.Arrow Group4.Arrow 資料格式5.特性6.Example7.總結8.結束語

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 的記憶體資料結構如下所示:

Apache Arrow 記憶體資料1.概述2.内容3.Arrow Group4.Arrow 資料格式5.特性6.Example7.總結8.結束語

  從上圖中,我們可以很清晰的看出,傳統的記憶體資料格式,各個字段的分布是以沒一行呈現,相同字段并未集中排列在一起。而通過 Arrow 格式化後的記憶體資料,可以将相同字段集中排列在一起。我們可以很友善的使用 SQL 來操作資料。

  傳統的通路各個資料模型中的資料以及使用 Arrow 後的圖,如下所示:

Apache Arrow 記憶體資料1.概述2.内容3.Arrow Group4.Arrow 資料格式5.特性6.Example7.總結8.結束語

  通過上圖可以總結出以下觀點:

  • 每個系統都有屬于自己的記憶體格式。
  • 70~80% 的 CPU 浪費在序列化和反序列化上。
  • 在多個項目都實作的類似的功能(Copy & Convert)。
Apache Arrow 記憶體資料1.概述2.内容3.Arrow Group4.Arrow 資料格式5.特性6.Example7.總結8.結束語

  而在看上述使用 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,以如下方式排列:

Apache Arrow 記憶體資料1.概述2.内容3.Arrow Group4.Arrow 資料格式5.特性6.Example7.總結8.結束語

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

Apache Arrow 記憶體資料1.概述2.内容3.Arrow Group4.Arrow 資料格式5.特性6.Example7.總結8.結束語
Apache Arrow 記憶體資料1.概述2.内容3.Arrow Group4.Arrow 資料格式5.特性6.Example7.總結8.結束語

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 中的資料,如下圖所示:

Apache Arrow 記憶體資料1.概述2.内容3.Arrow Group4.Arrow 資料格式5.特性6.Example7.總結8.結束語
  • 快速的、語言無關的二進制資料幀格式的檔案。
  • 使用 Python 去寫。
  • 讀取速度接近磁盤 IO 性能。
Apache Arrow 記憶體資料1.概述2.内容3.Arrow Group4.Arrow 資料格式5.特性6.Example7.總結8.結束語

  部分實作示例代碼,如下所示:

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.結束語

  這篇部落格就和大家分享到這裡,如果大家在研究學習的過程當中有什麼問題,可以加群進行讨論或發送郵件給我,我會盡我所能為您解答,與君共勉!

聯系方式:

郵箱:[email protected]

Twitter:

https://twitter.com/smartloli

QQ群(Hadoop - 交流社群1):

424769183

溫馨提示:請大家加群的時候寫上加群理由(姓名+公司/學校),友善管理者稽核,謝謝!

熱愛生活,享受程式設計,與君共勉!

作者:哥不是小蘿莉 [ 關于我 ][ 犒賞

出處: http://www.cnblogs.com/smartloli/

轉載請注明出處,謝謝合作!