數據存儲在hdfs格式,使用的什么壓縮方式?壓縮比多少
目前在Hadoop中用得比較多的有lzo,gzip,snappy,bzip2這4種壓縮格式,筆者根據實踐經驗介紹一下這4種壓縮格式的優缺點和應用場景,以便大家在實踐中根據實際情況選擇不同的壓縮格式。
1. gzip壓縮
- 優點: - 壓縮率比較高,而且壓縮/解壓速度也比較快;
- hadoop本身支持,在應用中處理gzip格式的文件就和直接處理文本一樣;
- 有hadoop native庫; - 大部分linux系統都自帶gzip命令,使用方便。
- 缺點:不支持split。
- 應用場景: 當每個文件壓縮之后在130M以內的(1個塊大小內),都可以考慮用gzip壓縮格式。
譬如說一天或者一個小時的日志壓縮成一個gzip文件,運行mapreduce程序的時候通過多個gzip文件達到并發。
hive程序,streaming程序,和java寫的mapreduce程序完全和文本處理一樣,壓縮之后原來的程序不需要做任何修改。
2. lzo壓縮
- 優點:
- 壓縮/解壓速度也比較快,合理的壓縮率;
- 支持split,是hadoop中最流行的壓縮格式;
- 支持hadoop native庫; - 可以在linux系統下安裝lzop命令,使用方便。
- 缺點:
- 壓縮率比gzip要低一些;
- hadoop本身不支持,需要安裝;
- 在應用中對lzo格式的文件需要做一些特殊處理(為了支持split需要建索引,還需要指定inputformat為lzo格式)。
- 應用場景: 一個很大的文本文件,壓縮之后還大于200M以上的可以考慮,而且單個文件越大,lzo優點越明顯。
3. snappy壓縮
- 優點: - 高速壓縮速度和合理的壓縮率;
- 支持hadoop native庫。
- 缺點:
- 不支持split;
- 壓縮率比gzip要低;
- hadoop本身不支持,需要安裝;
- linux系統下沒有對應的命令。
- 應用場景: 當mapreduce作業的map輸出的數據比較大的時候,作為map到reduce的中間數據的壓縮格式;
或者作為一個mapreduce作業的輸出和另外一個mapreduce作業的輸入。
4. bzip2壓縮
- 優點:
- 支持split;
- 具有很高的壓縮率,比gzip壓縮率都高;
- hadoop本身支持,但不支持native;
- 在linux系統下自帶bzip2命令,使用方便。
- 缺點:
- 壓縮/解壓速度慢;
- 不支持native。
- 應用場景: 適合對速度要求不高,但需要較高的壓縮率的時候,可以作為mapreduce作業的輸出格式;
或者輸出之后的數據比較大,處理之后的數據需要壓縮存檔減少磁盤空間并且以后數據用得比較少的情況;
或者對單個很大的文本文件想壓縮減少存儲空間,同時又需要支持split,而且兼容之前的應用程序(即應用程序不需要修改)的情況。