Hadoop壓縮

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

綜合所述,使用壓縮的優(yōu)點如下:

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

1、壓縮格式

Hadoop 對于壓縮格式的是自動識別。如果我們壓縮的文件有相應壓縮格式的擴展名(比如 lzo,gz,bzip2 等)。Hadoop 會根據(jù)壓縮格式的擴展名自動選擇相對應的解碼器來解壓數(shù)據(jù),此過程完全是 Hadoop 自動處理,我們只需要確保輸入的壓縮文件有擴展名。

Hadoop 對每個壓縮格式的支持, 詳細見下表:

壓縮格式

2、性能對比

Hadoop 下各種壓縮算法的壓縮比,壓縮時間,解壓時間見下表:

壓縮性能對比

因此我們可以得出:

  1. Bzip2 壓縮效果明顯是最好的,但是 bzip2 壓縮速度慢,可分割。
  2. Gzip 壓縮效果不如 Bzip2,但是壓縮解壓速度快,不支持分割。
  3. LZO 壓縮效果不如 Bzip2 和 Gzip,但是壓縮解壓速度最快!并且支持分割!

這里提一下,文件的可分割性在 Hadoop 中是很非常重要的,它會影響到在執(zhí)行作業(yè)時 Map 啟動的個數(shù),從而會影響到作業(yè)的執(zhí)行效率!

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

3、壓縮的使用

MapReduce 可以在三個階段中使用壓縮。

1、輸入階段
如果輸入的文件是壓縮過的,那么在被 MapReduce 讀取時,它們會被自動解壓。

2、map輸出中間結果
(1) 在 core-site.xml 文件中配置,代碼如下

<property>
     <name>mapred.compress.map.output</name>
    <value>true</value>
</property>

(2)使用Java代碼指定

conf.setCompressMapOut(true);
conf.setMapOutputCompressorClass(GzipCode.class);

3、reduce輸出最終結果
(1) 在 core-site.xml 文件中配置,代碼如下

<property>
     <name>mapred.output.compress</name>
    <value>true</value>
</property>

(2)使用Java代碼指定

conf.setBoolean(“mapred.output.compress”,true);
conf.setClass(“mapred.output.compression.codec”,GzipCode.class,CompressionCodec.class);
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容