Hadoop壓縮

本文是轉載:https://blog.csdn.net/gongyunbao/article/details/52563908首先簡單介紹MapReduce框架的I/O處理各個步驟:

1)從HDFS讀取文件輸入到Map程序中 
2)將Mapper程序中的輸出結果保存到本地中 
3)Reducer從Mapper獲取數據文件,即Reducer與Mapper之間進行網絡傳輸操作 
4)Reducer從Mapper獲取相應分區的所有數據之後,會進行數據合併操作,此過程中,Reducer端對 
接收到數據進行排序。 
5)Reducer實例從本地硬盤中讀取所有已經整理好的數據記錄,調用reduce方法對數據進行處理。 
6)Reducer程序的輸出結果重新寫回到HDFS中。

1.壓縮內容選擇 
1)輸入文件的壓縮:如果對輸入文件進行壓縮,則將輸入塊讀入Mapper程序中時可進行更少的I/O處理。然而,解壓文件時需要消耗更多的CPU週期。 
2)壓縮Mapper程序的中間輸出:在一個MapReduce程序中,Mapper程序中會Mapper節點上產生中間結果,這些文件被對應的Reducer程序進行分區,根據分區進行排序,並且由Reducer程序利用HTTP協議進行下載。壓縮這類輸出可減少文件從Mapper程序中寫入到本地磁盤的文件I/O,也可以減少分區從Mapper節點傳輸到Reducer節點的網絡I/O。 
3)壓縮MapReduce程序的輸出:不管程序是否需要進行Reducer階段的處理。都只對需要進行Map處理的程序應用Mapper程序進行輸出,對經過Reducer處理的程序應用Reducer程序進行輸出。

2.壓縮方式 
可使用三種標準對壓縮方式進行評價 
1)壓縮文件的大小:越小越好,因爲在磁盤和網絡之間進行讀寫時涉及的I/O操作越少越好 
2)壓縮文件所用時間:越快愈好 
3)已經壓縮的格式是否可以進行再分割:可以分割的格式允許單一文件由多個Mapper程序處理,可實現更好的並行度。 
上述三種壓縮方式需要進行權衡,例如實現更快壓縮的方式下需要佔用更多CPU週期。

常用壓縮方式的對比表格 
這裏寫圖片描述

上述Snappy壓縮方式比GZIP方式快幾個數量級,然而輸出文件更大,大出20%-100%。Snappy壓縮源於Google並廣泛應用MapReducer程序和衍生框架中

Hadoop框架中帶有對文件進行壓縮和解壓縮的編碼解碼器(一個編碼解碼器CompressionCodec類的實現)。編碼解碼器列表由core-site.xml中的io.compression.codecs屬性提供,它的值是由逗號列表,每項是CompressionCodec實現類的全類名。
默認情況是不啓動壓縮。可以將mapred-site.xml中的下列屬性值設置爲true以啓用壓縮。
mapreduce.output.fileoutputformat.compress 用於輸出mapreduce.map.output.compress用於Mapper程序中間輸出mapreduce.output.fileoutputformat.compress.codec 爲輸出配置默認的編碼解碼器mapreduce.ma.output.compress.codec Mapper程序中間輸出配置默認的編碼解碼器

3.配置壓縮方式

打開壓縮用於輸出,在配置時添加下面幾行:
Configuration cond = new Configuration();
Jon job = new Job(conf);
FileOutput.setCompressOutput(job,true);
FileOutput.setOutputCompressionClass(job,GzipCodec.class);
使用Snappy的編碼解碼器
FileOutputFormat.setOutputCompressionClass(job,SnappyCodec.class)
打開壓縮用於Mapper程序的中間輸出,在配置時我們添加下面的幾行
Configuration conf = new Configuration();
conf.setBoolean("mapreduce.map.output.compress",true);
conf.setClass("mapreduce.map.output.compress.codec",GzipCodec.class,CompressionCodec.class);
FileOutput.setCompressOutput(job,true);
FileOutput.setOutputCompressionClass(job,GzipCodec.class);
Job job = new Job(conf);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章