目前我正在尝试通过命令行参数传递一些值,然后使用GenericOptionsParser并使用工具实现解析它。
从主节点我运行这样的东西:
bin/hadoop jar MYJAR.jar MYJOB -D mapred.reduce.tasks=13
但这只适用于大师!!有没有办法让这个也适用于奴隶?
我使用Hadoop 0.20.203。
感谢任何帮助。
答案 0 :(得分:3)
但这只适用于大师!!有没有办法将这个应用于奴隶?
根据"Hadoop : The Definitive Guide"。在客户端设置一些属性是没有用的。您需要在配置文件中设置相同的内容。请注意,您还可以在配置文件中创建新属性,并使用配置对象在代码中读取它们。
请注意,在客户端配置中设置某些属性无效。对于 例如,如果在您的作业提交中设置了mapred.tasktracker.map.tasks.maximum 期望它会改变运行你的工作的任务工作人员的任务槽的数量,然后你会感到失望,因为这个属性只有荣幸 如果在tasktracker的mapred-site.html文件中设置。通常,您可以告诉组件 其中一个属性应该由其名称设置,因此mapred.task.tracker.map.tasks.maximum以mapred.tasktracker开头这一事实为您提供了一条线索,即它只能为tasktracker守护进程设置。然而,这不是一个严格的规则,因此在某些情况下,您可能需要求助于试错,甚至阅读来源。
您还可以使用conf / hadoop-env.sh文件中的HADOOP_*_OPTS配置Hadoop变量的环境。
再次,根据"Hadoop : The Definitive Guide"。
不要将使用-D property = value选项的Hadoop属性设置为GenericOptionsParser(和ToolRunner),并使用java命令的-Dproperty = value选项设置JVM系统属性。 JVM系统属性的语法不允许D和属性名称之间有任何空格,而GenericOptionsParser要求它们用空格分隔。
从java.lang.System类中检索JVM系统属性,而只能从Configuration对象访问Hadoop属性。