Hadoop源码分析(mapreduce.lib.partition/reduce/output)
2016-04-08 09:24
302 查看
Map的结果,会通过partition分发到Reducer上。Reducer做完Reduce操作后,通过OutputFormat,进行输出。以下我们就来分析參与这个过程的类。 Mapper的结果,可能送到可能的Combiner做合并,Combiner在系统中并没有自己的基类,而是用Reducer作为Combiner的基类。他们对外的功能是一样的。仅仅是使用的位置和使用时的上下文不太一样而已。 Mapper终于处理的结果对<key, value>,是须要送到Reducer去合并的,合并的时候。有同样key的键/值对会送到同一个Reducer那,哪个key到哪个Reducer的分配过程。是由Partitioner规定的,它仅仅有一个方法,输入是Map的结果对<key, value>和Reducer的数目,输出则是分配的Reducer(整数编号)。 系统缺省的Partitioner是HashPartitioner。它以key的Hash值对Reducer的数目取模,得到相应的Reducer。 Reducer是全部用户定制Reducer类的基类。和Mapper类似,它也有setup,reduce,cleanup和run方法,当中setup和cleanup含义和Mapper同样,reduce是真正合并Mapper结果的地方,它的输入是key和这个key相应的全部value的一个迭代器。同一时候还包含Reducer的上下文。 系统中定义了两个很easy的Reducer。IntSumReducer和LongSumReducer,分别用于对整形/长整型的value求和。 Reduce的结果,通过Reducer.Context的方法collect输出到文件里,和输入类似,Hadoop引入了OutputFormat。OutputFormat依赖两个辅助接口:RecordWriter和OutputCommitter,来处理输出。 RecordWriter提供了write方法。用于输出<key, value>和close方法。用于关闭相应的输出。OutputCommitter提供了一系列方法。用户通过实现这些方法,能够定制OutputFormat生存期某些阶段须要的特殊操作。我们在TaskInputOutputContext中讨论过这些方法(明显。TaskInputOutputContext是OutputFormat和Reducer间的桥梁)。 OutputFormat和RecordWriter分别相应着InputFormat和RecordReader。系统提供了空输出NullOutputFormat(什么结果都不输出,NullOutputFormat.RecordWriter仅仅是演示样例,系统中未定义),LazyOutputFormat(没在类图中出现,不分析),FilterOutputFormat(不分析)和基于文件FileOutputFormat的SequenceFileOutputFormat和TextOutputFormat输出。 基于文件的输出FileOutputFormat利用了一些配置项配合工作,包含mapred.output.compress:是否压缩;mapred.output.compression.codec:压缩方法;mapred.output.dir:输出路径;mapred.work.output.dir:输出工作路径。 FileOutputFormat还依赖于FileOutputCommitter。通过FileOutputCommitter提供一些和Job,Task相关的暂时文件管理功能。如FileOutputCommitter的setupJob。会在输出路径下创建一个名为_temporary的暂时文件夹,cleanupJob则会删除这个文件夹。 SequenceFileOutputFormat输出和TextOutputFormat输出分别相应输入的SequenceFileInputFormat和TextInputFormat,我们就不再具体分析啦。 很多其它精彩内容请关注:http://bbs.superwu.cn 关注超人学院微信二维码: 关注超人学院java免费学习交流群: |
相关文章推荐
- Linux ar --创建静态库.a文件
- Linux apropos --根据关键字搜索命令
- Linux ant --强大的Java开发构建工具
- Linux系统编程之错误处理:perror,strerror和errno
- Linux at --在指定时间执行一次任务
- OpenCV3.0 中SVM的使用方法
- linux字符驱动之点亮LED
- linux字符驱动之中断按键
- 浅谈SOA面向服务化编程架构(dubbo)
- hadoop2.7.2基于centos完全分布式安装
- script/ shell脚本 callstack如何dump
- linux下bus、devices和platform的基础模型
- linux字符驱动之查询按键
- Linux学习--gdb调试
- Apache2.4.16+SVN1.7.9+svnmanager1.10 升级 (一)
- UVA_10048_Audiophobia
- linux下vi命令大全
- 反面教材:五步走让你的网站迟钝不堪
- 架构设计:系统间通信(23)——提高ActiveMQ工作性能(中)
- opencv轮廓检测之椭圆检测-----算法篇(11)--fitEllipse算法解释