为了简化命令行方式运行作业,Hadoop自带了一些辅助类。GenericOptionsParser是一个类,用来解释常用的Hadoop命令行选项,并根据需要,为Configuration对象设置相应的取值。通常不直接使用GenericOptionsParser,更方便的方式是:实现Tool接口,通过ToolRunner来运行应用程序,ToolRunner内部调用GenericOptionsParser:

 
  1. GenericOptionsParser:
  2. public interface Tool extends Configurable {
  3. int run(String [] args) throws Exception;
  4. }

例5-3给出了一个非常简单的Tool的实现,用来打印Tool的Configuration对象中所有属性的键值对。

例5-3. Tool实现示例,用于打印一个Configuration对象的属性

 
  1. public class ConfigurationPrinter extends Configured implements Tool {
  2. static {
  3. Configuration.addDefaultResource("hdfs-default.xml");
  4. Configuration.addDefaultResource("hdfs-site.xml");
  5. Configuration.addDefaultResource("mapred-default.xml");
  6. Configuration.addDefaultResource("mapred-site.xml");
  7. }
  8. @Override
  9. public int run(String[] args) throws Exception {
  10. Configuration conf = getConf();
  11. for (Entry<String, String> entry: conf) {
  12. System.out.printf("%s=%s\n", entry.getKey(), entry.getValue());
  13. }
  14. return 0;
  15. }
  16. public static void main(String[] args) throws Exception {
  17. int exitCode = ToolRunner.run(new ConfigurationPrinter(), args);
  18. System.exit(exitCode);
  19. }
  20. }

我们把ConfigurationPrinter作为Configured的一个子类,Configured是Configurable接口的一个实现。Tool的所有实现都需要实现Configurable(因为Tool继承于Configurable),Configured子类通常是一种最简单的实现方式。run()方法通过Configurable的getConf()方法获取Configuration,然后重复执行,将每个属性打印到标准输出。

静态代码部分用来获取HDFS和MapReduce配置和核心配置(Configuration已经取得核心配置)。

ConfigurationPrinter的main()方法没有直接调用自身的run()方法,而是调用ToolRunner的静态run()方法,该方法负责在调用run()方法之前,为Tool建立一个Configuration对象。ToolRunner还使用了GenericOptionsParser来获取在命令行方式中指定的任何标准选项,然后,在Configuration实例上进行设置。运行下列代码,可以看到在conf/hadoop-localhost.xml中设置的属性。

 
  1. % hadoop ConfigurationPrinter -conf conf/hadoop-localhost.xml \
  2. | grep mapredmapred.job.tracker=
  3. mapred.job.tracker=localhost:8021

可以设置哪些属性?

可以在环境中设置什么属性,一个有用的工具便是ConfigurationPrinter。

也可以在Hadoop安装路径的docs目录中,查看所有公共属性的默认设置,相关文件包括coredefault.html,hdfs-default.html 和mapred-default.html这几个HTML文件。每个属性都有用来解释属性作用和取值范围的描述。

注意:在客户端配置中设置某些属性,将不会产生影响。例如,如果在作业提交时想通过设置mapred.tasktracker.map.tasks.maximum来改变运行作业的tasktracker的任务槽(task slot)数,结果会令你失望,因为这个属性只能在tasktracker的mapred-site.xml文件中进行设置。一般情况下,可以通过属性名来告诉组件该属性应该在哪里进行设置,由于mapred.tasktracker.map.tasks.maximum以mapred.tasktracker开头,因此,我们知道它只能为tasktracker守护进程设置。但是,这不是硬性的,在有些情况下,我们需要进行尝试,甚至去阅读源码。

本书讨论了Hadoop的很多重要的配置属性。在本书的网站(http://www.hadoopbook.com)上可以找到配置属性的参考资料。

GenericOptionsParser也允许设置个别属性。例如:

 
  1. % hadoop ConfigurationPrinter -D color=yellow | grep color
  2. color=yellow

-D选项用于将键color的配置属性值设置为yellow。设置为-D的选项优先级要高于配置文件里的其他属性。这一点很有用:可以把默认属性放入配置文件中,然后再在需要时,用-D选项来覆盖它们。一个常见的例子是:通过-D mapred.reduce.tasks=n来设置MapReduce作业中reducer的数量。这样会覆盖集群上或客户端配置属性文件中设置的reducer数量。

GenericOptionsParser和ToolRunner支持的其他选项见表5-1。更多的Hadoop配置API可以在第130页的"配置API"小节中找到。

 用-D property=value选项将Hadoop属性设置为GenericOptionsParser (和 ToolRunner),不同于用-Dproperty=value选项将JVM系统属性设置为Java命令。JVM系统属性的语法不允许D和属性名之间有任何空格,而GenericOptionsParser要求用空格来分隔D和属性名。

JVM系统属性来自于java.lang.System类,而Hadoop属性只能从Configuration对象中获取。所以,下面的命令行将没有任何输出,因为ConfigurationPrinter没有使用System类

 
  1. % hadoop -Dcolor=yellow ConfigurationPrinter | grep color

如果希望通过系统属性进行配置,则需要在配置文件中反映相关的系统属性。具体讨论见第132页的"可变的扩展"小节。

表5-1. GenericOptionsParser选项和ToolRunner 选项

选项名称

描述

-D property=value

将指定值赋值给确定的Hadoop配置属性。

覆盖配置文件里的默认属性或站点属性,

或通过-conf选项设置的任何属性

-conf filename ...

将指定文件添加到配置的资源列表中。

这是设置站点属性或同时设置一组属性的简便方法

-fs uri

用指定的URI设置默认文件系统。这是

-D fs.default.name=uri的快捷方式

-jt host:port

用指定主机和端口设置jobtracker。这是-

D mapred.job.tracker= host:port的快捷方式

-files file1,file2,...

从本地文件系统(或任何指定模式的文件系统)

中复制指定文件到jobtracker所用的共享文件

系统(通常是HDFS),确保在任务工作目录的

MapReduce程序可以访问这些文件(要想进一步

了解如何复制文件到tasktracker机器的分布式缓

存机制,请参见第253页的“分布式缓存”小节)

-archives
archive1,archive2,..

从本地文件系统(或任何指定模式的文件系统)

复制指定存档到jobtracker所用的共享文件系统

(通常是HDFS),打开存档文件,确保任务工作

目录的MapReduce程序可以访问这些存档

选项名称

描述

-libjars jar1,jar2,…

从本地文件系统(或任何指定模式的文件系统)复制指

定JAR文件到被jobtracker 使用的共享文件系统

(通常是HDFS),把它们加入MapReduce任务的类路

径中。这个选项适用于传输作业需要的JAR文件

辅助类GenericOptionsParser,Tool和ToolRunner相关推荐

  1. hadoop权威指南(一)

    Chap1 初始hadoop MapReduce比较适合以批处理方式处理需要分析整个数据集的问题,尤其是动态分析. MapReduce对非结构化或半结构化数据非常有效,因为它是中处理数据时才对数据进行 ...

  2. 使用ToolRunner运行Hadoop作业的原理及用法

    使用ToolRunner运行Hadoop作业的原理及用法 @(HADOOP)[hadoop, 大数据] 使用ToolRunner运行Hadoop作业的原理及用法 一示例程序一打印所有参数 1直接运行程 ...

  3. 使用ToolRunner运行Hadoop程序基本原理分析

    为了简化命令行方式运行作业,Hadoop自带了一些辅助类.GenericOptionsParser是一个类,用来解释常用的Hadoop命令行选项,并根据需要,为Configuration对象设置相应的 ...

  4. 《Hadoop.The.Definitive.Guide.4th.Edition.2015.3》学习笔记

    一.读后感 最近读完了<Hadoop.The.Definitive.Guide.4th.Edition.2015.3>英文第4版,个人感觉这本书是hadoop目前最权威.最全面.最靠谱的书 ...

  5. hadoop java访问_Hadoop(五)搭建Hadoop客户端与Java访问HDFS集群

    上一篇详细介绍了HDFS集群,还有操作HDFS集群的一些命令,常用的命令: hdfs dfs -ls xxx hdfs dfs -mkdir -p /xxx/xxx hdfs dfs -cat xxx ...

  6. Hadoop MapReduce编程 API入门系列之查找相同字母组成的字谜(三)

    找出相同单词的所有单词.现在,是拿取部分数据集(如下)来完成本项目. 项目需求 一本英文书籍包含成千上万个单词或者短语,现在我们需要在大量的单词中,找出相同字母组成的所有anagrams(字谜). 思 ...

  7. Hadoop系列之ToolRunner与GenericOptionsParser用法

    首先给一个ToolRunner类的实例 package hadoop.study;/*** Created by denglinjie on 2017/3/7.*/ import java.util. ...

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

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

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

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

最新文章

  1. 【深度学习】高效读取数据的方法(TFRecord)
  2. 剑指Offer之字符串的排列
  3. java jdbc reparecall_Java Connection.prepareCall方法代碼示例
  4. java treeset比较,java中TreeSet的两种排序比较的方式
  5. sql 获取第10到20个记录
  6. java桥牌发牌算法
  7. 摩尔定律还会一直生效吗?
  8. 知更鸟php,PHP编辑器:phpDesigner
  9. JavaEE | 多线程基础
  10. 数据管理平台DMP细致研究——BlueKai
  11. mysql有numeric类型吗_mysql数值类型 - numeric
  12. react native 添加自定义字体
  13. SQL Server 非对称秘钥管理
  14. iOS 在 Xcode 中重命名项目名称
  15. SAP SE14恢复表数据
  16. 【2019.07.10】python + OpenCV + adb 实现 自动 微信跳一跳
  17. 真正借奥运雄起只有无线互联网
  18. Docker——容器内部执行宿主机的docker命令
  19. 如何选择IIOT数据采集解决方案:公有或私有?
  20. mysql中的like什么意思_mysql语句中like用法是什么

热门文章

  1. 2022 CSP-S2 提高组 第2轮 复赛 视频
  2. 2023第八届少儿模特明星盛典 小超模黄梓曦 担任全球赛代言人
  3. 嵌入式的我们需要学习一下ROS吗?
  4. vue实战项目仿卖座电影APP
  5. java制作媒体播放器_用Java构造自己的媒体播放器
  6. jzoj6009. 【THUWC2019模拟2019.1.18】Counting (dp)
  7. 【Matlab人脸识别】人脸实时检测与跟踪【含GUI源码 673期】
  8. 论文笔记-Reliable Supervision from Transformations for Unsupervised Optical Flow Estimation
  9. 7.2 Java(农夫果园【3】:一个农场,专门种植销售各类水果,在这个系统中需要描述下列水果葡萄、草莓、苹果)
  10. [ROS2基础] TF2使用细节