列式存儲格式與壓縮算法
列式存儲
在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