Apache Arrow內(nèi)存數(shù)據(jù)交換格式
Apache Arrow是Apache基金會(huì)下一個(gè)全新的開(kāi)源項(xiàng)目,同時(shí)也是頂級(jí)項(xiàng)目。它的目的是作為一個(gè)跨平臺(tái)的數(shù)據(jù)層來(lái)加快大數(shù)據(jù)分析項(xiàng)目的運(yùn)行速度。
用戶在應(yīng)用大數(shù)據(jù)分析時(shí)除了將Hadoop等大數(shù)據(jù)平臺(tái)作為一個(gè)經(jīng)濟(jì)的存儲(chǔ)和批處理平臺(tái)之外也很看重分析系統(tǒng)的擴(kuò)展性和性能。過(guò)去幾年開(kāi)源社區(qū)已經(jīng)發(fā)布了很多工具來(lái)完善大數(shù)據(jù)分析的生態(tài)系統(tǒng),這些工具涵蓋了數(shù)據(jù)分析的各個(gè)層面,比如列式存儲(chǔ)格式(Parquet/ORC)、內(nèi)存計(jì)算層(Drill、Spark、Impala和Storm)以及強(qiáng)大的API接口(Python和R語(yǔ)言)。Arrow則是最新加入的一員,它提供了一種跨平臺(tái)跨應(yīng)用的內(nèi)存數(shù)據(jù)交換格式。
提高大數(shù)據(jù)分析性能的一個(gè)重要手段是對(duì)列式數(shù)據(jù)的設(shè)計(jì)和處理。列式數(shù)據(jù)處理借助向量計(jì)算和SIMD使我們可以充分挖掘硬件的潛力。Apache Drill這一大數(shù)據(jù)查詢引擎無(wú)論是在硬盤(pán)還是在內(nèi)存中數(shù)據(jù)都是以列的方式存在的,而Arrow就是由Drill中Value Vector這一數(shù)據(jù)格式發(fā)展而來(lái)。除了列式數(shù)據(jù),Apache Arrow也支持關(guān)系型和動(dòng)態(tài)數(shù)據(jù)集,這使它成了處理物聯(lián)網(wǎng)等數(shù)據(jù)時(shí)的理想格式選擇。
Apache Arrow為大數(shù)據(jù)生態(tài)系統(tǒng)帶來(lái)了可能性是無(wú)窮的。有Apache Arrow做為今后的標(biāo)準(zhǔn)數(shù)據(jù)交換格式,各個(gè)數(shù)據(jù)分析的系統(tǒng)和應(yīng)用之間的交互性可以說(shuō)是上了一個(gè)新的臺(tái)階。過(guò)去大部分的CPU周期都花在了數(shù)據(jù)的序列化和反序列化上,現(xiàn)在我們則能夠?qū)崿F(xiàn)不同系統(tǒng)之間數(shù)據(jù)的無(wú)縫共享。這意味著用戶在將不同的系統(tǒng)結(jié)合使用時(shí)再也不用為數(shù)據(jù)格式多花心思了。
Performance Advantage of Columnar In-Memory
Advantages of a Common Data Layer
-
每個(gè)系統(tǒng)都有自己內(nèi)部的內(nèi)存格式
-
70-80%的CPU浪費(fèi)在序列化和反序列化過(guò)程
-
類似功能在多個(gè)項(xiàng)目中實(shí)現(xiàn),沒(méi)有一個(gè)標(biāo)準(zhǔn)
-
所有系統(tǒng)都使用同一個(gè)內(nèi)存格式
-
避免了系統(tǒng)間通信的開(kāi)銷
-
項(xiàng)目間可以共享功能(比如Parquet-to-Arrow reader)
