編寫hadoop任務經常需要用到partition和排序。這里記錄一下幾個參數。
1. 概念
Partition:分桶過程,用戶輸出的key經過partition分發到不同的reduce里,因而partitioner就是分桶器,一般用平台默認的hash分桶也可以自己指定。
Key:是需要排序的字段,相同分桶&&相同key的行排序到一起。
2. 參數設置
在streaming模式默認中, hadoop會把map輸出的一行中遇到的第一個設定的字段分隔符前面的部分作為key,后面的作為value,如果輸出的一行中沒有指定的字段分隔符,則整行作為key,value被設置為空字符串。streaming中默認字段分割符是tab。
2.1 reduce收到數據內的排序(實際上在map結果數據落時候已經排序)
我們知道,一個reduce收到的數據是經過排序的。
如下設置,reduce收到的數據如何排序: 字段分割符是'.',按照前2個字段排序。
stream.num.map.output.key.fields=2
stream.map.output.field.separator=.
2.2 map數據輸出數據partition
我們知道可以指定partition參數使得符合條件的數據被后續的同一個reduce處理。
如下設置,指定字段分隔符是'.', 按照第一個字段進行pattition。
map.output.key.field.separator=.
num.key.fields.for.partition=1
參考: http://www.dreamingfish123.info/?p=1102