辅助类GenericOptionsParser,Tool和ToolRunner

为了简化命令行方式运行作业,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.  
  3.   static {  
  4.     Configuration.addDefaultResource("hdfs-default.xml");  
  5.     Configuration.addDefaultResource("hdfs-site.xml");  
  6.     Configuration.addDefaultResource("mapred-default.xml");  
  7.     Configuration.addDefaultResource("mapred-site.xml");  
  8. }  
  9.  
  10. @Override  
  11. public int run(String[] args) throws Exception {  
  12.   Configuration conf = getConf();  
  13.   for (Entry<String, String> entry: conf) {  
  14.     System.out.printf("%s=%s\n", entry.getKey(), entry.getValue());  
  15.   }  
  16.     return 0;  
  17.   }  
  18.  
  19.   public static void main(String[] args) throws Exception {  
  20.     int exitCode = ToolRunner.run(new ConfigurationPrinter(), args);  
  21.     System.exit(exitCode);  
  22.   }  
  23. }  

我们把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文件



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
众所周知,人工智能是当前最热门的话题之一, 计算机技术与互联网技术的快速发展更是将对人工智能的研究推向一个新的高潮。 人工智能是研究模拟和扩展人智能的理论与方法及其应用的一门新兴技术科学。 作为人工智能核心研究领域之一的机器学习, 其研究动机是为了使计算机系统具有人的学习能力以实现人工智能。 那么, 什么是机器学习呢? 机器学习 (Machine Learning) 是对研究问题进行模型假设,利用计算机从训练数据中学习得到模型参数,并最终对数据进行预测和分析的一门学科。 机器学习的用途 机器学习是一种通用的数据处理技术,其包含了大量的学习算法。不同的学习算法在不同的行业及应用中能够表现出不同的性能和优势。目前,机器学习已成功地应用于下列领域: 互联网领域----语音识别、搜索引擎、语言翻译、垃圾邮件过滤、自然语言处理等 生物领域----基因序列分析、DNA 序列预测、蛋白质结构预测等 自动化领域----人脸识别、无人驾驶技术、图像处理、信号处理等 金融领域----证券市场分析、信用卡欺诈检测等 医学领域----疾病鉴别/诊断、流行病爆发预测等 刑侦领域----潜在犯罪识别与预测、模拟人工智能侦探等 新闻领域----新闻推荐系统等 游戏领域----游戏战略规划等 从上述所列举的应用可知,机器学习正在成为各行各业都会经常使用到的分析工具,尤其是在各领域数据量爆炸的今天,各行业都希望通过数据处理与分析手段,得到数据中有价值的信息,以便明确客户的需求和指引企业的发展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值