1、使用HadoopStreaming
的一個小case,分享給大家,避免日後出bug:
當我們在用-D stream.num.map.output.key.fields="2"
這個參數時,如果map端輸出的長度小於或者等於
2,則在reduce端打印的時候會多加一個空值
。
比如:
Hadoop streaming 使用-D stream.num.map.output.key.fields="2"參數
map 端輸出
A\tB
reduce端輸出
A\tB\t""
2、二次排序
如果我們僅僅想將第一個字段分桶,而將前兩個字段進行排序,例如,給定txt文件
a 2 11 22
b 3 11 22
c 4 11 22
a 1 11 22
b 2 11 22
c 1 11 22
a 5 11 22
假設我們希望得到
a 1 11 22
a 2 11 22
a 5 11 22
b 2 11 22
b 3 11 22
c 1 11 22
c 4 11 22
即第一列將其分到相應的桶中,第二列也進行排序。則我們可以用這兩個參數
-jobconf stream.num.map.output.key.fields=2
-jobconf num.key.fields.for.partition=1
-partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner
stream.num.map.output.key.fields=2表示我們用前兩個字段進行排序。num.key.fields.for.partition=1 表示我們用第一個字段進行分桶。排序方式使用org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner (必須)、