1. 程式人生 > >【圖文詳細 】HDFS面試題:hdfs 的資料壓縮演算法?

【圖文詳細 】HDFS面試題:hdfs 的資料壓縮演算法?

(1) Gzip 壓縮

優點:壓縮率比較高,而且壓縮/解壓速度也比較快; hadoop 本身支援,在應用中處理gzip 格式的檔案就和直接處理文字一樣;大部分 linux 系統都自帶 gzip 命令,使用方便.

缺點:不支援 split。

應用場景: 當每個檔案壓縮之後在 130M 以內的(1 個塊大小內),都可以考慮用 gzip壓縮格式。 例如說一天或者一個小時的日誌壓縮成一個 gzip 檔案,執行 mapreduce 程式的時候通過多個 gzip 檔案達到併發。 hive 程式, streaming 程式,和 java 寫的 mapreduce 程式完全和文字處理一樣,壓縮之後原來的程式不需要做任何修改。

 

(2) Bzip2 壓縮

優點:支援 split;具有很高的壓縮率,比 gzip 壓縮率都高; hadoop 本身支援,但不支援 native;在 linux 系統下自帶 bzip2 命令,使用方便。

缺點:壓縮/解壓速度慢;不支援 native。

應用場景: 適合對速度要求不高,但需要較高的壓縮率的時候,可以作為 mapreduce 作業的輸出格式; 或者輸出之後的資料比較大,處理之後的資料需要壓縮存檔減少磁碟空間並且以後資料用得比較少的情況;或者對單個很大的文字檔案想壓縮減少儲存空間,同時又需要支援 split,而且相容之前的應用程式(即應用程式不需要修改)的情況。

 

(3) Lzo 壓縮

優點:壓縮/解壓速度也比較快,合理的壓縮率;支援 split,是 hadoop 中最流行的壓縮格式;可以在 linux 系統下安裝 lzop 命令,使用方便。

缺點:壓縮率比 gzip 要低一些; hadoop 本身不支援,需要安裝;在應用中對 lzo 格式的檔案需要做一些特殊處理(為了支援 split 需要建索引,還需要指定 inputformat 為 lzo 格式)。

應用場景: 一個很大的文字檔案,壓縮之後還大於 200M 以上的可以考慮,而且單個檔案越大, lzo 優點越越明顯。

 

(4) Snappy 壓縮

優點:高速壓縮速度和合理的壓縮率。

缺點:不支援 split;壓縮率比 gzip 要低; hadoop 本身不支援,需要安裝;

應用場景: 當 Mapreduce 作業的 Map 輸出的資料比較大的時候,作為 Map 到 Reduce的中間資料的壓縮格式;或者作為一個 Mapreduce 作業的輸出和另外一個Mapreduce 作業的輸入。