我正在尝试在Hadoop中使用-D命令行选项传递一个变量(而不是属性),例如-Dmapred.mapper.mystring=somexyz
。我可以在Driver程序中设置一个配置属性,并在mapper中读取它。因此,我可以使用这种方式将我的字符串作为附加参数传递并在Driver程序中设置它。但我想看看是否可以使用-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: 在Tool类中mapred.mapper.regex "+s_ptrn + "\n"); 输出NULL
但是这个可以正常工作
conf.set("DUMMYVAL","100000000000000000000000000000000000000"); in driver is read properly in mapper by get method.
我的问题是,如果整个互联网都在说我可以使用-D选项,那么为什么我不能使用?是因为这不能用于任何参数,只能用于属性吗?我们可以把它放在文件中读取,然后在驱动程序中使用吗?
类似下面的内容:
Configuration conf = new Configuration();
conf.addResource("~/conf.xml");
在驱动程序中,这是唯一的方法。
$HADOOP_HOME/bin/hadoop jar /home/hduser/Hadoop_learning_path/toolgrep.jar -D mapred.mapper.mystring=something /home/hduser/hadoopData/inputdir/ /home/hduser/hadoopData/grepoutput
- Radek Tomšej