我尝试在hadoop中使用-d命令行选项传递变量(而不是属性) -Dmapred.mapper.mystring=somexyz
. 我可以在驱动程序中设置conf属性,并在mapper中读取它。所以我可以用它来传递字符串作为附加参数,并在驱动程序中设置它。但是我想看看-d选项是否也可以用来做同样的事情
我的命令是:
$HADOOP_HOME/bin/hadoop jar /home/hduser/Hadoop_learning_path/toolgrep.jar /home/hduser/hadoopData/inputdir/ /home/hduser/hadoopData/grepoutput -Dmapred.mapper.mystring=somexyz
驱动程序
String s_ptrn=conf.get("mapred.mapper.regex");
system.out.println(“debug:in tool class mapred.mapper.regex”+s\u ptrn+“\n”);提供空值
但这是有效的
conf.set("DUMMYVAL","100000000000000000000000000000000000000"); in driver is read properly in mapper by get method.
我的问题是,如果所有的互联网都说我可以使用-d选项,那么为什么我不能呢?这是不是不能用于任何参数而只能用于属性?我们可以把它放在我应该在驱动程序中读取然后使用它的文件中读取哪些内容?
像这样的
Configuration conf = new Configuration();
conf.addResource("~/conf.xml");
在驱动程序中,这是唯一的方法。
1条答案
按热度按时间cgh8pdjw1#
正如托马斯所写,你错过了空间。你也在传递变量
mapred.mapper.mystring
在您的cli中,但在您尝试获取的代码中mapred.mapper.regex
. 如果要使用-d参数,应该使用工具接口。更多信息在这里-hadoop:为mapreduce驱动程序实现工具接口。或者您可以像这样解析cli参数:
你的命令可以是这样的:
希望有帮助