Hadoop源代码分析(包org.apache.hadoop.mapreduce)
来源:互联网 发布:app视频软件下载 编辑:程序博客网 时间:2024/05/17 07:17
有了前一节的分析,我们来看一下具体的接口,它们都处于包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:结束某一个任务;
- Hadoop源代码分析(包org.apache.hadoop.mapreduce)
- org.apache.hadoop.mapreduce包分析
- org.apache.hadoop.mapreduce.lib.input包分析
- Hadoop源代码分析(包hadoop.mapred中的MapReduce接口)
- Hadoop源代码分析(包mapreduce.lib.input)
- Hadoop源代码分析(包mapreduce.lib.map)
- Hadoop源代码分析(MapReduce概论)
- Hadoop源代码分析(MapReduce概论)
- Hadoop源代码分析(MapReduce概论)
- hadoop源码分析系列(二)——org.apache.hadoop.fs包 ----(上)
- hadoop源码分析系列(三)——org.apache.hadoop.fs包 ----(下)
- hadoop源码分析系列之(一)——org.apache.hadoop.conf包
- hadoop源码分析系列(四)——org.apache.hadoop.hdfs包之协议篇
- hadoop源码分析系列(五)——org.apache.hadoop.hdfs包之balancer篇
- hadoop源码分析系列(六)——org.apache.hadoop.hdfs包之nameNode篇
- hadoop源码分析系列之(一)——org.apache.hadoop.conf包
- org.apache.hadoop.hbase.mapreduce.RowCounter源码
- HBase源码分析之org.apache.hadoop.hbase.catalog包
- 调用windows播放器
- Servlet的应用--- ServletConfig和ServletContext
- 请求的重定向和请求分派
- ELF文件备忘
- 实战技巧:精进Vim的使用(一)
- Hadoop源代码分析(包org.apache.hadoop.mapreduce)
- linux下的动态链接库(DLL)
- s3c2440的SD/MMC的应用
- 学习笔记-- IPhone 中使用Sqlite 保存数据
- Hadoop源代码分析(包mapreduce.lib.input)
- ajax异步原理
- Hadoop源代码分析(包mapreduce.lib.map)
- as遍历对象的属性名(反射和直接遍历)
- Hadoop源代码分析(mapreduce.lib.partition/reduce/output)