HADOOP與HDFS數(shù)據(jù)壓縮格式

HADOOP與HDFS數(shù)據(jù)壓縮格式

1、cloudera 數(shù)據(jù)壓縮的一般準則

一般準則

  • 是否壓縮數(shù)據(jù)以及使用何種壓縮格式對性能具有重要的影響。在數(shù)據(jù)壓縮上,需要考慮的最重要的兩個方面是 MapReduce 作業(yè)和存儲在 HBase 中的數(shù)據(jù)。在大多數(shù)情況下,每個的原則都類似。
  • 您需要平衡壓縮和解壓縮數(shù)據(jù)所需的能力、讀寫數(shù)據(jù)所需的磁盤 IO,以及在網(wǎng)絡(luò)中發(fā)送數(shù)據(jù)所需的網(wǎng)絡(luò)帶寬。正確平衡這些因素有賴于集群和數(shù)據(jù)的特征,以及您的
  • 使用模式。
  • 如果數(shù)據(jù)已壓縮(例如 JPEG 格式的圖像),則不建議進行壓縮。事實上,結(jié)果文件實際上可能大于原文件。
  • GZIP 壓縮使用的 CPU 資源比 Snappy 或 LZO 更多,但可提供更高的壓縮比。GZIP 通常是不常訪問的冷數(shù)據(jù)的不錯選擇。而 Snappy 或 LZO 則更加適合經(jīng)常訪問的熱數(shù)據(jù)。
  • BZip2 還可以為某些文件類型生成比 GZip 更多的壓縮,但是壓縮和解壓縮時會在一定程度上影響速度。HBase 不支持 BZip2 壓縮。
  • Snappy 的表現(xiàn)通常比 LZO 好。應(yīng)該運行測試以查看您是否檢測到明顯區(qū)別。
  • 對于 MapReduce,如果您需要已壓縮數(shù)據(jù)可拆分,BZip2、LZO 和 Snappy 格式都可拆分,但是 GZip 不可以??刹鸱中耘c HBase 數(shù)據(jù)無關(guān)。
  • 對于 MapReduce,您可壓縮中間數(shù)據(jù)、輸出或二者。相應(yīng)地調(diào)整您為 MapReduce 作業(yè)提供的參數(shù)。以下示例壓縮中間數(shù)據(jù)和輸出。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

2、Hadoop 壓縮實現(xiàn)分析

壓縮簡介

Hadoop 作為一個較通用的海量數(shù)據(jù)處理平臺,每次運算都會需要處理大量數(shù)據(jù),我們會在 Hadoop 系統(tǒng)中對數(shù)據(jù)進行壓縮處理來優(yōu)化磁盤使用率,提高數(shù)據(jù)在磁盤和網(wǎng)絡(luò)中的傳輸速度,從而提高系統(tǒng)處理數(shù)據(jù)的效率。在使用壓縮方式方面,主要考慮壓縮速度和壓縮文件的可分割性。綜合所述,使用壓縮的優(yōu)點如下:

  1. 節(jié)省數(shù)據(jù)占用的磁盤空間;
  2. 加快數(shù)據(jù)在磁盤和網(wǎng)絡(luò)中的傳輸速度,從而提高系統(tǒng)的處理速度。

壓縮格式

  1. Hadoop 對于壓縮格式的是自動識別。如果我們壓縮的文件有相應(yīng)壓縮格式的擴展名(比如 lzo,gz,bzip2 等)。
  2. Hadoop 會根據(jù)壓縮格式的擴展名自動選擇相對應(yīng)的解碼器來解壓數(shù)據(jù),此過程完全是 Hadoop 自動處理,我們只需要確保輸入的壓縮文件有擴展名。
  3. Hadoop 對每個壓縮格式的支持, 詳細見下表:
壓縮格式 工具 算法 擴展名 多文件 可分割性
DEFLATE DEFLATE .deflate
GZIP gzip DEFLATE .gzp
ZIP zip DEFLATE .zip 是,在文件范圍內(nèi)
BZIP2 bzip2 BZIP2 .bz2
LZO lzop LZO .lzo
  1. 如果壓縮的文件沒有擴展名,則需要在執(zhí)行 MapReduce 任務(wù)的時候指定輸入格式。
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*

性能對比

  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 中是很非常重要的,它會影響到在執(zhí)行作業(yè)時 Map 啟動的個數(shù),從而會影響到作業(yè)的執(zhí)行效率!

所有的壓縮算法都顯示出一種時間空間的權(quán)衡,更快的壓縮和解壓速度通常會耗費更多的空間。在選擇使用哪種壓縮格式時,我們應(yīng)該根據(jù)自身的業(yè)務(wù)需求來選擇。

3、4種常用壓縮格式在Hadoop中的應(yīng)用

目前在Hadoop中用得比較多的有l(wèi)zo,gzip,snappy,bzip2這4種壓縮格式,筆者根據(jù)實踐經(jīng)驗介紹一下這4種壓縮格式的優(yōu)缺點和應(yīng)用場景,以便大家在實踐中根據(jù)實際情況選擇不同的壓縮格式。

1.gzip壓縮

  • 優(yōu)點:
    1. 壓縮率比較高,而且壓縮/解壓速度也比較快;
    2. hadoop本身支持,在應(yīng)用中處理gzip格式的文件就和直接處理文本一樣;
    3. 有hadoop native庫;
    4. 大部分linux系統(tǒng)都自帶gzip命令,使用方便。
  • 缺點:不支持split。
  • 應(yīng)用場景:
    1. 當每個文件壓縮之后在130M以內(nèi)的(1個塊大小內(nèi)),都可以考慮用gzip壓縮格式。譬如說一天或者一個小時的日志壓縮成一個gzip文件,運行mapreduce程序的時候通過多個gzip文件達到并發(fā)。
    2. hive程序,streaming程序,和java寫的mapreduce程序完全和文本處理一樣,壓縮之后原來的程序不需要做任何修改。

2.lzo壓縮

  • 優(yōu)點:
    1. 壓縮/解壓速度也比較快,合理的壓縮率;
    2. 支持split,是hadoop中最流行的壓縮格式;
    3. 支持hadoop native庫;
    4. 可以在linux系統(tǒng)下安裝lzop命令,使用方便。
  • 缺點:
    1. 壓縮率比gzip要低一些;
    2. hadoop本身不支持,需要安裝;
    3. 在應(yīng)用中對lzo格式的文件需要做一些特殊處理(為了支持split需要建索引,還需要指定inputformat為lzo格式)。
  • 應(yīng)用場景:
    一個很大的文本文件,壓縮之后還大于200M以上的可以考慮,而且單個文件越大,lzo優(yōu)點越明顯。

3.snappy壓縮

  • 優(yōu)點:
    1. 高速壓縮速度和合理的壓縮率;
    2. 支持hadoop native庫。
  • 缺點:
    1. 不支持split;
    2. 壓縮率比gzip要低;
    3. hadoop本身不支持,需要安裝;
    4. linux系統(tǒng)下沒有對應(yīng)的命令。
  • 應(yīng)用場景:
    1. 當mapreduce作業(yè)的map輸出的數(shù)據(jù)比較大的時候,作為map到reduce的中間數(shù)據(jù)的壓縮格式;
    2. 或者作為一個mapreduce作業(yè)的輸出和另外一個mapreduce作業(yè)的輸入。

4.bzip2壓縮

  • 優(yōu)點:
    1. 支持split;
    2. 具有很高的壓縮率,比gzip壓縮率都高;
    3. hadoop本身支持,但不支持native;
    4. 在linux系統(tǒng)下自帶bzip2命令,使用方便。
  • 缺點:
    1. 壓縮/解壓速度慢;
    2. 不支持native。
  • 應(yīng)用場景:
    1. 適合對速度要求不高,但需要較高的壓縮率的時候,可以作為mapreduce作業(yè)的輸出格式;
    2. 或者輸出之后的數(shù)據(jù)比較大,處理之后的數(shù)據(jù)需要壓縮存檔減少磁盤空間并且以后數(shù)據(jù)用得比較少的情況;
    3. 或者對單個很大的文本文件想壓縮減少存儲空間,同時又需要支持split,而且兼容之前的應(yīng)用程序(即應(yīng)用程序不需要修改)的情況。

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

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

目前CDH集群一般都可選安裝 Hadoop_Lzo,ucloud集群目前是集成了lzo的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • github鏈接 針對Hive的優(yōu)化主要有以下幾個方面: map reduce file format shuff...
    zoyanhui閱讀 6,468評論 2 33
  • 1 gzip壓縮 優(yōu)點:壓縮率比較高,而且壓縮/解壓速度也比較快;hadoop本身支持,在應(yīng)用中處理gzip格式的...
    起個什么呢稱呢閱讀 2,469評論 0 4
  • 一、操作方式 Hadoop支持的文件系統(tǒng)由很多(見下圖),HDFS只是其中一種實現(xiàn)。Java抽象類org.apac...
    Mervey閱讀 1,377評論 0 0
  • 優(yōu)點 在Hadoop集群中,有大量的數(shù)據(jù)復(fù)制和移動操作,壓縮過后可以減少文件的大小,從而可以減少磁盤和網(wǎng)絡(luò)的I/O...
    心_的方向閱讀 3,746評論 1 2
  • Hadoop有一些數(shù)據(jù)I/O方面操作的工具,其中一些比Hadoop使用的都更普遍。例如數(shù)據(jù)完整性和壓縮。但是當使用...
    單行線的旋律閱讀 764評論 0 2

友情鏈接更多精彩內(nèi)容