HADOOP與HDFS數據壓縮格式

一、cloudera 數據壓縮的通常準則

通常準則html

  • 是否壓縮數據以及使用何種壓縮格式對性能具備重要的影響。在數據壓縮上,須要考慮的最重要的兩個方面是 MapReduce 做業和存儲在 HBase 中的數據。在大多數狀況下,每一個的原則都相似。
  • 您須要平衡壓縮和解壓縮數據所需的能力、讀寫數據所需的磁盤 IO,以及在網絡中發送數據所需的網絡帶寬。正確平衡這些因素有賴於集羣和數據的特徵,以及您的
  • 使用模式。
  • 若是數據已壓縮(例如 JPEG 格式的圖像),則不建議進行壓縮。事實上,結果文件實際上可能大於原文件。
  • GZIP 壓縮使用的 CPU 資源比 Snappy 或 LZO 更多,但可提供更高的壓縮比。GZIP 一般是不常訪問的冷數據的不錯選擇。而 Snappy 或 LZO 則更加適合常常訪問的熱數據。
  • BZip2 還能夠爲某些文件類型生成比 GZip 更多的壓縮,可是壓縮和解壓縮時會在必定程度上影響速度。HBase 不支持 BZip2 壓縮。
  • Snappy 的表現一般比 LZO 好。應該運行測試以查看您是否檢測到明顯區別。
  • 對於 MapReduce,若是您須要已壓縮數據可拆分,BZip二、LZO 和 Snappy 格式均可拆分,可是 GZip 不能夠。可拆分性與 HBase 數據無關。
  • 對於 MapReduce,您可壓縮中間數據、輸出或兩者。相應地調整您爲 MapReduce 做業提供的參數。如下示例壓縮中間數據和輸出。MR2 先顯示,而後顯示 MR1。
MR2
hadoop jar hadoop-examples-.jar sort "-Dmapreduce.compress.map.output=true" "-Dmapreduce.map.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec" "-Dmapreduce.output.compress=true" "-Dmapreduce.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec" -outKey org.apache.hadoop.io.Text -outValue org.apache.hadoop.io.Text input output MR1 hadoop jar hadoop-examples-.jar sort "-Dmapred.compress.map.output=true" "-Dmapred.map.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec" "-Dmapred.output.compress=true" "-Dmapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec" -outKey org.apache.hadoop.io.Text -outValue org.apache.hadoop.io.Text input output

二、Hadoop 壓縮實現分析

壓縮簡介java

Hadoop 做爲一個較通用的海量數據處理平臺,每次運算都會須要處理大量數據,咱們會在 Hadoop 系統中對數據進行壓縮處理來優化磁盤使用率,提升數據在磁盤和網絡中的傳輸速度,從而提升系統處理數據的效率。在使用壓縮方式方面,主要考慮壓縮速度和壓縮文件的可分割性。綜合所述,使用壓縮的優勢以下:linux

  1. 節省數據佔用的磁盤空間;
  2. 加快數據在磁盤和網絡中的傳輸速度,從而提升系統的處理速度。

壓縮格式算法

  1. Hadoop 對於壓縮格式的是自動識別。若是咱們壓縮的文件有相應壓縮格式的擴展名(好比 lzo,gz,bzip2 等)。
  2. Hadoop 會根據壓縮格式的擴展名自動選擇相對應的解碼器來解壓數據,此過程徹底是 Hadoop 自動處理,咱們只須要確保輸入的壓縮文件有擴展名。
  3. Hadoop 對每一個壓縮格式的支持, 詳細見下表:
壓縮格式 工具 算法 擴展名 多文件 可分割性
DEFLATE DEFLATE .deflate
GZIP gzip DEFLATE .gzp
ZIP zip DEFLATE .zip 是,在文件範圍內
BZIP2 bzip2 BZIP2 .bz2
LZO lzop LZO .lzo
  1. 若是壓縮的文件沒有擴展名,則須要在執行 MapReduce 任務的時候指定輸入格式。
hadoop jar /usr/home/hadoop/hadoop-0.20.2/contrib/streaming/ hadoop-streaming-0.20.2-CD H3B4.jar -file /usr/home/hadoop/hello/mapper.py -mapper / usr/home/hadoop/hello/mapper.py -file /usr/home/hadoop/hello/ reducer.py -reducer /usr/home/hadoop/hello/reducer.py -input lzotest -output result4 - jobconf mapred.reduce.tasks=1*-inputformatorg.apache.hadoop.mapred.LzoTextInputFormat*

性能對比apache

  1. Hadoop 下各類壓縮算法的壓縮比,壓縮時間,解壓時間見下表:
壓縮算法 原始文件大小 壓縮文件大小 壓縮速度 解壓速度
gzip 8.3GB 1.8GB 17.5MB/s 58MB/s
bzip2 8.3GB 1.1GB 2.4MB/s 9.5MB/s
LZO-bset 8.3GB 2GB 4MB/s 60.6MB/s
LZO 8.3GB 2.9GB 49.3MB/s 74.6MB/s

所以咱們能夠得出:
1) Bzip2 壓縮效果明顯是最好的,可是 bzip2 壓縮速度慢,可分割。
2) Gzip 壓縮效果不如 Bzip2,可是壓縮解壓速度快,不支持分割。
3) LZO 壓縮效果不如 Bzip2 和 Gzip,可是壓縮解壓速度最快!而且支持分割!網絡

這裏提一下,文件的可分割性在 Hadoop 中是很很是重要的,它會影響到在執行做業時 Map 啓動的個數,從而會影響到做業的執行效率!併發

全部的壓縮算法都顯示出一種時間空間的權衡,更快的壓縮和解壓速度一般會耗費更多的空間。在選擇使用哪一種壓縮格式時,咱們應該根據自身的業務需求來選擇。app

三、4種經常使用壓縮格式在Hadoop中的應用

目前在Hadoop中用得比較多的有lzo,gzip,snappy,bzip2這4種壓縮格式,筆者根據實踐經驗介紹一下這4種壓縮格式的優缺點和應用場景,以便你們在實踐中根據實際狀況選擇不一樣的壓縮格式。工具

1.gzip壓縮oop

  • 優勢:
    1. 壓縮率比較高,並且壓縮/解壓速度也比較快;
    2. hadoop自己支持,在應用中處理gzip格式的文件就和直接處理文本同樣;
    3. 有hadoop native庫;
    4. 大部分linux系統都自帶gzip命令,使用方便。
  • 缺點:不支持split。
  • 應用場景:
    1. 當每一個文件壓縮以後在130M之內的(1個塊大小內),均可以考慮用gzip壓縮格式。譬如說一天或者一個小時的日誌壓縮成一個gzip文件,運行mapreduce程序的時候經過多個gzip文件達到併發。
    2. hive程序,streaming程序,和java寫的mapreduce程序徹底和文本處理同樣,壓縮以後原來的程序不須要作任何修改。

2.lzo壓縮

  • 優勢:
    1. 壓縮/解壓速度也比較快,合理的壓縮率;
    2. 支持split,是hadoop中最流行的壓縮格式;
    3. 支持hadoop native庫;
    4. 能夠在linux系統下安裝lzop命令,使用方便。
  • 缺點:
    1. 壓縮率比gzip要低一些;
    2. hadoop自己不支持,須要安裝;
    3. 在應用中對lzo格式的文件須要作一些特殊處理(爲了支持split須要建索引,還須要指定inputformat爲lzo格式)。
  • 應用場景:
    一個很大的文本文件,壓縮以後還大於200M以上的能夠考慮,並且單個文件越大,lzo優勢越明顯。

3.snappy壓縮

  • 優勢:
    1. 高速壓縮速度和合理的壓縮率;
    2. 支持hadoop native庫。
  • 缺點:
    1. 不支持split;
    2. 壓縮率比gzip要低;
    3. hadoop自己不支持,須要安裝;
    4. linux系統下沒有對應的命令。
  • 應用場景:
    1. 當mapreduce做業的map輸出的數據比較大的時候,做爲map到reduce的中間數據的壓縮格式;
    2. 或者做爲一個mapreduce做業的輸出和另一個mapreduce做業的輸入。

4.bzip2壓縮

  • 優勢:
    1. 支持split;
    2. 具備很高的壓縮率,比gzip壓縮率都高;
    3. hadoop自己支持,但不支持native;
    4. 在linux系統下自帶bzip2命令,使用方便。
  • 缺點:
    1. 壓縮/解壓速度慢;
    2. 不支持native。
  • 應用場景:
    1. 適合對速度要求不高,但須要較高的壓縮率的時候,能夠做爲mapreduce做業的輸出格式;
    2. 或者輸出以後的數據比較大,處理以後的數據須要壓縮存檔減小磁盤空間而且之後數據用得比較少的狀況;
    3. 或者對單個很大的文本文件想壓縮減小存儲空間,同時又須要支持split,並且兼容以前的應用程序(即應用程序不須要修改)的狀況。

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

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

目前CDH集羣通常均可選安裝 Hadoop_Lzo,ucloud集羣目前是集成了lzo的

相關文章
相關標籤/搜索