立即注册
登录
About云-梭伦科技
返回首页
nettman的个人空间
https://aboutyun.com/?21
[收藏]
[复制]
[分享]
[RSS]
空间首页
动态
记录
日志
相册
主题
分享
留言板
个人资料
导读
淘贴
博客
群组
社区VIP
APP下载
今日排行
本周排行
本周热帖
本月排行
本月热帖
会员排行
首页
Portal
专题
BBS
面试
办公|编程助手
更多
我的空间
好友
帖子
收藏
道具
勋章
任务
动态
日志
相册
分享
记录
留言板
群组
导读
日志
hadoop2.4新api编程:Hadoop Tool,ToolRunner原理分析
热度
1
已有 947 次阅读
2014-7-2 12:05
问题导读:
1.Tool是接口还是类?
2.Tool继承了那个类?
3.Tool与ToolRunner的关系是什么?
4.
Tool与ToolRunner
作用分别是什么?
首先我们需要会查看源码,源码的查看,可以参考:
如何通过eclipse查看、阅读hadoop2.4源码
我们首先查看接口Tool:
(Tool.java)
@InterfaceAudience.Public
@InterfaceStability.Stable
public interface Tool extends Configurable {
/**
* Execute the command with the given arguments.
*
* @param args command specific arguments.
* @return exit code.
* @throws Exception
*/
int run(String [] args) throws Exception;
}
Tool接口继承了Configurable接口,只有一个run()方法。(接口继承接口)
继续自Configurable接口
public interface Configurable {
/** Set the configuration to be used by this object. */
void setConf(Configuration conf);
/** Return the configuration used by this object. */
Configuration getConf();
}
Configurable接口只定义了两个方法:setConf与 getConf。
Configured类实现了Configurable接口:
@InterfaceAudience.Public
@InterfaceStability.Stable
public class Configured implements Configurable {
private Configuration conf;
/** Construct a Configured. */
public Configured() {
this(null);
}
/** Construct a Configured. */
public Configured(Configuration conf) {
setConf(conf);
}
// inherit javadoc
@Override
public void setConf(Configuration conf) {
this.conf = conf;
}
// inherit javadoc
@Override
public Configuration getConf() {
return conf;
}
}
继承关系如下:
再看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);
}
/**
* Runs the <code>Tool</code> with its <code>Configuration</code>.
*
* Equivalent to <code>run(tool.getConf(), tool, args)</code>.
*
* @param tool <code>Tool</code> to run.
* @param args command-line arguments to the tool.
* @return exit code of the {@link Tool#run(String[])} method.
*/
public static int run(Tool tool, String[] args)
throws Exception{
return run(tool.getConf(), tool, args);
}
从上面两个ToolRunner的静态方法run()可以看到,处理hadoop的通用命令行参数,然后将args交给tool来处理,再由tool来运行自己的run方法。
这里在强调一下:以下面函数为准
/**
* Runs the given <code>Tool</code> by {@link Tool#run(String[])}, after
* parsing with the given generic arguments. Uses the given
* <code>Configuration</code>, or builds one if null.
*
* Sets the <code>Tool</code>'s configuration with the possibly modified
* version of the <code>conf</code>.
*
* @param conf <code>Configuration</code> for the <code>Tool</code>.
* @param tool <code>Tool</code> to run.
* @param args command-line arguments to the tool.
* @return exit code of the {@link Tool#run(String[])} method.
*/
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);
}
Tool是一个接口,ToolRunner是一个类,在run()方法中,是作为参数传递的
public static int run(Configuration conf, Tool tool, String[] args)
由于tool继续了Configurable,所以可以完成下面的事情:
tool.setConf(conf);
return tool.run(toolArgs);
这样Tool接口与ToolRunner类,他们之间的关系更明确了。
路过
雷人
握手
鲜花
鸡蛋
收藏
分享
邀请
举报
全部
作者的其他最新日志
•
Hive drop卡住不动,该如何解决
•
Flink 读取hbase 慢该如何解决
•
CDH修改startdate,可以一直免费使用
•
k8s搭建大数据平台资源汇总
•
大数据学习记录
•
Impala、Hive如何存储图片
发表评论
评论 (
1
个评论)
回复
x5136160
2014-7-10 18:12
了解了解。。。。看看看。。学习学习。
涂鸦板
您需要登录后才可以评论
登录
|
立即注册
评论
nettman
加为好友
给我留言
打个招呼
发送消息
关闭
推荐
/2
中文版ChatGPT
1.无需魔法 2.提高编程效率 3.提高文档能力
查看 »
新手帮助
新手帮助:注册遇到问题,领取资源,加入铁粉群,不会使用搜索,如何获取积分等
查看 »
意见
反馈