先看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的运行原理分析深入揭示了其作为分布式处理方案的核心优势,即能够通过简单的编程模型,将复杂的数据处理任务分布到大规模的机器集群上,大幅度提升数据处理和分析的效率。对于刚刚入门的IT人员来说,掌握...
Hadoop豆瓣电影数据分析(Hadoop)操作源码
"Hadoop HDFS原理分析" HDFS(Hadoop Distributed File System)是Hadoop项目的一部分,是一个分布式文件管理系统。HDFS的设计理念是为了存储和管理大量的数据,具有高容错性、可扩展性和高性能的特点。 HDFS的...
《Hadoop运行原理分析》是深入理解大数据处理框架Hadoop的核心读物,它详细解析了Hadoop如何在大规模数据集上高效运行。本文件主要涵盖了以下几个关键知识点: 1. **Hadoop概述**:Hadoop是Apache软件基金会开发的...
【基于Hadoop豆瓣电影数据分析实验报告】 在大数据时代,对海量信息进行高效处理和分析是企业决策的关键。Hadoop作为一款强大的分布式计算框架,自2006年诞生以来,已经在多个领域展现了其卓越的数据处理能力。本...
总结,"hadoop组件程序包.zip"是一个为Hadoop初学者量身定制的学习资源,通过深入学习和实践,初学者可以全面掌握Hadoop的核心组件及其工作原理,为未来在大数据领域的探索和发展打下坚实基础。
【Hadoop大数据技术原理与应用】是现代大数据处理的核心框架之一,它由Apache软件基金会开发,主要用于处理和存储海量数据。Hadoop的出现解决了传统单机系统无法应对的大量非结构化和半结构化数据的问题,它以分布式...
1.大数据背景介绍 2. HADOOP体系架构 3. 基于HADOOP的大数据产品分析 4. 基于HADOOP的大数据行业应用分析 5.东软基于HADOOP的大数据应用建议
这个资料包显然包含了关于Hadoop工作原理的图片和一个深入理解Hadoop集群和网络的文档,让我们来详细探讨一下Hadoop的核心知识点。 1. **Hadoop的起源与理念**:Hadoop最初由Doug Cutting开发,灵感来源于Google的...
【标题】:“2022毕业设计,基于 Hadoop 的游戏数据分析系统源码” 这个毕业设计项目主要聚焦于使用Hadoop框架开发一个游戏数据分析系统。Hadoop是Apache软件基金会的一个开源分布式计算平台,专为处理和存储大规模...
【基于Hadoop的电影影评数据分析】是一项大数据课程的大作业,旨在利用Hadoop的分布式处理能力来分析电影影评数据。Hadoop是一个由Apache软件基金会开发的开源框架,专为处理和存储大规模数据而设计。它由四个核心...
Hadoop运行原理分析主要涉及MapReduce编程模式、HDFS的架构以及Hadoop分布式计算的基本流程。以下是对该文件内容的详细解析。 1. Hadoop概述 Hadoop是一个能够处理海量数据的分布式计算框架,它基于Google开发的...
毕业设计,基于 Hadoop 的游戏数据分析系统毕业设计,基于 Hadoop 的游戏数据分析系统毕业设计,基于 Hadoop 的游戏数据分析系统毕业设计,基于 Hadoop 的游戏数据分析系统毕业设计,基于 Hadoop 的游戏数据分析系统...
使用hadoop进行数据分析天气数据分析.zip使用hadoop进行数据分析天气数据分析.zip使用hadoop进行数据分析天气数据分析.zip使用hadoop进行数据分析天气数据分析.zip使用hadoop进行数据分析天气数据分析.zip使用hadoop...
这是一个Eclipse中复制出来的MapReduce工程文件,如果你下载了源代码,需要部署在Linux环境下的Eclipse中,并且,这个Eclipse必须已经安装了hadoop开发插件,能够做Hadoop开发。不然,会提示找不到hadoop开发包。
基于Hadoop的成绩分析系统 本文档介绍了基于Hadoop的成绩分析系统的设计和实现。Hadoop是一个分布式开源计算平台,具有高可靠性、高扩展性、高效性和高容错性等特点。该系统使用Hadoop的分布式文件系统HDFS和...
Hadoop原理及部署,非常全面的讲解 大数据的理论和价值逐渐得到了社会各界的认可,各种各样的大数据应用系统应运而生,正在创造性地解决着不同使用场景下的问题。在大数据应用越来越多样化的同时,对提供支撑的基础...