Hadoop源代码分析(包mapreduce.lib.input)
接下来我们按照MapReduce过程中数据流动的顺序,来分解org.apache.hadoop.mapreduce.lib.*的相关内容,并介绍对应的基类的功能。首先是input部分,它实现了MapReduce的数据输入部分。类图如下:
类图的右上角是InputFormat,它描述了一个MapReduceJob的输入,通过InputFormat,Hadoop可以: l 检查MapReduce输入数据的正确性; l 将输入数据切分为逻辑块InputSplit,这些块会分配给Mapper; l 提供一个RecordReader实现,Mapper用该实现从InputSplit中读取输入的<K,V>对。 在org.apache.hadoop.mapreduce.lib.input中,Hadoop为所有基于文件的InputFormat提供了一个虚基类FileInputFormat。下面几个参数可以用于配置FileInputFormat: l mapred.input.pathFilter.class:输入文件过滤器,通过过滤器的文件才会加入InputFormat; l mapred.min.split.size:最小的划分大小; l mapred.max.split.size:最大的划分大小; l mapred.input.dir:输入路径,用逗号做分割。 类中比较重要的方法有: protectedList<FileStatus> listStatus(Configuration job) 递归获取输入数据目录中的所有文件(包括文件信息),输入的job是系统运行的配置Configuration,包含了上面我们提到的参数。 publicList<InputSplit> getSplits(JobContext context) 将输入划分为InputSplit,包含两个循环,第一个循环处理所有的文件,对于每一个文件,根据输入的划分最大/最小值,循环得到文件上的划分。注意,划分不会跨越文件。 l initialize:初始化,输入参数包括该Reader工作的数据划分InputSplit和Job的上下文context; l nextKey:得到输入的下一个Key,如果数据划分已经没有新的记录,返回空; l nextValue:得到Key对应的Value,必须在调用nextKey后调用; l getProgress:得到现在的进度; l close,来自java.io的Closeable接口,用于清理RecordReader。 我们以LineRecordReader为例,来分析RecordReader的构成。前面我们已经分析过FileInputFormat对文件的划分了,划分完的Split包括了文件名,起始偏移量,划分的长度。由于文件是文本文件,LineRecordReader的初始化方法initialize会创建一个基于行的读取对象LineReader(定义在org.apache.hadoop.util中,我们就不分析啦),然后跳过输入的最开始的部分(只在Split的起始偏移量不为0的情况下进行,这时最开始的部分可能是上一个Split的最后一行的一部分)。nextKey的处理很简单,它使用当前的偏移量作为Key,nextValue当然就是偏移量开始的那一行了(如果行很长,可能出现截断)。进度getProgress和close都很简单。 |
更多精彩内容请关注:http://bbs.superwu.cn
关注超人学院微信二维码:
转载于:https://blog.51cto.com/crxy2013/1653779
Hadoop源代码分析(包mapreduce.lib.input)相关推荐
- Hadoop源代码分析(MapReduce概论)
大家都熟悉文件系统,在对HDFS进行分析前,我们并没有花很多的时间去介绍HDFS的背景,毕竟大家对文件系统的还是有一定的理解的,而且也有很好的文档.在分析Hadoop的MapReduce部分前,我们还 ...
- Hadoop源代码分析
http://wenku.baidu.com/link?url=R-QoZXhc918qoO0BX6eXI9_uPU75whF62vFFUBIR-7c5XAYUVxDRX5Rs6QZR9hrBnUdM ...
- Hadoop源代码分析 - MapReduce(转载)
1. Hadoop源代码分析(MapReduce概论) http://caibinbupt.javaeye.com/blog/336467
- Hadoop源代码分析(完整图文版) part 1
在网上看到了很多此文章的装载,但是都是纯文字,这篇文章在没有图片的情况下阅读起来意义不大了.花了点时间上传了100多张图片,希望对大家学习hadoop有帮助. Hadoop源代码分析(一) 关键字: ...
- Hadoop源代码分析(完整版)
Hadoop源代码分析(一) 关键字: 分布式云计算 Google的核心竞争技术是它的计算平台.Google的大牛们用了下面5篇文章,介绍了它们的计算设施. GoogleCluster:http:/ ...
- Hadoop源代码分析(二)
下面给出了Hadoop的包的功能分析. Package Dependences tool 提供一些命令行工具,如DistCp,archive mapreduce Hadoop的Map/Reduce实现 ...
- Hadoop源代码分析之Configuration
最近也觉得应该仔细的看一下Hadoop的源代码了,以前只是懂得基本的架构了使用,最近在做一个系统,觉得很多东西可以借鉴MapReduce的可扩展性.但是当我们的系统的0.1版本出现的时候才发现我们的配 ...
- Hadoop源代码分析(IFile)
为什么80%的码农都做不了架构师?>>> Mapper的输出,在发送到Reducer前是存放在本地文件系统的,IFile提供了对Mapper输出的管理.我们已经知道,Mappe ...
- Hadoop源代码分析(四)
为org.apache.hadoop.io.compress等的分析预留位置 转载于:https://www.cnblogs.com/94julia/archive/2013/04/01/299281 ...
最新文章
- android+布局分块,android的List View的Item布局问题
- [置顶] Android输入输出机制之来龙去脉之前生后世
- micro-job 0.0.2 发布,分布式任务调度框架
- python实现连续数列相加_技术 | Python经典面试题解析实现斐波那契数列
- P3768-简单的数学题【莫比乌斯反演,杜教筛】
- oracle中sp怎么写_校招简历中的实习和项目经历该怎么写?
- JAVA实现把指定文件夹下的所有文件压缩成zip包
- Python数模笔记-模拟退火算法(3)整数规划问题
- 【Linux】查看文件内容的相关命令总结
- MFC基于多文档框架(对话框内嵌office控件(word文档))
- PostgreSQL的 create index concurrently
- java前台计算date差_js前台计算两个日期的间隔时间
- 数据库设计中一个矛盾:数据库外键,用还是不用?你怎么看.?
- IT项目管理之无休止会议
- 开关灯(c语言数据结构习题)
- 基于simulink的16QAM仿真模型
- 局域网版teamview跨网远程访问的方法分享
- 魔兽争霸III背景渊源
- Python学习之路,简单的注册登录小屁程序
- 关于花瓣网header条的思考
热门文章
- 如何实现软件的国际化
- EXCEL公式、函数、图表应用技巧800问
- 力扣算法题—073矩阵置零
- java B2B2C springmvc mybatis电子商务平台源码-Consul服务发现原理...
- 2018.12.5 区块链论文翻译
- Conventions and patterns for multi-platform development
- Alluxio HA 写入文件失败
- 谈谈Linux内核驱动的coding style
- Hadoop_27_MapReduce_运营商原始日志增强(自定义OutputFormat)
- Spring Security源码分析十三:Spring Security 基于表达式的权限控制