hadoop中MapReduce中壓縮的使用及4種壓縮格式的特徵的比較

在比較四中壓縮方法以前,先來點乾的,說一下在MapReduce的job中怎麼使用壓縮。java

MapReduce的壓縮分爲map端輸出內容的壓縮和reduce端輸出的壓縮,配置很簡單,只要在做業的conf中配置便可linux

        //配置壓縮
        conf.setBoolean("mapred.out.compress", true);//配置map輸出的壓縮
        conf.setBoolean("mapred.output.compress", true); //配置reduce輸出的壓縮
        conf.setClass("mapred.ouput.compression.codec", BZip2Codec.class, CompressionCodec.class); //配置壓縮格式,我這裏選用的是bzip2

 

1 gzip壓縮併發

優勢:壓縮率比較高,並且壓縮/解壓速度也比較快;hadoop自己支持,在應用中處理gzip格式的文件就和直接處理文本同樣;有hadoop native庫;大部分linux系統都自帶gzip命令,使用方便。app

缺點:不支持split。oop

應用場景:當每一個文件壓縮以後在130M之內的(1個塊大小內),均可以考慮用gzip壓縮格式。譬如說一天或者一個小時的日誌壓縮成一個gzip 文件,運行mapreduce程序的時候經過多個gzip文件達到併發。hive程序,streaming程序,和java寫的mapreduce程序完 全和文本處理同樣,壓縮以後原來的程序不須要作任何修改。spa

2 lzo壓縮日誌

優勢:壓縮/解壓速度也比較快,合理的壓縮率;支持split,是hadoop中最流行的壓縮格式;支持hadoop native庫;能夠在linux系統下安裝lzop命令,使用方便。code

缺點:壓縮率比gzip要低一些;hadoop自己不支持,須要安裝;在應用中對lzo格式的文件須要作一些特殊處理(爲了支持split須要建索引,還須要指定inputformat爲lzo格式)。orm

應用場景:一個很大的文本文件,壓縮以後還大於200M以上的能夠考慮,並且單個文件越大,lzo優勢越越明顯。blog

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,並且兼容以前的應用程 序(即應用程序不須要修改)的狀況。

最後用一個表格比較上述4種壓縮格式的特徵(優缺點):

4種壓縮格式的特徵的比較

 

壓縮格式 split native 壓縮率 速度 是否hadoop自帶 linux命令 換成壓縮格式後,原來的應用程序是否要修改
gzip 很高 比較快 是,直接使用 和文本處理同樣,不須要修改
lzo 比較高 很快 否,須要安裝 須要建索引,還須要指定輸入格式
snappy 比較高 很快 否,須要安裝 沒有 和文本處理同樣,不須要修改
bzip2 最高 是,直接使用 和文本處理同樣,不須要修改
相關文章
相關標籤/搜索