MapReduce新版客户端API源码分析
使用MapReduce新版客户端API提交MapReduce Job需要使用 org.apache.hadoop.mapreduce.Job 类。JavaDoc给出以下使用范例。
// Create a new Job
Job 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 complete
job.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正是以这种方式被客户端程序访问的。
MapReduce新版客户端API源码分析的更多相关文章
- MapReduce之提交job源码分析 FileInputFormat源码解析
MapReduce之提交job源码分析 job 提交流程源码详解 //runner 类中提交job waitForCompletion() submit(); // 1 建立连接 connect(); ...
- 【Netty之旅四】你一定看得懂的Netty客户端启动源码分析!
前言 前面小飞已经讲解了NIO和Netty服务端启动,这一讲是Client的启动过程. 源码系列的文章依旧还是遵循大白话+画图的风格来讲解,本文Netty源码及以后的文章版本都基于:4.1.22.Fi ...
- requests库核心API源码分析
requests库是python爬虫使用频率最高的库,在网络请求中发挥着重要的作用,这边文章浅析requests的API源码. 该库文件结构如图: 提供的核心接口在__init__文件中,如下: fr ...
- 3、MapReduce详解与源码分析
文章目录 1 Split阶段 2 Map阶段 2.1分区 2.2排序 3 Shuffle阶段 4 Reduce阶段 1 Split阶段 首先,接到hdf文件输入,在mapreduce中的ma ...
- hadoop的RPC机制 -源码分析
这些天一直奔波于长沙和武汉之间,忙着腾讯的笔试.面试,以至于对hadoop RPC(Remote Procedure Call Protocol ,远程过程调用协议,它是一种通过网络从远程计算机程序上 ...
- Hadoop的RPC机制源码分析
分析对象: hadoop版本:hadoop 0.20.203.0 必备技术点: 1. 动态代理(参考 :http://www.cnblogs.com/sh425/p/6893662.html )2. ...
- Kafka服务端之网络连接源码分析
#### 简介 上次我们通过分析KafkaProducer的源码了解了生产端的主要流程,今天学习下服务端的网络层主要做了什么,先看下 KafkaServer的整体架构图 :用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 原型模式结构图 通俗来说:原型模式就是深拷贝和浅拷贝的实现. 浅拷贝 只实现了值拷贝,对于引用对象还是 ...
- cpio.gz 解压
linux下cpio.gz文件的解压方法:今天下载了 10201_database_linux_x86_64.cpio.gz 文件,解压方法如下:1. gunzip 10201_database_li ...
- 配置Samba服务
1. samba服务用在什么地方?samba服务用于把Linux服务器上的文件或者打印接共享给windows或者Linux.2. 在samba服务的配置文件中,[global]配置部分的securit ...
- virtual-虚方法
看来本人理论果然不行啊,这个东西折腾死我了.即便是到现在,还是云里雾里.... 个人认为virtual的特点就是可以被override而不是必需的,到目前为止我用它的地方也比较少. public cl ...
- 从Ueditor跨域上传,总结的一次跨域上传的爬坑经历
项目内其中一个管理后台需要发布文章,需要一个富文本编辑器,经过一番选择后,最终选择了百度的Ueditor. 由于上传的文件是上传到另一台专门存放图片等静态资源的服务器上面的,所以就涉及到了跨域上传. ...
- EasyUI中使用Uploadity问题
<div id="UploadPage" class="easyui-layout" fit="true"> <div r ...
- iOS_SN_UITableView的优化
1.提前计算并缓存好高度(布局),因为heightForRowAtIndexPath:是调用最频繁的方法. 2.异步绘制,遇到复杂界面,遇到性能瓶颈时,可能就是突破口. 3.滑动时按需加载,这个在大量 ...
- C#类中字段,属性与方法
person类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...
- J2EE学习记录,EJB,JNDI,RMI
Java EE 是java平台企业版(Java Platform Enterprise Edition)缩写,是Sum公司为企业级应用推出的标准平台. 随着Java技术的发展,J2EE平台得到了迅速的 ...