Chr*_*ite 24
没有额外的权限,但您的命令行选项通过GenericOptionsParser运行,这将允许您从中提取某些配置属性并配置Configuration对象:
http://hadoop.apache.org/common/docs/r0.20.2/api/org/apache/hadoop/util/GenericOptionsParser.html
基本上,您可以自己解析一些选项(使用列表中参数的索引),您可以从命令行显式配置Configuration属性:
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"
}
Run Code Online (Sandbox Code Playgroud)
使用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"
}
Run Code Online (Sandbox Code Playgroud)
但最后一句警告是:当使用Configuration方法getConf()时,首先创建Job对象,然后拉出它的Configuration - Job构造函数生成传入的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
}
Run Code Online (Sandbox Code Playgroud)
Tej*_*til 11
通过使用ToolRunner .run(),任何hadoop应用程序都可以处理hadoop支持的标准命令行选项.ToolRunner 在内部使用GenericOptionsParser.简而言之,解析了提供命令行的hadoop特定选项并将其设置到应用程序的Configuration对象中.如果你只是使用main(),这不会自动发生.
例如.如果你说:
% hadoop MyHadoopApp -D mapred.reduce.tasks=3
Run Code Online (Sandbox Code Playgroud)
然后ToolRunner.run(new MyHadoopApp(), args)
会mapred.reduce.tasks
在Configuration
对象中自动将value参数设置为3 .
我们没有额外的特权.通常人们不会在hadoop工作中使用main().使用ToolRunner .run()是一种标准做法.
归档时间: |
|
查看次数: |
7063 次 |
最近记录: |