我是靠谱客的博主 生动小霸王,最近开发中收集的这篇文章主要介绍Hadoop系列之ToolRunner与GenericOptionsParser用法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

首先给一个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");
 }


这些方式,最终都能够在下面的conf中拿到参数
Configuration conf = getConf()


最后

以上就是生动小霸王为你收集整理的Hadoop系列之ToolRunner与GenericOptionsParser用法的全部内容,希望文章能够帮你解决Hadoop系列之ToolRunner与GenericOptionsParser用法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(31)

评论列表共有 0 条评论

立即
投稿
返回
顶部