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=2

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 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM