加入收藏 | 设为首页 | 会员中心 | 我要投稿 | RSS
您当前的位置:首页 > 教程文章 > NOSQL数据库

Hadoop源代码分析(包org.apache.hadoop.mapreduce)

时间:2012-04-27 00:58:05  来源:  作者:

 

有了前一节的分析,我们来看一下具体的接口,它们都处于包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过程中一些较关键的定制信息:

参数
作用
缺省值
其它实现
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进行控制的方法,如下:
lmapProgress:map的进度(0—1.0);
lreduceProgress:reduce的进度(0—1.0);
lisComplete:作业是否已经完成;
lisSuccessful:作业是否成功;
lkillJob:结束一个在运行中的作业;
lgetTaskCompletionEvents:得到任务完成的应答(成功/失败);
lkillTask:结束某一个任务;
margin-left: 40.5pt; text-indent: -21pt; tab-sto
来顶一下
返回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
推荐资讯
在CentOS下搭建Android 开发环境
在CentOS下搭建Androi
轻松搭建属于自己的Ubuntu发行版
轻松搭建属于自己的Ub
利用SUSE Studio 打造自己的个性化Linux发行版
利用SUSE Studio 打造
那些采用PHP技术的IT大企业
那些采用PHP技术的IT大
相关文章
    无相关信息
栏目更新
栏目热门