整套大数据学习资料(视频+笔记)百度网盘无门槛下载:http://www.edu360.cn/news/content?id=3377

​ 5.2.2 辅助类GenericOptionsParser, Tool和ToolRunner

hadoop 小红牛 6℃ 0评论

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

public interface Tool extends Configurable {
int run(String [] args) throws Exception;

}

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

范例5-4. Too丨实现用于打印一个Configuration对象的属性的范例

public class ConfigurationPrinter extends Configured implements Tool {

static {

Configuration.addDefauItResource("hdfs-default.xml");

Configuration.addDefaultResource("hdfs-site.xml");

Configuration•addDefauItResource("mapred-default•xml");

Configuration.addDefauItResource("mapred-site.xml");

gOverride

public int run(String[] args) throws Exception {

Configuration conf = getConf();

for (Entry<String>String> en^ry: conf) {

System.out.printf("%s=%s\nM, entry.getKey(), entry.getValue());

return 0;

public static void main(String[] args) throws Exception {

int exitCode = ToolRunner.run(new ConfigurationPrinter(), args); System.exit(exitCode);

我,们把ConfigurationPrinter作为Configured的一个子类,

 

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

静态代码部分确保核心配置外的HDFSMapReduce配置能够被获取(因为Configuration已经获取了核心配置)。

可以设置哪些属性?

作为一个有用的工具,ConfigurationPrinter可用于了解在环境中某个属性是如何进行设置的。

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

默认的配置文档可通过以下形式的URL找到:http://hadoop.apache.org/common/docs/r<version>/<component>-default.html.例如,在1.0.0版本中,HDFS的默认配置在http://hadoop.apache.Org/common/docs/rl_0.0/hdfsdefault.html

注意:在客户端配置中设置某些属性,将不会产生影响。例如,如果在作业提交时想通过设置inapred.tasktracker.map.tasks.maxiinum

改变运行作业的tasktracker的任务槽)数,结果会令你失望,因为这个属 性只能在tasktracker的文件中进行设置。般情况下,可以通过属性名的组成部分来获知该属性应该在哪里进行设置。由于mapred.tasktracker.map.tasks.maximummapned.tasktracker

开头,因此,我们知道它只能为tasktracker守护进程进行设置。但是,这

不是硬性的,在有些情况下,我们需要进行尝试,甚至去阅读源代码。

本书讨论了Hadoop的很多重要的配置属性。

ConfigurationPrintermain()方法没有直接调用自身的run()方法,

而是调用ToolRunner的静态run()方法,该方法负责在调用自身的run()方法之前,为Tool建立一个Configuration对象。ToolRunner还使用了GenepicOptionsParser来获取在命令行方式中指定所有标准的选项,

 

然后,在Configuration实例上进行设置。运行下列代码,可以看到在

conf/hadoop-localhost.xml中设置的属性。

%mvn compile

%export HADOOP_CLASSPATH: target/classes

%hadoop ConfigurationPrinter -conf conf/hadoop-localhost.xml \

| grep mapred.job.tracker= mapred•job.tracker=localhost:8021

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

%hadoop ConfigurationPrinter -D color=yellow | grep color

color=yellow

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

GenericOptionsParserToolRunner支持的其他选项可参见表5-1。更 多的Hadoop用于配置的API可以在5.1节中找到。

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

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

%hadoop -Dcolor=yellow ConfigurationPrinter | grep color

如果希望通过系统属性进行配置,则需要在配置文件中反映相关的系统属性。具体讨论请参见5.1.2节。

5-1.GenericOptionsParser选项和ToolRunner选项

选项名称描述

-Dproperty=vaLue将指定值赋值给某个Hadoop配置属性。覆盖配置文件里的

默认属性或站点属性,或通过-conf选项设置的任何属性

 

选项名称

-fs uri

用指定的URI设置默认文件系统。这是4 fs.default.name=uri的快捷方式

-jt host:port

用指定主机和端口设置jobtracker这是-Dmapred. job.tracker= host:port的快捷方式

-files

fiLeljfiLe2j…

从本地文件系统(或任何指定模式的文件系统)中复制指定 文件到jobtracker所用的共享文件系统(通常是HDFS),确保在任务工作目录的MapReduce程序可以访问这些文 件(要想进一步了解复制文件到tasktracker机器时的分布 式缓存机制,请参见8.4.2节)

-archives

archivelj archi\/e2j

从本地文件系统(或任何指定模式的文件系统)复制指定存 档到jobtracker所用的共享文件系统(通常是HDFS),打 开存档文件,确保任务f作目录的MapReduce程序可以

访问这些存档

-libjarsjarljjar2,…

从本地文件系统(或任何指定模式的文件系统)复制指定JAR文件到被jobtracker使用的共享文件系统(通常是HDFS),把它们加入MapReduce任务的类路径中。这个 选项适用于传输作业需要的JAR文件

 

 

转载请注明:全栈大数据 » ​ 5.2.2 辅助类GenericOptionsParser, Tool和ToolRunner

喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址