- 1、本文档共4页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MapReduce工作流程 - 学习笔记
(1) MapReduce 工作流程
2013-09-18
一.Map - Reduce
MapReduce 其实是分治算法的一种实现,所谓分治算法就是“就是分而治之”,
将大的问题分解为相同类型的子问题(最好具有相同的规模),对子问题进行求解,
然后合并成大问题的解。MapReduce 就是分治法的一种,将输入进行分片,然后交
给不同的task 进行处理,然后合并成最终的解。具体流程图如下:
MapReduce 实际的处理过程可以理解为Input-Map-Sort-Combine-Partition-Red
uce-Output 。
(1) Input 阶段
数据以一定的格式传递给 Mapper ,有 TextInputFormat ,DBInputFormat ,
SequenceFileFormat 等可以使用,在Job.setInputFormat 可以设置,也可以自定义分
分片函数。
(2 ) Map 阶段
对输入的key,value进行处理,即map(k1,v1) - list(k2,v2),使用Job.setMapperClass
进行设置。
(3 ) Sort 阶段
对于Mapper 的输出进行排序,使用Job.setOutputKeyComparatorClass 进行设置,然
后定义排序规则。
(4 ) Combine 阶段
这个阶段对于Sort 之后有相同key 的结果进行合并,使用Job.setCombinerClass 进行
设置,也可以自定义Combine Class 类。
(5 ) Partition 阶段
将Mapper 的中间结果按照Key 的范围划分为R 份(Reduce 作业的个数),默认使用
HashPatitioner (key.hashCode() Integer.MAX_VALUE) % numPartitions),也可以自定
义划分的函数。使用Job.setPartitionClass 进行设置。
(6 ) Reduce 阶段
对于Mapper 的结果进一步进行处理,Job.setReducerClass 进行设置自定义的Reduce
类。
(7 ) Output 阶段
Reducer 输出数据的格式。
二、一个Job 运行流程
一个MapReduce 作业的执行流程是:作业提交 - 作业初始化 – 任务分配 – 任
务执行 – 更新任务执行进度和状态 - 作业完成
一个完整的MapReduce 作业流程,包含4 个独立的实体:
客户端:Client,编写MapReduce 程序,配置作业,提交作业。
JobTracker :协调这个作业的运行,分配作业,初始化作业,与TaskTracker 进行
通信。
TaskTracker :负责运行作业,保持与JobTracker 进行通信。
HDFS:分布式文件系统,保持作业的数据和结果。
(1) 作业提交
JobClient 使用runJob 方法新建一个JobClient 实例,然后调用submitJob()方法进行作
业的提交,提交作业的具体过程如下:
通过调用JobTracker 对象的getNewJobId()方法从JobTracker 处获得一个作业ID。
检查作业的相关路径。如果输出路径存在,作业将不会被提交(保护上一个作
业运行结果)。
计算作业的输入分片,如果无法计算,例如输入路径不存在,作业将不被提交,
错误返回给MapReduce 程序。
将运行作业所需资源(作业 Jar 文件、配置文件和计算所得到的分片)复制到
HDFS 上。
告知JobTrac
文档评论(0)