調用mapreduce工作從main()
和ToolRunner.run()
之間有什麼區別?當我們說主類說MapReduce extends Configured implements Tool
時,我們得到的額外特權是什麼,如果我們只是從主方法中簡單地執行一項工作,我們就沒有什麼特權了?謝謝。調用工作區別
調用工作區別
回答
有沒有額外的特權,但你的命令行選項獲得通過GenericOptionsParser,這將允許你提取某些配置屬性,並從它配置的配置對象運行:
http://hadoop.apache.org/common/docs/r0.20.2/api/org/apache/hadoop/util/GenericOptionsParser.html
基本上而在解析一些選項(使用列表中參數的索引),可以從命令行明確配置配置屬性:
hadoop jar myJar.jar com.Main prop1value prop2value
public static void main(String args[]) {
Configuration conf = new Configuration();
conf.set("prop1", args[0]);
conf.set("prop2", args[1]);
conf.get("prop1"); // will resolve to "prop1Value"
conf.get("prop2"); // will resolve to "prop2Value"
}
成爲更多mor Ë縮合ToolRunner:
hadoop jar myJar.jar com.Main -Dprop1=prop1value -Dprop2=prop2value
public int run(String args[]) {
Configuration conf = getConf();
conf.get("prop1"); // will resolve to "prop1Value"
conf.get("prop2"); // will resolve to "prop2Value"
}
一個警告的最後一句話,但:使用配置方法getConf()時,先創建工作對象,然後將它配置了 - 作業構造使得Configruation對象的副本傳遞,因此,如果您進行了更改傳遞的參考,你的工作將不會看到這些變化:
public int run(String args[]) {
Configuration conf = getConf();
conf.set("prop3", "blah");
Job job = new Job(conf); // job will have a deep copy of conf
conf.set("prop4", "dummy"); // here we're amending the original conf
job.getConfiguration().get("prop4"); // will resolve to null
}
通過使用ToolRunner .RUN(),任何Hadoop的應用程序可以處理standard command line options通過Hadoop的支持。 ToolRunner內部使用GenericOptionsParser。 簡而言之,分析提供命令行的hadoop特定選項並將其設置到應用程序的Configuration對象中。如果你只是使用main(),這不會自動發生。
例如。如果你說:
% hadoop MyHadoopApp -D mapred.reduce.tasks=3
然後ToolRunner.run(new MyHadoopApp(), args)
會自動值參數mapred.reduce.tasks
在Configuration
對象設置爲3。
我們沒有額外的特權。通常人們不會在hadoop作業中簡單地使用main()。使用ToolRunner .run()是一種標準做法。
@ TejasP-非常感謝! :)是啊,我腦子裏有這麼模糊的想法,但現在清楚了.. – 2012-03-25 15:06:32
- 1. python urllib2 for http和https工作區別
- 2. C++:調用操作符並調用它的實現之間有區別
- 3. 使用移調有什麼區別?
- 4. 模板調用有什麼區別?
- 5. jQuery函數調用的區別$(function(){})
- 6. 調用exampleFunction()和exampleFunction.call()有什麼區別?
- 7. 調用結構變量的區別
- 8. require與requirejs調用的區別
- 9. 這些os.popen調用有什麼區別?
- 10. 綁定和調用有什麼區別?
- 11. Windows程序調用有什麼區別?
- 12. API調用的SafeProcessHandle和IntPtr的區別
- 13. 使用工作區4.3.1
- 14. 調用不工作
- 15. 調用不工作
- 16. 這兩個代碼有什麼區別?一個工作,一個不工作?
- 17. 區別表單動作
- 18. 調用函數與返回函數調用 - 區別?
- 19. 通用區別
- 20. SQL區別子句不起作用?
- 21. 從Java不工作,直接調用ImageMagick的調用工作
- 22. 將被調用函數的工作區公開爲調用MATLAB中的函數
- 23. 用於TFS 2015的協調工作區vNext構建
- 24. 在Eclipse工作區涵蓋其所有調用的方法
- 25. onActivityResult()沒有被調用,但在別處工作
- 26. Sharepoint工作區EventHandling
- 27. Xcode 4 - 工作區
- 28. 每個工作區
- 29. LocalDateTime時區工作,而LocalTime不工作
- 30. AWS Elastic Beanstalk發生Dockerfile錯誤;否則工作,有區別嗎?
那麼,這是與代碼很好的解釋。我早先沒有注意到幾點,比如先創建Job對象,然後得到它的配置,但現在有意義.. – 2012-03-25 15:14:39