前言
在大數據存儲、傳送、讀寫中往往會在不同的業務應用場景選擇不同的壓縮技術,由於壓縮方式選擇的不同,優勢和弊端也不同,就像一個天平,要找到適合的那個平衡點
Compression
- 好處:
- 減少磁盤存儲空間
- 降低IO(網絡IO和磁盤IO)
- 加快網絡和磁盤中的傳送速度
- 弊端
- 加重CPU負荷(使用數據時需要先要把數據解壓)
- 使用Compression場景
- input(map 數據輸入)
- transformation(中間轉換)
- output(reduce輸出寫入磁盤)
- Compression種類
壓縮格式 | 壓縮工具 | 擴展名 | 是否支持分割 | Hadoop編碼/解碼器 |
---|---|---|---|---|
DEFAULT | N/A | .default:lz4 | NO | org.apache.hadoop.io.compress.DefaultCodec |
gzip | gzip | .gz | NO | org.apache.hadoop.io.compress.GzipCodec |
bzip2 | bzip2 | .bz2 | YES | org.apache.hadoop.io.compress.BZip2Codec |
LZO | lzop | .lzo | YES (If Index) | com.hadoop.compression.lzo.LzoCodec |
Snappy | N/A | .snappy | NO | org.apache.hadoop.io.compress.SnappyCodec |
LZ4 | N/A | .lz4 | NO | org.apache.hadoop.io.compress.Lz4Codec |
- 壓縮比和壓縮時間比較
- 壓縮比
壓縮比: bzip2>gzip>lzo>lz4>snappy
bzip2的壓縮率最高,壓縮率大概30%左右,Gzip比zip2差一點;Lzo大概是50%左右
- 壓縮時間
壓縮時間上,bzip2最長(正常,因爲壓縮率高啊!!)
壓縮和解壓時間和壓縮比正好成正比(想想也好理解,壓的越小,算法更復雜,當然壓時間就長,解壓也一樣)
- 總結
不同場景選擇不同的壓縮方式,沒有一勞永逸的辦法.如果選擇高壓縮比,那麼CPU的性能就要求大,同時壓縮和解壓消耗時間就長;選擇壓縮比低的,磁盤和網絡IO消耗時間就多,空間也佔用大;對於支持分割的,可以實現並行化處理