我在hadoop世界很新,努力實現一項簡單的任務。任何人都可以告訴我如何使用Map Reduce技術獲得字數統計示例的前n個值?不希望爲這個簡單的任務使用任何hadoop命令。 任何想法或建議將非常有幫助。 謝謝。Hadoop Map的前N個值減少代碼
回答
你有兩個明顯的選擇:
有兩臺MapReduce作業:
- 字計數:計數所有的話(幾乎按示例)
- TOPN:MapReduce的作業找到頂部N的東西(這裏有一些例子:source code,blog post)
讓WordCount的輸出寫入HDFS。然後,讓TopN讀取該輸出。這就是所謂的工作鏈,有很多方法來解決這個問題:oozie,bash腳本,從你的驅動程序發射兩個工作,等等。
你需要兩個工作的原因是你正在做兩個聚合:一個是字數,第二個是topN。通常在MapReduce中,每個聚合需要它自己的MapReduce作業。
首先,讓您的WordCount作業在數據上運行。然後,用一些bash把頂部的N拉出來。
hadoop fs -cat /output/of/wordcount/part* | sort -n -k2 -r | head -n20
sort -n -k2 -r
表示「按列#2按降序排列數字」。 head -n20
排名前二十。
對於WordCount來說,這是更好的選擇,這是因爲WordCount可能只輸出數千或數萬行的順序,而您不需要MapReduce作業。記住,僅僅因爲你有hadoop並不意味着你應該用Hadoop解決你所有的問題。
一個非顯而易見的版本,這是棘手,但上述兩種的混合...
寫字計數MapReduce工作,但在減速這樣做的TOPN MapReduce作業我早些時候給你看。然後,讓每個減速器只輸出該減速器的TopN結果。
因此,如果您正在進行前10名,每個減速器將輸出10個結果。假設您有30個減速器,則會輸出300個結果。
然後,做同樣的事情在選項#2使用bash:
hadoop fs -cat /output/of/wordcount/part* | sort -n -k2 -r | head -n10
這應該是更快,因爲你只是在後處理結果的一小部分。
這是我能想到的最快的方式,但這可能不值得。
嗨唐納德,非常感謝您的解決方案。可以請告訴我,這種方法也正確,我在這裏寫入==>在Hadoop中,reducer根據鍵的值對輸出進行排序。因此,在編寫輸出時,如果我們只是交換密鑰和值,我。即,將值(它將是計數)作爲鍵和鍵作爲值,然後它將根據值進行排序。然後我們所要做的就是運行命令:hadoop fs -cat
所以我們需要運行兩個map縮減工作來完成這個任務。第一個找到正常單詞的工作和相應的計數,第二個工作是找到每個reducer的頂部n的東西,我頂n。我不是很清楚第二份工作在代碼中。它是如何工作的,然後我們如何獲得所有減速器輸出中的前n個值?它是如何計算每次top n的,然後最終生成確切的top n值的? – user3078014
你能解釋一下命令'sort -n -k2 -r | head -n20'..就像命令中的n,k2和r一樣? – user3078014
獲取MapReduce Design Patterns書以熟悉如何以MR方式解決問題。 Here是本書得到TopN的代碼。另外,請查詢Data-Intensive Text Processing with MapReduce瞭解更多算法。
請勿使用此topTendriver代碼。 它使用TreeMap並覆蓋相同的int值記錄,並且它不計算總值以正確排序。 – halil
@halil,也許你可以推薦更好的實現? –
@halil對這種現象的任何解釋都會有幫助 –
- 1. hadoop map減少程序中的InstantiationException
- 2. hadoop map減少二級排序
- 3. Hadoop Map Reduce CustomRecordReader減少階段
- 4. Apache hadoop map減少任務凍結
- 5. Hadoop Map減少引用靜態對象
- 6. Hadoop map減少移除小於或大於映射器的值
- 7. Hadoop。將結果減少爲單個值
- 8. 並行化map減少
- 9. 減少一個數據幀爲n值
- 10. mongoDB map/reduce減去減少
- 11. 減少JavaScript代碼
- 12. 減少SQL代碼
- 13. 減少CSS代碼
- 14. Hadoop減少錯誤
- 15. Distibuted Cache減少Hadoop
- 16. Map減少計算下降率的代碼
- 17. 如何更改hadoop中map減少函數的log4j級別
- 18. Hadoop Map減少多節點羣集上的程序
- 19. hadoop map的實際用法減少hive豬hbase
- 20. Hadoop排序映射並減少鍵值
- 21. 減少我的代碼
- 22. Hadoop的流未能與Hadoop中減少工作(與NLTK代碼)1.0.0
- 23. Hadoop的 - 地圖-減少 - java.lang.NoClassDefFoundError
- 24. 在hadoop中使用map減少讀取文件
- 25. Hadoop Map減少 - 如何加快作業啓動/設置
- 26. Hadoop Map減少分佈式緩存類路徑問題
- 27. Map減少工作雖然Hadoop是卡住了
- 28. hadoop map任務重啓時減少完成80%
- 29. 減少代碼。減少一些for-loops到一個python
- 30. 使用Hadoop和HBase減少一個映射然後減少
你是什麼意思「我不想使用任何hadoop命令來完成這個簡單的任務」? –
在Hadoop中,reducer根據鍵的值對輸出進行排序。因此,在編寫輸出時,如果我們只是交換密鑰和值,我。即,將值(它將是計數)作爲鍵和鍵作爲值,然後它將根據值進行排序。然後我們所要做的就是運行命令: hadoop fs -cat | tail -n 其中n是您想知道的前n個值。但我不想用上面的命令來完成任務。我只是想通過map reduce progamming來完成。 –
user3078014
錯了。減速器不會對輸出進行排序。減速器從映射器中分類輸入!巨大差距! –