hadoop streaming怎麼設置key

充分利用hadoop的map輸出自動排序功能,可以有效提升計算效率。
Hadoop streaming框架默認狀況下會以'/t’做爲分隔符,將每行第一個'/t’以前的部分做爲key,其他內容做爲value,若是沒有'/t’分隔符,則整行做爲key;這個key/tvalue對又做爲該map對應的reduce的輸入。
實際上,經過設置參數,能夠根據須要將約定知足要求的數據分佈到同一個reducer,又能夠經過設置map執行參數將數據內容進行必定的排序,從而提升在reducer中的計算效率。

hadoop 中能夠提供配置供用戶自主設置的分隔符:
-D stream.map.output.field.separator :設置map輸出中key和value的分隔符
-D stream.num.map.output.key.fields : 設置map程序分隔符的位置,該位置以前的部分做爲key,以後的部分做爲value
-D map.output.key.field.separator : 設置map輸出中key內部的分割符——備註:基於該分隔符,shuffle對key數值進行排序
-D num.key.fields.for.partition : 指定分桶時,key按照分隔符切割後,其中用於分桶key所佔的列數(配合-partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner 使用)
-D stream.reduce.output.field.separator:設置reduce輸出中key和value的分隔符
-D stream.num.reduce.output.key.fields:設置reduce程序分隔符的位置

好比下面的輸入數據例子,想要基於前兩個數值進行hash分桶,將數據分佈到同一個reducer,另外一方面又想將前四個數字進行排序。須要這樣設置:
-D stream.map.output.field.separator=,
-D stream.num.map.output.key.fields=4
-D map.output.key.field.separator=,
-D num.key.fields.for.partition=2apache

1 1,2,1,1,1  
2 1,2,2,1,1  
3 1,3,1,1,1  
4 1,3,2,1,1  
5 1,3,3,1,1  
6 1,2,3,1,1  
7 1,3,1,1,1  
8 1,3,2,1,1  
9 1,3,3,1,1 
相關文章
相關標籤/搜索