Hadoop 壓縮格式 gzip/snappy/lzo/bzip2 比較
目前在Hadoop中常用的幾種壓縮格式:lzo,gzip,snappy,bzip2,主要特性對比如下:
壓縮格式 | codec類 | 演算法 | 副檔名 | 多檔案 | splitable | native | 工具 | hadoop自帶 |
---|---|---|---|---|---|---|---|---|
deflate | DeflateCodec | deflate | .deflate | 否 | 否 | 是 | 無 | 是 |
gzip | GzipCodec | deflate | .gz | 否 | 否 | 是 | gzip | 是 |
bzip2 | Bzip2Codec | bzip2 | .bz2 | 是 | 是 | 否 | bzip2 | 是 |
lzo | LzopCodec | lzo | .lzo | 否 | 是[需建索引] | 是 | lzop | 否 |
snappy | SnappyCodec | snappy | .snappy | 否 | 否 | 是 | 無 | 否 |
其效能對比如下:
壓縮格式 | 壓縮比 | 壓縮速率 | 解壓速率 |
---|---|---|---|
gzip/deflate | 13.4% | 21 MB/s | 118 MB/s |
bzip2 | 13.2% | 2.4MB/s | 9.5MB/s |
lzo | 20.5% | 135 MB/s | 410 MB/s |
snappy | 22.2% | 172 MB/s | 409 MB/s |
1.所有演算法的實現均在org.apache.hadoop.io.compress包下面;如果原始資料已經壓縮(jpeg影象),則不建議再壓縮
2.deflate壓縮:
標準壓縮演算法,其演算法實現是zlib,而gzip檔案格式只是在deflate格式上增加了檔案頭和一個檔案尾
3.gzip壓縮:
壓縮率比較高,而且壓縮/解壓速度也比較快;
hadoop本身支援,在應用中處理gzip格式的檔案就和直接處理文字一樣;
有hadoop native庫;
大部分linux系統都自帶gzip命令,使用方便;
不支援split;
因此 ①適用於壓縮後的檔案大小在120M以內(haoop2的標準block大小是120M)的處理,可以有效提高讀的併發,對hive,streaming,Java 等mr程式透明,無需修改原程式②由於gzip擁有較高的壓縮比,因此相比於其他壓縮演算法,更適用於冷資料的儲存
4.bzip2壓縮
支援split,支援多檔案;
具有很高的壓縮率,比gzip壓縮率都高;
hadoop本身支援,但不支援native;
在linux系統下自帶bzip2命令,使用方便;
壓縮/解壓速度很慢;
不支援native;
因此①適合對速度要求不高,但需要較高的壓縮率的時候,可以作為mapreduce作業的輸出格式②輸出之後的資料比較大,處理之後的資料需要壓縮存檔減少磁碟空間並且以後資料用得比較少的情況③對單個很大的文字檔案想壓縮減少儲存空間,同時又需要支援split,而且相容之前的應用程式(即應用程式不需要修改)的情況
4.lzo壓縮
壓縮/解壓速度也比較快,合理的壓縮率;
支援split,是hadoop中最流行的壓縮格式(需要建索引,檔案修改後需要重新建索引);
支援hadoop native庫;
可以在linux系統下安裝lzop命令,使用方便;
壓縮率比gzip要低一些;
hadoop本身不支援,需要安裝;
在應用中對lzo格式的檔案需要做一些特殊處理(為了支援split需要建索引,還需要指定inputformat為lzo格式);
因此①適用於較大文字的處理
5.snappy壓縮
高速壓縮速度和合理的壓縮率;
支援hadoop native庫;
不支援split;
壓縮率比gzip要低;
hadoop本身不支援,需要安裝;
linux系統下沒有對應的命令
因此① 當mapreduce作業的map輸出的資料比較大的時候,作為map到reduce的中間資料的壓縮格式;②或者作為一個mapreduce作業的輸出和另外一個mapreduce作業的輸入
6.為什麼hadoop沒有自帶lzo和snappy壓縮?
主要是由於lzo和snappy壓縮採用的是GPL協議,而hadoop是apache協議,有關協議的區別可參考阮大神的圖示:
7.snappy 雖然對於文字格式不具有split特性,但是對於SequenceFile 及Avro格式,Parquet儲存來說依然具有split特性
8.關於lzo和snappy的安裝及更多介紹可參考:
https://boristyukin.com/is-snappy-compressed-parquet-file-splittable/
https://www.cnblogs.com/ITtangtang/p/7681019.html
https://blog.csdn.net/slx_2011/article/details/44748613
https://blog.csdn.net/gao634209276/article/details/52332617
https://blog.csdn.net/zilong_zilong/article/details/78323946