概述
首先给一个ToolRunner类的实例
package hadoop.study;
/**
* Created by denglinjie on 2017/3/7.
*/
import java.util.Map.Entry;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;
public class ToolRunnerDemo extends Configured implements Tool {
static {
//Configuration.addDefaultResource("hdfs-default.xml");
//Configuration.addDefaultResource("hdfs-site.xml");
//Configuration.addDefaultResource("mapred-default.xml");
//Configuration.addDefaultResource("mapred-site.xml");
}
public int run(String[] args) throws Exception {
Configuration conf = getConf();
for (Entry<String, String> entry : conf) {
System.out.printf("%s=%sn", entry.getKey(), entry.getValue());
}
return 0;
}
public static void main(String[] args) throws Exception {
int exitCode = ToolRunner.run(new ToolRunnerDemo(), args);
System.exit(exitCode);
}
}
我们可以看下ToolRunner的run方法代码
public static int run(Configuration conf, Tool tool, String[] args) throws Exception {
if(conf == null) {
conf = new Configuration();
}
GenericOptionsParser parser = new GenericOptionsParser(conf, args);
tool.setConf(conf);
String[] toolArgs = parser.getRemainingArgs();
return tool.run(toolArgs);
}
可以看到ToolRunner对象会创建一个Configuration对象,Configuration对象会加载hadoop的相关配置文件,默认情况下回加载core-default.xml和core-site.xml文件
核心代码如下:
static {
ClassLoader cL = Thread.currentThread().getContextClassLoader();
if(cL == null) {
cL = Configuration.class.getClassLoader();
}
if(cL.getResource("hadoop-site.xml") != null) {
LOG.warn("DEPRECATED: hadoop-site.xml found in the classpath. Usage of hadoop-site.xml is deprecated. Instead use core-site.xml, mapred-site.xml and hdfs-site.xml to override properties of core-default.xml, mapred-default.xml and hdfs-default.xml respectively");
}
addDefaultResource("core-default.xml");
addDefaultResource("core-site.xml");
varPat = Pattern.compile("\$\{[^\}\$ ]+\}");
MAX_SUBST = 20;
}
可在ToolRunnerDemo类的run方法中通过如下方法拿到配置文件中的参数
Configuration conf = getConf();
GenericOptionsParser parser = new GenericOptionsParser(conf, args);
String[] toolArgs = parser.getRemainingArgs();
return tool.run(toolArgs);
args是hadoop执行jar包代码时传入的命令行参数,所以可以看出:
GenericOptionParser类的目的就是对命令行的输入参数进行处理,并传入Demo类的run方法中使用
可通过-D在命令行传入参数
# hadoop jar tool_runer_class/toolrunnerdemo.jar ToolRunnerDemo -D key=value
实验发现,该参数也会出现在conf中,即如下代码也可以拿到命令行传入的参数
Configuration conf = getConf()
可通过-conf在命令行增加新的配置文件
# hadoop jar tool_runer_class/toolrunnerdemo.jar ToolRunnerDemo -conf /home/xx/hadoop-1.2.1/conf/mapred-site.xml
也可以通过在代码中添加如下代码,即把上述代码中的注释代开,来传入配置文件
static {
Configuration.addDefaultResource("hdfs-default.xml");
Configuration.addDefaultResource("hdfs-site.xml");
Configuration.addDefaultResource("mapred-default.xml");
Configuration.addDefaultResource("mapred-site.xml");
}
Configuration conf = getConf()
最后
以上就是生动小霸王为你收集整理的Hadoop系列之ToolRunner与GenericOptionsParser用法的全部内容,希望文章能够帮你解决Hadoop系列之ToolRunner与GenericOptionsParser用法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复