一般在hadoop集群上執行乙個mapreduce會有以下步驟:
input-> map-> shuffle -> reduce -> output
如果我們採用了資料壓縮,在map階段產生的資料大小就會減少,會減少磁碟的io,同時還能夠減少網路的io。
hadoop集群中使用壓縮演算法的要求有以下4點:
1.hadoop的執行job的速度的瓶頸是磁碟io和網路io,利用壓縮可以減少這些io;
2.壓縮能夠降低網路傳輸的資料量;
3.壓縮後job整體的執行效能提公升了;
4.壓縮演算法要能夠支援可分割的。由於hadoop中的job是分map和reduce進行處理的,通常乙個map處理乙個block,這時候就需要每個block能夠單獨進行壓縮,這樣每個job在進行任務處理的時候就可以不受影響的單獨進行解壓。從而不影響job執行的效率。
hadoop中有三個階段可以用到壓縮,分別是map,shuffle和reduce,其中map階段首先對輸入的資料進行壓縮,然後在map的job中進行解壓並對資料進行業務處理,將結果寫入磁碟的時候進行資料的壓縮,shuffle的過程中將磁碟中壓縮的檔案內容讀取出來,然後傳遞給reduce,reduce中對資料再進行解壓並做業務處理,整個過程都計算完畢後再用壓縮對輸出進行壓縮。其資料流程可以用下圖表示:
壓縮的輸入檔案->(解壓資料)->maps->壓縮輸出->spill to disk(shuffle)->解壓輸入->reduces->壓縮輸出->壓縮的輸出檔案
知道在哪個階段可以使用壓縮演算法的情況下,就可以有針對性對mapreduce進行調優處理。
我們可以通過job history檢視每個job執行的時候引數配置,與壓縮有關的引數如下:
mapreduce.map.output.compress和mapreduce.output.fileoutputformat.compress
可以通過下面兩個引數來配置壓縮演算法:
mapreduce.map.output.compress.codec和mapreduce.output.fileoutputformat.compress.codec
hadoop支援多種壓縮演算法,常用的演算法對應的類有下面兩個:
hive資料壓縮
hive表通常壓縮為儲存為orc檔案,預設壓縮方法為zlib io.compression.codecs org.apache.hadoop.io.compress.defaultcodec 壓縮比約為11 建立orc壓縮表 create table zxdm dim.d acct info bac...
hive的資料壓縮
在實際工作當中,hive當中處理的資料,一般都需要經過壓縮,前期我們在學習hadoop的時候,已經配置過hadoop的壓縮,我們這裡的hive也是一樣的可以使用壓縮來節省我們的mr處理的網路頻寬 壓縮格式 工具演算法 副檔名 是否可切分 default 無default deflate 否gzip ...
hive的資料壓縮
3.通過hive shell開啟map輸出階段壓縮 4.開啟reduce輸出階段壓縮 在實際工作當中,hive當中處理的資料,一般都需要經過壓縮,前期我們在學習hadoop的時候,已經配置過hadoop的壓縮,我們這裡的hive也是一樣的可以使用壓縮來節省我們的mr處理的網路頻寬 壓縮格式 工具 演...