我正在尝试使用 hadoop 中的 -D 命令行选项传递一个变量(不是属性),例如-Dmapred.mapper.mystring=somexyz
. 我可以在驱动程序中设置一个 conf 属性并在映射器中读回它。所以我可以使用它来将我的字符串作为附加参数传递并在驱动程序中设置它。但我想看看 -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("调试:在工具类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");
在驱动程序中,这是唯一的方法。