继承关系:

  1. java.util

Interface Map.Entry<K,V>

description:

public static interface Map.Entry<K,V>

methods:

Modifier and Type Method and Description
boolean equals(Object o)

Compares the specified object with this entry for equality.
K getKey()

Returns the key corresponding to this entry.
V getValue()

Returns the value corresponding to this entry.
int hashCode()

Returns the hash code value for this map entry.
V setValue(V value)

Replaces the value corresponding to this entry with the specified value (optional operation).

2.java.lang.Object

|__ org.apache.hadoop.conf.Configuration

constructor: public class Configuration extends Objectimplements Iterable<Map.Entry<String,String>>, Writable 

3.org.apache.hadoop.util Class ToolRunner java.lang.Object   |__ org.apache.hadoop.util.ToolRunner

description:
public class ToolRunner

extends Object

  ToolRunner can be used to run classes implementing Tool interface. It works in conjunction with GenericOptionsParser to parse the generic hadoop command line arguments and modifies the Configuration of the Tool. The application-specific options are passed along without being modified.

methods:
static int run(Configuration conf, Tool tool, String[] args)
Runs the given Tool by Tool.run(String[]),
after parsing with the given generic arguments.
static int run(Tool tool, String[] args)

Runs the Tool with its
Configuration.
4.org.apache.hadoop.util 

Interface Tooldescription:
public interface Tool

extends Configurablemethods:
int run(String[] args)
Execute the command with the given arguments.
 5.org.apache.hadoop.conf 

Interface Configurable

constructor:

public interface Configurable

methods:
Configuration getConf()
Return the configuration used by this object.
void setConf(Configuration conf)

Set the configuration to be used by this object.
 6.
java.lang.Object
  |__ org.apache.hadoop.conf.Configureddescription:
public class Configured

extends Objectimplements Configurable
constructor:
Configured()
Construct a Configured.
Configured(Configuration conf)

Construct a Configured
 
methods:
Configuration getConf()
Return the configuration used by this object.
void setConf(Configuration conf)

Set the configuration to be used by this object.
Code1 (Configuration里添加的resource是String类型):
 import java.util.Map.Entry;

 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.conf.Configured;
 import org.apache.hadoop.util.ToolRunner;
 import org.apache.hadoop.util.Tool;
 import org.apache.hadoop.fs.Path;

 public class ConfigurationPrinter extends Configured implements Tool {
   static {
     Configuration.addDefaultResource("config.xml");
   }

   @Override
   public int run(String[] args) throws Exception {
     Configuration conf = getConf();
     for (Entry<String, String> hash: conf) {
       System.out.printf("%s=%s\n", hash.getKey(), hash.getValue());
     }
     return 0;
   }

   public static void main(String[] args) throws Exception {
     int exitCode = ToolRunner.run(new ConfigurationPrinter(), args);
     System.exit(exitCode);
   }
 }

注:Configuration class提供只一种静态方法:addDefaultresource(String name), 如上述代码, 添加Resource "config.xml"为String类型时,hadoop将从classpath里查找此文件;若Resource 为Path()类型时,hadoop将从local filesystem里查找此文件: Configuration conf = new Configuration(); conf.addResource(new Path("config.xml"));

code1的执行步骤:

#将自定义的config文件config.xml放在hadoop的$HADOOP_CONF_DIR里
mv config.xml $HADOOP_HOME/etc/hadoop/

#假如我们添加的resource如下:

 <!--cat $HADOOP_HOME/etc/hadoop/config.xml-->
 <configuration>
   <property>
     <name>color</name>
     <value>yellow</value>
   </property>

   <property>
     <name>size</name>
     <value>10</value>
   </property>

   <property>
     <name>weight</name>
     <value>heavy</value>
     <final>true</final>
   </property>
 </configuration>

执行代码:

mkdir class
source $HADOOP_HOME/libexec/hadoop-config.sh
javac  -d class ConfigurationPrinter.java
jar -cvf ConfigurationPrinter.jar -C class ./
export HADOOP_CLASSPATH=ConfigurationPrinter.jar:$CLASSPATH
#下面查找刚才添加的resource是否被读入
#我们在config.xml里添加了一项 <name>color</name>,执行
yarn ConfigurationPrinter|grep "color"
color=yellow
#可见代码是正确的

或者在commandline里指定HADOOP_CONF_DIR, 比如执行:

yarn ConfigurationPrinter --conf config.xml | grep color

color=yellow

也是可以的!

Code2 (Configuration里添加的resource是Path类型):

 import java.util.Map.Entry;

 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.conf.Configured;
 import org.apache.hadoop.util.ToolRunner;
 import org.apache.hadoop.util.Tool;
 import org.apache.hadoop.fs.Path;

 public class ConfigurationPrinter extends Configured implements Tool {
   @Override
   public int run(String[] args) throws Exception {
     Configuration conf = new Configuration();
     conf.addResource(new Path("config.xml"));
     for (Entry<String, String> hash: conf) {
       System.out.printf("%s=%s\n", hash.getKey(), hash.getValue());
     }
     return 0;
   }

   public static void main(String[] args) throws Exception {
     int exitCode = ToolRunner.run(new ConfigurationPrinter(), args);
     System.exit(exitCode);
   }
 }

此时添加的resource类型是Path()类型,故hadoop将从local filesystem里查找config.xml, 不需要将config.xml放在conf/下面,只要在代码中指定config.xml在本地文件系统中的路径即可(new Path("../others/config.xml"))

运行步骤:

mkdir class
source $HADOOP_HOME/libexec/hadoop-config.sh
javac  -d class ConfigurationPrinter.java
jar -cvf ConfigurationPrinter.jar -C class ./
export HADOOP_CLASSPATH=ConfigurationPrinter.jar:$CLASSPATH
#下面查找刚才添加的resource是否被读入
#我们在config.xml里添加了一项 <name>color</name>,执行
yarn ConfigurationPrinter|grep "color"
color=yellow
#可见代码是正确的

 

备注:ConfigurationParser支持set individual properties:

Generic Options
The supported generic options are:

-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.

可以尝试:

yarn ConfigurationPrinter -d fuck=Japan | grep fuck
#输出为:
fuck=Japan

再次提醒:

ToolRunner can be used to run classes implementing Tool interface. It works in conjunction with GenericOptionsParser to parse the generic hadoop command line arguments and modifies the Configuration of the Tool. The application-specific options are passed along without being modified.

ToolRunnerGenericOptionsParser共同来(解析|修改) generic hadoop command line arguments  (什么是generic hadoop command line arguments? 比如:yarn  command [genericOptions] [commandOptions]

hadoop2.2编程:Tool, ToolRunner, GenericOptionsParser, Configuration的更多相关文章

  1. hadoop2.2编程:从default mapreduce program 来理解mapreduce

    下面写一个default mapreduce 的程序: import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapr ...

  2. hadoop2.2编程:使用MapReduce编程实例(转)

    原文链接:http://www.cnblogs.com/xia520pi/archive/2012/06/04/2534533.html 从网上搜到的一篇hadoop的编程实例,对于初学者真是帮助太大 ...

  3. hadoop2.2编程:MRUnit测试

    引用地址:http://www.cnblogs.com/lucius/p/3442381.html examples: Overview This document explains how to w ...

  4. hadoop2.2编程:矩阵相乘简单实现

    /* matrix-matrix multiplication on Hadoop A x B = C constraint: A, B, C must be of the same size I u ...

  5. hadoop2.2编程:MRUnit

    examples: Overview This document explains how to write unit tests for your map reduce code, and test ...

  6. hadoop2.2编程:DFS API 操作

    1. Reading data from a hadoop URL 说明:想要让java从hadoop的dfs里读取数据,则java 必须能够识别hadoop hdfs URL schema, 因此我 ...

  7. LPCScrypt, DFUSec : USB FLASH download, programming, and security tool, LPC-Link 2 Configuration tool, Firmware Programming

    What does this tool do? The LPC18xx/43xx DFUSec utility is a Windows PC tool that provides support f ...

  8. hadoop2.2编程: SequenceFileWritDemo

    import java.io.IOException; import java.net.URI; import org.apache.hadoop.fs.FileSystem; import org. ...

  9. Hadoop2.2编程:新旧API的区别

    Hadoop最新版本的MapReduce Release 0.20.0的API包括了一个全新的Mapreduce JAVA API,有时候也称为上下文对象. 新的API类型上不兼容以前的API,所以, ...

随机推荐

  1. datatable转json

    //将datatable转化为json public string DataTableToJSON(DataTable dt) { JavaScriptSerializer jss = new Jav ...

  2. 九度OJ 1402 特殊的数 -- 位操作

    题目地址:http://ac.jobdu.com/problem.php?pid=1402 题目描述: 现在有n个数,其中有一些出现了一次,一些出现了两次,一些出现了很多次.现在要求你找出那些只出现一 ...

  3. 【nodemailer】 初试

    nodemailer 是什么? 简单的讲nodemailer就是用来发送邮件的.最近的一个项目需要向客户的注册邮箱发送验证连接,研究了一下. 刚开始我以为nodemailer还可以用来接收邮件,看了好 ...

  4. Java中的面向对象

    Java中的面向对象 在软件开发的学习中, 我最先接触的开发语言就是java,但都是简单的函数和循环数组的应用.说道面向对象,第一次看到这个词的时候还是在C#的学习过程中,我记得当时PPT上霸气的解释 ...

  5. <<深入Java虚拟机>>-第三章-垃圾收集器与内存分配策略-学习笔记

    垃圾收集 垃圾收集(Garbage Collection,GC),垃圾收集需要完成的三件事情. 哪些对象需要回收 什么时候回收 如何回收 如何确定对象已死(即不可能在被任何途径引用的对象) 引用计数算 ...

  6. Understanding Manycore Scalability of File Systems

    多核场景下,不同文件系统,文件操作的性能评估.

  7. SQL索引问题

    很多文章都提到使用IN,OR会破坏索引,造成全表扫描,但实际测试却不是这样. ) 或者 ,) 以上SQL文,第一组(=,IN),第二组(=,OR,IN),每一组的两个SQL文都使用相同的执行计划,执行 ...

  8. oracle日期格式数据修改

    select * from INVOICE_NEW where ref_no='32308' update INVOICE_NEW set check_d=to_date('2015/11/16', ...

  9. Universal-Image-Loader(UIL)使用方法&流程图&源码分析 ----- 未完

    GitHub源码: Android-Universal-Image-Loader Features Multithread image loading (async or sync) 多线程加载(同步 ...

  10. poj 2796 Feel Good 单调栈区间问题

    Feel Good 题意:给你一个非负整数数组,定义某个区间的参考值为:区间所有元素的和*区间最小元素.求该数组中的最大参考值以及对应的区间. 比如说有6个数3 1 6 4 5 2 最大参考值为6,4 ...