我有1 TB未排序的字數(字:count),我想運行一個map reduce作業來選擇最大字數的單詞。在這種情況下,我希望有一個變量可以在所有縮減作業之間共享,這些作業將保持目前字數最多的單詞。 reduce函數只會檢查這個變量並在必要時更新它。那可能嗎?謝謝如何在hadoop中的所有減少作業之間共享變量
0
A
回答
2
我認爲你誤解了Mapreduce的工作原理。它恰恰不會在機器之間共享內存以提高吞吐量,儘管您受限於Mapreduce模型的機制。
爲了做到你說的話,你會做以下幾點:
Map : (word, count) -> (KEY_CONSTANT, (count, word))
而且
Combine/Reduce : (key, List<(count, word)>) -> (key, (count*, word*) with max count)
如果添加count
的關鍵,但要確保一切都還在一個分區,您可以告訴MapReduce按降序對count
進行排序,然後您可以實現一個單獨的簡化器,它只檢查每個列表中的第一個值。但是,您無法對組合器執行此操作,其輸入未分類。因爲它不會讀取其餘的數據,所以可能會讓實現更快。
有關如何有效地使用排序階段的詳細信息,請參閱How does MapReduce framework implement the sort phase?
2
你可以
- 設置減速機的數量爲1
- 將兩個實例變量添加到reducer類中,一個用於計數,另一個用於單詞,以保存關於最頻繁的詞的形成呢。
- 將reduce()方法中的reduce setup()方法
- 中的變量初始化爲reduce()方法,檢查當前單詞是否出現的次數多於最常出現的次數,如果是,則將單詞和計數存入變量
- 在清理()方法,你可以訪問的變量有最常說的一句話
如果需要運行多個減速,然後修改減速的清理()方法,而不是寫出來的字並將其作爲關鍵值對計算在上下文中。類似於上述原始減速器的後續減速器可以輕鬆找到出現次數最多的單詞。
相關問題
- 1. 如何在作業之間共享tHashInput?
- 2. Hadoop - 在鏈中多個作業之間共享文件
- 3. 如何在工作進程的所有實例之間共享變量asp.net
- 4. Pyramid中的所有請求之間共享的全局變量
- 5. 如何在共享上下文之間共享RSpec讓變量?
- 6. 在所有PHP進程之間共享變量/內存
- 7. Hadoop YARN作業在地圖0%處減少並減少0%
- 8. Hadoop - 通過套接字在減速器之間共享數據
- 9. 如何在代碼後面的所有方法之間共享變量?
- 10. 作業之間共享配置
- 11. 在沒有IPC的Perl中的子進程之間共享變量::共享
- 12. 如何在Java中的兩個線程之間共享變量?
- 13. 如何在android JNI中共享Java和C之間的變量?
- 14. 如何在codeigniter中的函數之間共享一個變量
- 15. 如何共享類之間的變量在Java中
- 16. 如何在java中的兩個線程之間共享變量?
- 17. 如何在Hadoop中的映射器之間共享HashMap?
- 18. 在PHP文件之間共享變量
- 19. 在類之間共享變量
- 20. 在UITabBarController視圖之間共享變量
- 21. 在Go主機之間共享變量
- 22. 在函數之間共享變量
- 23. 在PowerShell和C#之間共享變量
- 24. 在HTML頁面之間共享變量
- 25. 在方法之間共享變量
- 26. 在python和php之間共享變量
- 27. 在C#和C++之間共享變量
- 28. 在makefiles之間共享變量
- 29. 在less和coffeescript之間共享變量?
- 30. 在bash腳本之間共享變量
看看這個答案是否有幫助:http://stackoverflow.com/questions/15048013/sharing-data-between-master-and-reduce/15073701#15073701 – Amar 2013-03-01 19:09:28