原地址:https://www.aboutyun.com/thread-8302-1-1.html 问题导读: 1.Tool是接口还是类? 2.Tool继承了那个类? 3.Tool与ToolRunner的关系是什么? 4. Tool与ToolRunner作用分别是什么? hadoop分为新旧api,由于hadoop目前最新版本2.4,本文是以hadoop2.4发布的api来进行分析的。 首先我们需要会查看源码,源码的查看,可以参考:如何通过eclipse查看、阅读hadoop2.4源码 我们首先查看接口Tool: (Tool.java)
继续自Configurable接口
Configurable接口只定义了两个方法:setConf与 getConf。 Configured类实现了Configurable接口:
再看ToolRunner类的一部分: 下面两个是重载函数:
从上面两个ToolRunner的静态方法run()可以看到,处理hadoop的通用命令行参数,然后将args交给tool来处理,再由tool来运行自己的run方法。 这里在强调一下:以下面函数为准 /** Tool是一个接口,ToolRunner是一个类,ToolRunner类里面的run函数,如下 public static int run(Configuration conf, Tool tool, String[] args) throws Exception{ ............................. return tool.run(toolArgs); } 这个函数把二者给结合起来了,也就是说我们ToolRunner的run方法本质是调用的tool的run方法。而run方法,则是BookCount类继承了tool,然后重写了 @Override 这个run方法里,我们把job的各种设置由驱动主函数mian()移植到run方法中,然后驱动函数main()通过 ToolRunner.run(conf, new BookCount(), args);调用这个重写方法,代码可以参考下面 我们run重写run方法
驱动主函数: public class BookCount extends Configured implements Tool { |
hadoop2.4新api编程:Hadoop Tool,ToolRunner原理分析
最新推荐文章于 2023-06-14 08:21:54 发布