Hadoop框架調用的mapper或reducer類的run()
方法如何?該框架調用run()
方法,但它需要一個上下文對象,那麼Hadoop如何傳遞該對象?什麼信息存在於那個對象中?Hadoop映射器上下文對象
5
A
回答
3
run()方法將使用Java運行時多態(稱爲方法重寫)來調用。正如您可以在下面的鏈接中看到#569行,擴展映射器/縮減器將使用Java Reflection API進行實例化。所述MapTask類獲取從作業配置對象擴展映射器/減速器其中,客戶端程序將已經被配置擴展使用job.setMapperClass()
以下映射器/減速器類的名稱從Hadoop Source MapTask.java
mapperContext = contextConstructor.newInstance(mapper, job, getTaskID(),
input, output, committer,
reporter, split);
input.initialize(split, mapperContext);
mapper.run(mapperContext);
input.close();`
採取的代碼
#621行是運行時多態性的一個例子。在這一行上,MapTask以'Mapper Context'爲參數調用配置的映射器的run()方法。如果run()未被擴展,它會調用org.apache.hadoop.mapreduce.Mapper
上的run()方法,該方法再次在配置的映射器上調用map()方法。
在上述鏈路的線路#616,MapTask創建具有工作配置等的所有細節的上下文對象作爲由@harpun提及並然後傳遞到run()方法在線路#621
上面的解釋適用於減少任務以及相應的ReduceTask類作爲主要入門級。
0
是的,映射程序的run()
方法在運行地圖任務嘗試時由MR框架調用。就上下文而言,請查看Mapper.Context的文檔,特別是已實現的接口及其javadoc可以全面瞭解上下文中包含的信息。通過上下文,你可以訪問諸如數據:
- 作業信息(作業配置,映射器/減速的類名,作業名稱,工作目錄)當前執行的任務試圖
- 當前關鍵的
- 狀態,值,輸入分割(地圖任務特定信息)
當然存在Reducer類似的上下文對象:Reducer.Context。
相關問題
- 1. 映射器輸入鍵值對Hadoop中
- 2. Hadoop的許多映射器
- 3. Hadoop幾個映射器
- 4. 配置對象在hadoop映射器中爲空
- 5. XML到對象映射器
- 6. 映射器:鍵值對象
- 7. Hadoop - 文件到塊映射
- 8. hadoop中映射器和合並器的不同上下文類型
- 9. 映射對象
- 10. 映射對象
- 11. HADOOP:從映射器發射矩陣
- 12. Restkit手動映射:選擇託管對象上下文
- 13. 上下文映射關係
- 14. 對象映射器/核心數據,對象映射器無值字段
- 15. 在Android上兼容對象映射器的對象
- 16. Hadoop遞歸映射
- 17. Hadoop映射進程
- 18. Hadoop流式縮減器映射器
- 19. Hadoop映射器/還原器重用
- 20. 使用構建器(使用immutables註釋處理器)將映射對象映射到不可變對象映射
- 21. linqtosql對象映射
- 22. Grails映射對象
- 23. 對象Xml映射
- 24. 映射對象與映射實體
- 25. 使用映射映射嵌套對象
- 26. OneToOne映射不設置映射對象
- 27. NHibernate的映射,映射對象
- 28. IE9投射上下文'這'到對象
- 29. 使用自動映射器將多個對象映射到一個對象
- 30. RestKit對象映射沒有映射我的對象
感謝niranjan可以在你運行任何簡單的工作時解釋所有hadoop框架類的執行情況? – 2013-05-03 04:42:13
這不是一個簡單的答案。有很多hadoop框架類參與其中,在擴展類被調用之前,真正的整個軟件層都被執行了。我建議下載並將hadoop源文件附加到IDE中,然後調試任何作業以瞭解調用堆棧中使用的高級類。 – 2013-05-06 15:15:45
@NiranjanSarvi,你能告訴我們MapTask類是如何創建其他類的上下文類的對象的嗎?在MapTask類和Context類之間是否有任何關係,因爲在庫中Context類是一個抽象類,甚至沒有被Maptask類實現?它來自其他方式嗎? – Kate 2017-10-22 09:28:03