hadoop數據壓縮

1 概述

壓縮技術能夠有效減少底層存儲系統(HDFS) 讀寫字節數。壓縮提高了網絡帶寬和磁盤空間的效率。在 Hadoop 下,尤其是數據規模很大和工作負載密集的情況下,使用數據壓縮顯得非常重要。在這種情況下, I/O 操作和網絡數據傳輸要花大量的時間。還有, Shuffle與 Merge 過程同樣也面臨着巨大的 I/O 壓力。

鑑於磁盤 I/O 和網絡帶寬是 Hadoop 的寶貴資源,數據壓縮對於節省資源、最小化磁盤I/O 和網絡傳輸非常有幫助。不過, 儘管壓縮與解壓操作的 CPU 開銷不高,其性能的提升和資源的節省並非沒有代價。

如果磁盤 I/O 和網絡帶寬影響了 MapReduce 作業性能,在任意 MapReduce 階段啓用壓縮都可以改善端到端處理時間並減少 I/O 和網絡流量。

壓縮 Mapreduce 的一種優化策略:通過壓縮編碼對 Mapper 或者 Reducer 的輸出進行壓縮,以減少磁盤 IO, 提高 MR 程序運行速度(但相應增加了 cpu 運算負擔) 。

注意: 壓縮特性運用得當能提高性能,但運用不當也可能降低性能。
基本原則:
(1)運算密集型的 job,少用壓縮
(2) IO 密集型的 job,多用壓縮

2 MR 支持的壓縮編碼

這裏寫圖片描述
爲了支持多種壓縮/解壓縮算法, Hadoop 引入了編碼/解碼器,如下表所示
這裏寫圖片描述
壓縮性能的比較
這裏寫圖片描述
http://google.github.io/snappy/
On a single core of a Core i7 processor in 64-bit mode, Snappy compresses at about 250 MB/sec
or more and decompresses at about 500 MB/sec or more.

3 壓縮方式選擇

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 作業的輸入。

4 壓縮位置選擇

壓縮可以在 MapReduce 作用的任意階段啓用。
這裏寫圖片描述

5 壓縮配置參數

要在 Hadoop 中啓用壓縮,可以配置如下參數:
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章