列式儲存格式與壓縮演算法
阿新 • • 發佈:2021-07-08
列式儲存格式與壓縮演算法
列式儲存
在OLAP系統中使用列式儲存可以在儲存和查詢兩方面取得優勢:
- 儲存:由於每列的資料型別是相同的,列式儲存可以達到更好的壓縮比
- 查詢:需要查詢那些列才去掃描讀取,在寬表及資料量大時優勢更為明顯
常見的列式儲存格式有:Parquet、ORC(optimized RCFile)、RCFile(Row Columnar)
檔案結構:
ORC和Parquet在儲存時都是先分行組然後分列儲存的
支援引擎:
Parquet:Apache Hive 、Cloudera Impala、Apache Spark 等
ORC:Hive、MapReduce、Spark 等
ORC 詳解:大資料:Hive - ORC 檔案儲存格式
Parquet 詳解:為什麼我們選擇 Parquet
一句話總結:Parquet 支援複雜的資料巢狀式結構,但不支援資料刪改及 ACID
壓縮演算法
壓縮格式 | 壓縮比 | 壓縮速率 | 解壓速率 | 多檔案 | splitable | native | 工具 | hadoop自帶 |
---|---|---|---|---|---|---|---|---|
gzip | 13.4% | 21 MB/s | 118 MB/s | 否 | 否 | 是 | gzip | 是 |
bzip2 | 13.2% | 2.4MB/s | 9.5MB/s | 是 | 是 | 否 | bzip2 | 是 |
lzo | 20.5% | 135 MB/s | 410 MB/s | 否 | 是 | 是 | lzop | 否 |
snappy | 22.2% | 172 MB/s | 409 MB/s | 否 | 否 | 是 | 無 | 否 |
*lzo 檔案如果要切片需要建立索引
不同檔案格式支援的壓縮演算法
當檔案較大且不持支切片時,該檔案將只能由一個 map task 讀取並處理,導致處理時間過長,所以當有大檔案需要讀取處理的時候更多選擇的是 Lzo 和 Parquet 的組合。
參考資料
- [1] Hadoop 壓縮格式 gzip/snappy/lzo/bzip2 比較與總結
- [2] 大資料:Hive - ORC 檔案儲存格式
- [3] 為什麼我們選擇 Parquet