博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MapReduce新版客户端API源码分析
阅读量:6701 次
发布时间:2019-06-25

本文共 1369 字,大约阅读时间需要 4 分钟。

使用MapReduce新版客户端API提交MapReduce Job需要使用 org.apache.hadoop.mapreduce.Job 类。JavaDoc给出以下使用范例。

 

// Create a new JobJob job = new Job(new Configuration());job.setJarByClass(MyJob.class);// Specify various job-specific parameters     job.setJobName("myjob");job.setInputPath(new Path("in"));job.setOutputPath(new Path("out"));job.setMapperClass(MyJob.MyMapper.class);job.setReducerClass(MyJob.MyReducer.class);// Submit the job, then poll for progress until the job is completejob.waitForCompletion(true);

 

从方法名可以看出,MapReduce Job是通过调用Job类的waitForCompletion方法提交到MapReduce框架运行的,而实际上这个方法又调用了Job类的submit方法。submit方法完成全部的提交工作。

submit方法创建一个JobSubmitter实例并通过该实例完成提交工作。创建JobSubmitter实例需要准备两个参数,一个是代表所用文件系统的FileSystem实例,另一个是封装了与MapReduce框架通信的具体协议的ClientProtocol实例。使用这两个实例,JobSubmitter在与集群通信时就不需要关心集群的具体细节,因而其代码可以写成具有一定的通用性。JobSubmitter具体的提交过程与编写客户端程序无关,这里不深入分析。不过,这里有必要分析FileSystem实例和ClientProtocol实例的创建过程。

FileSystem实例和ClientProtocol实例均取自Job的一个私有属性Cluster cluster,Cluster类接受一个封装了客户端程序提供的配置信息的Configuration对象被实例化,在Cluster实例化的过程中,Cluster的FileSystem属性和ClientProtocal属性得以确定,其中FileSystem属性由ClientProtocal属性确定。因此,这里的关键问题是:ClientProtocal属性怎么确定?Cluster使用线程上下文类加载器寻找所有实现了ClientProtocolProvider这个抽象类的类,对于找到的类依次实例化并传递客户端程序提供的配置信息作为参数调用其create方法,直到从返回值获得一个ClientProtocol实例的引用或者遍历结束。若获得引用,这个被赋值给ClientProtocal属性;否则输出出错信息并返回。

可见,客户端程序通过改变传入的配置信息能够改变使用的MapReduce目标。实际上,基于Yarn的MapReduce正是以这种方式被客户端程序访问的。

转载地址:http://efwlo.baihongyu.com/

你可能感兴趣的文章
JavaScript变量提升的理解
查看>>
CentOS安装和配置Apache(httpd)
查看>>
华为/H3C Syslog配置
查看>>
23.C++- 继承的多种方式、显示调用父类构造函数、父子之间的同名函数、virtual虚函数...
查看>>
如何查看Isilon的节点的CPU的信息?
查看>>
C# if为false仍然进入方法体,==和qeual结果不一致
查看>>
MongoDB简单使用 —— 驱动
查看>>
WPF——TargetNullValue(如何在绑定空值显示默认字符)
查看>>
给 iOS 开发者的 RxSwift(一)
查看>>
Excel2013 破解(编辑工作表受保护)密码
查看>>
Python基础-变量作用域
查看>>
php课程 6-21 HTML标签相关函数
查看>>
Spring Boot的Tomcat 启动详解
查看>>
Elasticsearch 2.3.3 JAVA api说明文档
查看>>
zTree怎么判断树有节点展开或者完全关闭的
查看>>
android中RecycleView分页原生代码封装,无任何第三方代
查看>>
Emgu-WPF 激光雷达研究-移动物体跟踪
查看>>
如何删除一个标签,但是保留里面的内容?
查看>>
[Angular] 'providedIn' for service
查看>>
PHP函数register_shutdown_function的使用示例
查看>>