先看Configurable 接口:
1
2 3 4 |
public interface Configurable {
void setConf(Configuration conf); Configuration getConf(); } |
Configurable接口只定义了两个方法:setConf与 getConf。
Configured类实现了Configurable接口:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public class Configured implements Configurable {
private Configuration conf; public Configured() { this(null); } public Configured(Configuration conf) { setConf(conf); } public void setConf(Configuration conf) { this.conf = conf; } public Configuration getConf() { return conf; } } |
Tool接口继承了Configurable接口,只有一个run()方法。(接口继承接口)
继承关系如下:
再看ToolRunner类的一部分:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public class ToolRunner {
public static int run(Configuration conf, Tool tool, String[] args) throws Exception{ if(conf == null) { conf = new Configuration(); } GenericOptionsParser parser = new GenericOptionsParser(conf, args); //set the configuration back, so that Tool can configure itself tool.setConf(conf); //get the args w/o generic hadoop args String[] toolArgs = parser.getRemainingArgs(); return tool.run(toolArgs); } } |
从ToolRunner的静态方法run()可以看到,其通过GenericOptionsParser 来读取传递给run的job的conf和命令行参数args,处理hadoop的通用命令行参数,然后将剩下的job自己定义的参数(toolArgs = parser.getRemainingArgs();)交给tool来处理,再由tool来运行自己的run方法。
通用命令行参数指的是对任意的一个job都可以添加的,如:
-conf < configuration file > specify a configuration file -D < property=value > use value for given property -fs < local|namenode:port > specify a namenode -jt < local|jobtracker:port > specify a job tracker -files < comma separated list of files > specify comma separated files to be copied to the map reduce cluster -libjars < comma separated list of jars > specify comma separated jar files to include in the classpath. -archives < comma separated list of archives > specify comma separated archives to be unarchived on the compute machines.
一个典型的实现Tool的程序:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
/**
MyApp 需要从命令行读取参数,用户输入命令如, $bin/hadoop jar MyApp.jar -archives test.tgz arg1 arg2 -archives 为hadoop通用参数,arg1 ,arg2为job的参数 */ public class MyApp extends Configured implements Tool { //implemet Tool’s run public int run(String[] args) throws Exception { Configuration conf = getConf(); // Create a JobConf using the processed conf JobConf job = new JobConf(conf, MyApp.class); // Process custom command-line options Path in = new Path(args[1]); Path out = new Path(args[2]); // Specify various job-specific parameters job.setJobName("my-app"); job.setInputPath(in); job.setOutputPath(out); job.setMapperClass(MyApp.MyMapper.class); job.setReducerClass(MyApp.MyReducer.class); JobClient.runJob(job); } public static void main(String[] args) throws Exception { // args由ToolRunner来处理 int res = ToolRunner.run(new Configuration(), new MyApp(), args); System.exit(res); } } |
http://hnote.org/big-data/hadoop/hadoop-tool-toolrunner
相关推荐
《Hadoop大数据技术原理与应用》课后习题答案
Hadoop运行原理分析pdf
Hadoop豆瓣电影数据分析(Hadoop)操作源码
针对本次实验,我们需要用到Hadoop集群作为模拟大数据的分析软件,集群环境必须要包括,hdfs,hbase,hive,flume,sqoop等插件,最后结合分析出来的数据进行可视化展示,需要用到Python(爬取数据集,可视化展示)...
Hadoop运行原理分析
讲述大数据工具-Hadoop运行架构及原理,全局掌握Hadoop。
一个hadoop的简单介绍,可以让刚刚入门的同学们对hadoop有一个大概的了解。
1.大数据背景介绍 2. HADOOP体系架构 3. 基于HADOOP的大数据产品分析 4. 基于HADOOP的大数据行业应用分析 5.东软基于HADOOP的大数据应用建议
HDFS概述,HDFS客户端操作,HDFS数据流,namenode工作机制,datanode工作机制,HDFS 高可用集群配置
hadoop相关技术原理文档概述了,和hadoop相关的技术的原理,比如hbase,hive,mapreduce等的优缺点。
适合Hadoop初学者安装Hadoop
毕业设计,基于 Hadoop 的游戏数据分析系统毕业设计,基于 Hadoop 的游戏数据分析系统毕业设计,基于 Hadoop 的游戏数据分析系统毕业设计,基于 Hadoop 的游戏数据分析系统毕业设计,基于 Hadoop 的游戏数据分析系统...
是大数据课程大作业,基于Hadoop的电影影评数据分析,需要安装Hadoop,了解MapReduce 和HDFS。
2022毕业设计,基于 Hadoop 的游戏数据分析系统源码.zip
这是一个Eclipse中复制出来的MapReduce工程文件,如果你下载了源代码,需要部署在Linux环境下的Eclipse中,并且,这个Eclipse必须已经安装了hadoop开发插件,能够做Hadoop开发。不然,会提示找不到hadoop开发包。
Hadoop原理及部署,非常全面的讲解 大数据的理论和价值逐渐得到了社会各界的认可,各种各样的大数据应用系统应运而生,正在创造性地解决着不同使用场景下的问题。在大数据应用越来越多样化的同时,对提供支撑的基础...
,Hadoop 技术已经在互联网领域得到了广泛的应用。...同样也得到了许多公司的青睐,如百度主要将Hadoop 应用于日志分析和网页数据库的数据 挖掘;阿里巴巴则将Hadoop 用于商业数据的排序和搜索引擎的优化等。
很好的介绍Hadoop的资料,值得一看!
Hadoop概述 Hadoop介绍 Hadoop原理 Hadoop编程