设为首页 收藏本站
查看: 1033|回复: 0

[经验分享] Hadoop源代码分析(包org.apache.hadoop.mapreduce)

[复制链接]

尚未签到

发表于 2016-12-7 11:22:46 | 显示全部楼层 |阅读模式
  有了前一节的分析,我们来看一下具体的接口,它们都处于包org.apache.hadoop.mapreduce中。
  



    上面的图中,类可以分为4种。右上角的是从Writeable继承的,和Counter(还有CounterGroup和Counters,也在这个包中,并没有出现在上面的图里)和ID相关的类,它们保持MapReduce过程中需要的一些计数器和标识;中间大部分是和Context相关的*Context类,它为Mapper和Reducer提供了相关的上下文;关于Map和Reduce,对应的类是Mapper,Reducer和描述他们的Job(在Hadoop 中一次计算任务称之为一个job,下面的分析中,中文为“作业”,相应的task我们称为“任务”);图中其他类是配合Mapper和Reduce工作的一些辅助类。
  如果你熟悉HTTPServlet, 那就能很轻松地理解Hadoop采用的结构,把整个Hadoop看作是容器,那么Mapper和Reduce就是容器里的组件,*Context保存了组件的一些配置信息,同时也是和容器通信的机制。
  和ID相关的类我们就不再讨论了。我们先看JobContext,它位于*Context继承树的最上方,为Job提供一些只读的信息,如Job的ID,名称等。下面的信息是MapReduce过程中一些较关键的定制信息:
  (来自http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop2/index.html):
  
参数

作用

缺省值

其它实现

InputFormat

将输入的数据集切割成小数据集 InputSplits, 每一个 InputSplit 将由一个 Mapper 负责处理。此外 InputFormat 中还提供一个 RecordReader 的实现, 将一个 InputSplit 解析成 <key,value> 对提供给 map 函数。

TextInputFormat
(
针对文本文件,按行将文本文件切割成 InputSplits, 并用 LineRecordReader InputSplit 解析成 <key,value> 对,key 是行在文件中的位置,value 是文件中的一行)

SequenceFileInputFormat

OutputFormat

提供一个 RecordWriter 的实现,负责输出最终结果

TextOutputFormat
(
LineRecordWriter 将最终结果写成纯文件文件,每个 <key,value> 对一行,key value 之间用 tab 分隔)

SequenceFileOutputFormat

OutputKeyClass

输出的最终结果中 key 的类型

LongWritable


OutputValueClass

输出的最终结果中 value 的类型

Text


MapperClass

Mapper 类,实现 map 函数,完成输入的 <key,value> 到中间结果的映射

IdentityMapper
(
将输入的 <key,value> 原封不动的输出为中间结果)

LongSumReducer,
LogRegexMapper,
InverseMapper

CombinerClass

实现 combine 函数,将中间结果中的重复 key 做合并

null
(
不对中间结果中的重复 key 做合并)


ReducerClass

Reducer 类,实现 reduce 函数,对中间结果做合并,形成最终结果

IdentityReducer
(
将中间结果直接输出为最终结果)

AccumulatingReducer, LongSumReducer

InputPath

设定 job 的输入目录, job 运行时会处理输入目录下的所有文件

null


OutputPath

设定 job 的输出目录,job 的最终结果会写入输出目录下

null


MapOutputKeyClass

设定 map 函数输出的中间结果中 key 的类型

如果用户没有设定的话,使用 OutputKeyClass


MapOutputValueClass

设定 map 函数输出的中间结果中 value 的类型

如果用户没有设定的话,使用 OutputValuesClass


OutputKeyComparator

对结果中的 key 进行排序时的使用的比较器

WritableComparable


PartitionerClass

对中间结果的 key 排序后,用此 Partition 函数将其划分为R,每份由一个 Reducer 负责处理。

HashPartitioner
(
使用 Hash 函数做 partition)

KeyFieldBasedPartitioner PipesPartitioner


  Job继承自JobContext,提供了一系列的set方法,用于设置Job的一些属性(Job更新属性,JobContext读属性),同时,Job还提供了一些对Job进行控制的方法,如下:
l           mapProgress:map的进度(0—1.0);
l           reduceProgress:reduce的进度(0—1.0);
l           isComplete:作业是否已经完成;
l           isSuccessful:作业是否成功;
l           killJob:结束一个在运行中的作业;
l           getTaskCompletionEvents:得到任务完成的应答(成功/失败);
l           killTask:结束某一个任务;

margin-left: 40.5pt; text-indent: -21pt; mso-list: l0 level1 lfo1; tab-sto

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-310976-1-1.html 上篇帖子: 初次使用hadoop时遇到的问题. 下篇帖子: 《Hadoop实战》的笔记-2、Hadoop输入与输出
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表