首頁技術文章正文

ORC和Parquet這兩種儲存格式的優(yōu)點是什么

更新時間:2021-05-27 來源:黑馬程序員 瀏覽量:

1577370495235_學IT就到黑馬程序員.gif

ORC和Parquet都是高性能的存儲方式,這兩種存儲格式總會帶來存儲和性能上的提升。

1.Parquet

(1)Parquet支持嵌套的數據模型,類似于Protocol Buffers,每一個數據模型的schema包含多個字段,每一個字段有三個屬性:重復次數、數據類型和字段名,重復次數可以是以下三種:required(只出現1次),repeated(出現0次或多次),optional(出現0次或1次)。每一個字段的數據類型可以分成兩種: group(復雜類型)和primitive(基本類型)。

(2)Parquet中沒有Map、Array這樣的復雜數據結構,但是可以通過repeated和group組合來實現的。

(3)由于Parquet支持的數據模型比較松散,可能一條記錄中存在比較深的嵌套關系,如果為每一條記錄都維護一個類似的樹狀結可能會占用較大的存儲空間,因此Dremel論文中提出了一種高效的對于嵌套數據格式的壓縮算法:Striping/Assembly算法。通過Striping/Assembly算法,parquet可以使用較少的存儲空間表示復雜的嵌套格式,并且通常Repetition level和Definition level都是較小的整數值,可以通過RLE算法對其進行壓縮,進一步降低存儲空間。

Parquet文件是以二進制方式存儲的,是不可以直接讀取和修改的,Parquet文件是自解析的,文件中包括該文件的數據和元數據。

2.ORC

(1)ORC文件是自描述的,它的元數據使用Protocol Buffers序列化,并且文件中的數據盡可能的壓縮以降低存儲空間的消耗;

(2)和Parquet類似,ORC文件也是以二進制方式存儲的,所以是不可以直接讀取,ORC文件也是自解析的,它包含許多的元數據,這些元數據都是同構ProtoBuffer進行序列化的;

1622107663499_ORC和Parquet1.jpg

(3)ORC會盡可能合并多個離散的區(qū)間盡可能的減少I/O次數;

(4)ORC中使用了更加精確的索引信息,使得在讀取數據時可以指定從任意一行開始讀取,更細粒度的統(tǒng)計信息使得讀取ORC文件跳過整個row group,ORC默認會對任何一塊數據和索引信息使用ZLIB壓縮,因此ORC文件占用的存儲空間也更?。?br/>

(5)在新版本的ORC中也加入了對Bloom Filter的支持,它可以進一步提升謂詞下推的效率,在Hive 1.2.0版本以后也加入了對此的支持。






猜你喜歡:

什么是單繼承?Python中單繼承的語法格式是怎樣的?

Python JsonPath解析json的方法

相比Hive,Spark處理數據的速度為什么更快?

黑馬程序員Python+大數據開發(fā)培訓

分享到:
在線咨詢 我要報名
和我們在線交談!