我正在研究MapReduce程序,我需要將實體插入到數據庫中。由於某些性能問題,將實體插入數據庫應該在組合器中完成。我的程序沒有減速器,所以只有映射器和組合器。由於Hadoop引擎可能不會執行組合器(組合器是可選的),我如何執行它來運行組合器?如何執行一個mapreduce程序來執行組合器?
1
A
回答
2
MapReduce框架沒有提供強制執行組合器的支持方式。組合器可以被稱爲0,1或多次。該框架可以自由地對此做出自己的決定。
當前實現決定在映射任務執行期間基於溢出發生的磁盤運行組合器。 mapred-default.xml的Apache Hadoop文檔記錄了幾個可能影響溢出活動的配置屬性。
<property>
<name>mapreduce.map.sort.spill.percent</name>
<value>0.80</value>
<description>The soft limit in the serialization buffer. Once reached, a
thread will begin to spill the contents to disk in the background. Note that
collection will not block if this threshold is exceeded while a spill is
already in progress, so spills may be larger than this threshold when it is
set to less than .5</description>
</property>
<property>
<name>mapreduce.task.io.sort.factor</name>
<value>10</value>
<description>The number of streams to merge at once while sorting
files. This determines the number of open file handles.</description>
</property>
<property>
<name>mapreduce.task.io.sort.mb</name>
<value>100</value>
<description>The total amount of buffer memory to use while sorting
files, in megabytes. By default, gives each merge stream 1MB, which
should minimize seeks.</description>
</property>
此外,還有一個未記錄的配置屬性,mapreduce.map.combine.minspills
,它定義在運行組合器之前所需溢出的最小數目。如果未指定,則默認值爲3
。
有人可能會調整這些配置屬性,恰好設置觸發足夠溢出的條件超過mapreduce.map.combine.minspills
,因此保證至少有一次對組合器的調用。不過,我不能推薦,因爲它會非常脆弱。邏輯對外部因素非常敏感,例如輸入數據的大小。另外,它將依賴當前MapReduce代碼庫的具體實現細節。內部算法可能會發生變化,這些變化可能會破壞您的假設。實際上沒有用於強制組合器運行的公開API。
此外,請記住,與縮減器不同,組合器可能無法獲取與特定鍵相關的所有值的完整圖片。如果多個地圖任務使用相同的密鑰處理記錄,則減速機是唯一可以保證將所有這些值組合在一起的地方。即使在單個地圖任務中,組合器也可以使用從處理的輸入分割中拉出的不同密鑰值的子集執行多次。
有關將數據從Hadoop導出到關係數據庫的問題的更標準解決方案,請考慮DBOutputFormat或Sqoop。
相關問題
- 1. MapReduce與組合器的執行時間
- 2. hadoop mapreduce只執行一個映射器
- 3. Hadoop - 執行一個終端,在mapreduce中執行命令
- 4. 執行一個JFrame程序
- 5. MapReduce連續執行
- 6. 並行執行mapreduce作業
- 7. 當Hadoop MapReduce運行一個組合器時的確切來源
- 8. 如何編寫一個C程序來執行另一個程序?
- 9. 如何添加$ q來執行執行?
- 10. 這是一個可執行的應用程序嗎? /執行一個javascript程序
- 11. 使用MapReduce執行組操作
- 12. 如何創建一個腳本來執行Python中的執行管理器?
- 13. 如何執行程序?
- 14. shebang如何執行程序?
- 15. 該程序如何執行?
- 16. R中設置一個計時器來執行程序
- 17. 如何寫一個C程序來執行一定數量的處理器秒?
- 18. 如何在MATLAB R2014a上執行MapReduce?
- 19. 如何在另一個線程組中執行線程組?
- 20. 執行來自tidesdk程序的另一個程序的命令
- 21. Hadoop MapReduce,Java執行問題
- 22. PySpark執行MapReduce工作
- 23. 如何使用數組來執行此程序?
- 24. 如何從另一個Qt程序執行分離的C++可執行文件?
- 25. apache nifi - 如何執行一個接一個的進程組
- 26. 如何從java服務器遠程執行一個windows可執行文件?
- 27. 如何使JavaScript執行鍵盤組合
- 28. C Linux的 - 如何從另一個程序執行程序
- 29. Java:執行Hadoop MapReduce有一些問題
- 30. 如何並行執行子程序?
答案應該是顯而易見的:在減速器中執行(添加一個)。 –
我不想在Reducer中執行這個操作的原因是我不希望我的應用程序經歷洗牌/排序的昂貴階段。 –