首先给一个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=%s\n", 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用法相关推荐

  1. Hadoop中通过ToolRunner和Configured实现直接读取命令行动态出入reduce task数量,jar文件等...

    一个典型的实现Tool的程序: /** MyApp 需要从命令行读取参数,用户输入命令如, $bin/hadoop jar MyApp.jar -archives test.tgz  arg1 arg ...

  2. Hadoop中通过ToolRunner和Configured实现直接读取命令行动态出入reduce task数量,jar文件等

    一个典型的实现Tool的程序: /** MyApp 需要从命令行读取参数,用户输入命令如, $bin/hadoop jar MyApp.jar -archives test.tgz  arg1 arg ...

  3. 微软BI 之SSAS 系列 - 多维数据集维度用法之二 事实维度(退化维度 Degenerate Dimension)...

    这篇文章是基于上一篇 SSAS 系列 - 多维数据集维度用法之一 引用维度 Referenced Dimension 继续讲解多维数据集维度用法中的事实维度. 事实维度,顾名思义就是把事实表 Fact ...

  4. [js高手之路]深入浅出webpack教程系列9-打包图片(file-loader)用法

    [js高手之路]深入浅出webpack教程系列索引目录: [js高手之路]深入浅出webpack教程系列1-安装与基本打包用法和命令参数 [js高手之路]深入浅出webpack教程系列2-配置文件we ...

  5. Hadoop 系列之 Hive

    Hadoop 系列之 Hive Hive 的官网:http://hive.apache.org/ Hive versions 1.2 onward require Java 1.7 or newer. ...

  6. Hadoop 系列之 HDFS

    Hadoop 系列之 HDFS 花絮 上一篇文章 Hadoop 系列之 1.0和2.0架构 中,提到了 Google 的三驾马车,关于分布式存储,计算以及列式存储的论文,分别对应开源的 HDFS,Ma ...

  7. Hadoop 系列之 1.0 和2.0 架构

    Hadoop 系列之 1.0 和2.0 架构 自学大数据有一段时间了,找工作历时一周,找到一家大厂,下周入职,薪资待遇还不错,公司的业务背景自己也很喜欢.趁着还没有入职,给大家争取先把 Hadoop ...

  8. Hadoop 基础系列一Hadoop 系列之 1.0 和2.0 架构

    精选30+云产品,助力企业轻松上云!>>> Hadoop 系列之 1.0 和2.0 架构 自学大数据有一段时间了,找工作历时一周,找到一家大厂,下周入职,薪资待遇还不错,公司的业务背 ...

  9. hadoop系列三:mapreduce的使用(一)

    一:说明 此为大数据系列的一些博文,有空的话会陆续更新,包含大数据的一些内容,如hadoop,spark,storm,机器学习等. 当前使用的hadoop版本为2.6.4 上一篇:hadoop系列二: ...

最新文章

  1. 2ASK和2FSK相干解调误码率仿真matlab
  2. c语言函数之间互相调用符号,如何实现C和C++函数互相调用
  3. 白话Elasticsearch39-深入聚合数据分析之案例实战_搜索+聚合: 统计指定品牌下每个颜色的销量
  4. HarmonyOS之应用开发的电话服务与蜂窝网络
  5. JavaScript入门第一天,js教程,js变量, 数据类型,数据转换,隐式转换
  6. JDBC布尔兼容性列表
  7. php错误拦截机制,php拦截异常怎么写-PHP问题
  8. 睡眠音频分割及识别问题(六)--输入输出及方案讨论
  9. sql express 无法启动服务_在Windows2012下安装SQL Server 2005无法启动服务的解决办法...
  10. java 语法 泛型_java-解密泛型语法
  11. mysql 与QT的连接
  12. 刚刚发现的 xaml里面颜色的定义方式
  13. java重排序_Java synchronized 能防止指令重排序吗?
  14. 清华大学数学与计算机学院院长,王跃宣(清华大学教授)_百度百科
  15. 探秘广场舞:中老年市场绝佳切口?
  16. 代码-检测文件的编码
  17. 11.4-11.10PS自学第6课——套索与魔棒工具
  18. 手机访问电脑文件ftp服务器,怎么用手机直接访问电脑上的视频文件图片等?
  19. 科学家风采 | 2022 ACM杰出会员揭榜:本刊编委陈恩红教授入选!
  20. Ubuntu三步配置scrcpy,实现手机投屏和控制

热门文章

  1. 13. Roman to Integer
  2. Excel VBA 入门(零)
  3. Delphi TreeView失去焦点也选中
  4. 如何創建一個自己的 Composer/Packagist 包 (PHP)
  5. 用 as with ,和 ROW_NUMBER() 做分页查询
  6. RabbitMQ在Windows下设置服务启动
  7. mongo php 自增,PHP7下MongoDB自增或自减一个字段的值
  8. Spring MVC的转发与重定向
  9. php免费下载手册,php手册|php中文手册下载|好特下载
  10. linux 查找文件 locate,linux文件查找(find,locate)