我有一些輸入數據用值類型Iterator進入reducer。 如何將這個值列表按升序排序?在Hadoop中處理之前對reducer輸入迭代器值進行排序
我需要按順序對它們進行排序,因爲它們是時間值,在處理所有的reducer之前。
我有一些輸入數據用值類型Iterator進入reducer。 如何將這個值列表按升序排序?在Hadoop中處理之前對reducer輸入迭代器值進行排序
我需要按順序對它們進行排序,因爲它們是時間值,在處理所有的reducer之前。
爲了達到使用Hadoop的內置功能減速器輸入值的排序,你可以這樣做:
1.Modify地圖輸出鍵 - 附加地圖輸出鍵與相應的value.Emit該組合鍵和值因爲hadoop默認使用整個鍵進行排序,所以map輸出記錄將按(舊鍵+值)排序。
2.雖然排序在第1步完成,但您已經在流程中操作了映射輸出鍵。Hadoop默認根據鍵進行分區和分組。
3.由於您修改了原始密鑰需要照顧修改分區器和分組比較器以基於舊密鑰工作,即僅複合密鑰的第一部分。 分區程序 - 決定哪些鍵值對落在相同的Reducer實例中
GroupComparator - 決定登陸到Reducer中的哪些鍵 - 值對將進入相同的reduce方法調用。
4.最後(顯然)您需要提取減速器中輸入鍵的第一部分以獲得舊鍵。
如果您需要更多(和更好的)答案,轉向Hadoop的權威指南第三版 - >第8章 - >分類 - >輔助排序
的確,David Gruzman在這個http://pkghosh.wordpress.com/2011/04/13/map-reduce-secondary-sort-does-it-all/上引用了一個很好的例子。 – 2014-07-16 11:19:39
你問的是所謂輔助排序什麼。簡而言之 - 擴展密鑰以添加「值排序鍵」並使hadoop僅由「真正的密鑰」分組,但是按兩者排序。
這裏是關於二次排序很好的解釋:
http://pkghosh.wordpress.com/2011/04/13/map-reduce-secondary-sort-does-it-all/
不知道我完全理解你的動機是希望減少之前進行排序。 – mohit6up 2013-02-22 07:57:16