为什么80%的码农都做不了架构师?>>>   

Mapper的输出,在发送到Reducer前是存放在本地文件系统的,IFile提供了对Mapper输出的管理。我们已经知道,Mapper的输出是<Key,Value>对,IFile以记录<key-len, value-len, key,value>的形式存放了这些数据。为了保存键值对的边界,很自然IFile需要保存key-len和value-len。
和IFile相关的类图如下:

其中,文件流形式的输入和输出是由IFIleInputStream和IFIleOutputStream抽象。以记录形式的读/写操作由IFile.Reader/IFile.Writer提供,IFile.InMemoryReader用于读取存在于内存中的IFile文件格式数据。
我们以输出为例,来分析这部分的实现。首先是下图的和序列化反序列化相关的Serialization/Deserializer,这部分的code是在包org.apache.hadoop.io.serializer。序列化由Serializer抽象,通过Serializer的实现,用户可以利用serialize方法把对象序列化到通过open方法打开的输出流里。Deserializer提供的是相反的过程,对应的方法是deserialize。hadoop.io.serializer中还实现了配合工作的Serialization和对应的工厂SerializationFactory。两个具体的实现是WritableSerialization和JavaSerialization,分别对应了Writeble的序列化反序列化和Java本身带的序列化反序列化。

有了Serializer/Deserializer,我们来分析IFile.Writer。Writer的构造函数是:

public Writer(Configuration conf,FSDataOutputStream out,

Class<K> keyClass, Class<V>valueClass,

CompressionCodec codec, Counters.CounterwritesCounter)

conf,配置参数,out是Writer的输出,keyClass 和valueClass是输出的Kay,Value的class属性,codec是对输出进行压缩的方法,参数writesCounter用于对输出字节数进行统计的Counters.Counter。通过这些参数,我们可以构造我们使用的支持压缩功能的输出流(类成员out,类成员rawOut保存了构造函数传入的out),相关的计数器,还有就是Kay,Value的Serializer方法。
Writer最主要的方法是append方法(居然不是write方法,呵呵),有两种形式:

public void append(K key, V value) throws IOException {

public void append(DataInputBuffer key,DataInputBuffer value)

append(K key, V value)的主要过程是检查参数,然后将key和value序列化到DataOutputBuffer中,并获取序列化后的长度,最后把长度(2个)和DataOutputBuffer中的结果写到输出,并复位DataOutputBuffer和计数。append(DataInputBufferkey, DataInputBuffer value)处理过程也比较类似,就不再分析了。
close方法中需要注意的是,我们需要标记文件尾,或者是流结束。目前是通过写2个值为EOF_MARKER的长度来做标记。

IFileOutputStream是用于配合Writer的输出流,它会在IFiles的最后添加校验数据。当Writer调用IFileOutputStream的write操作时,IFileOutputStream计算并保持校验和,流被close的时候,校验结果会写到对应文件的文件尾。实际上存放在磁盘上的文件是一系列的<key-len, value-len, key, value>记录和校验结果。

更多精彩内容请关注:http://bbs.superwu.cn

关注超人学院微信二维码:

转载于:https://my.oschina.net/crxy/blog/420693

Hadoop源代码分析(IFile)相关推荐

  1. Hadoop源代码分析

    http://wenku.baidu.com/link?url=R-QoZXhc918qoO0BX6eXI9_uPU75whF62vFFUBIR-7c5XAYUVxDRX5Rs6QZR9hrBnUdM ...

  2. Hadoop源代码分析 - MapReduce(转载)

    1. Hadoop源代码分析(MapReduce概论) http://caibinbupt.javaeye.com/blog/336467

  3. Hadoop源代码分析(完整图文版) part 1

    在网上看到了很多此文章的装载,但是都是纯文字,这篇文章在没有图片的情况下阅读起来意义不大了.花了点时间上传了100多张图片,希望对大家学习hadoop有帮助. Hadoop源代码分析(一) 关键字:  ...

  4. Hadoop源代码分析(完整版)

    Hadoop源代码分析(一) 关键字: 分布式云计算 Google的核心竞争技术是它的计算平台.Google的大牛们用了下面5篇文章,介绍了它们的计算设施.  GoogleCluster:http:/ ...

  5. Hadoop源代码分析(包mapreduce.lib.input)

    接下来我们按照MapReduce过程中数据流动的顺序,来分解org.apache.hadoop.mapreduce.lib.*的相关内容,并介绍对应的基类的功能.首先是input部分,它实现了MapR ...

  6. Hadoop源代码分析(四)

    为org.apache.hadoop.io.compress等的分析预留位置 转载于:https://www.cnblogs.com/94julia/archive/2013/04/01/299281 ...

  7. Hadoop源代码分析(MapReduce概论)

    大家都熟悉文件系统,在对HDFS进行分析前,我们并没有花很多的时间去介绍HDFS的背景,毕竟大家对文件系统的还是有一定的理解的,而且也有很好的文档.在分析Hadoop的MapReduce部分前,我们还 ...

  8. Hadoop源代码分析之Configuration

    最近也觉得应该仔细的看一下Hadoop的源代码了,以前只是懂得基本的架构了使用,最近在做一个系统,觉得很多东西可以借鉴MapReduce的可扩展性.但是当我们的系统的0.1版本出现的时候才发现我们的配 ...

  9. Hadoop源代码分析(二)

    下面给出了Hadoop的包的功能分析. Package Dependences tool 提供一些命令行工具,如DistCp,archive mapreduce Hadoop的Map/Reduce实现 ...

最新文章

  1. Android 活动与活动间数据传递
  2. unity打包模型存在的一个问题
  3. CentOS6.5 keepalived详解及实现Nginx服务的高可用性
  4. Winform中设置ZedGraph鼠标滚轮缩放的灵敏度以及设置滚轮缩放的方式(鼠标焦点为中心还是图形中心点)
  5. 看看用 live write 发布日志的效果
  6. Spring-data-redis集成提交数据出现'maxActive'和‘maxWaitMillis’错误
  7. lede更改软件源_Linux的上传和下载——Ubuntu中软件的安装和ftp服务器的搭建
  8. 两年Java工作经验应该会些什么技术
  9. 使用ML.Net和C#进行机器学习
  10. 百度启动史上规模最大校园招聘;荣耀Magic3系列售价4599元起;阿里成立反职场陋习小组,无条件支持员工拒绝劝酒|极客头条...
  11. 食品安全事件曝光严重,SPC软件的应用刻不容缓
  12. VastBase技术实践
  13. 应届毕业生找工作很迷茫?4招教你快速破局,应届生必看!
  14. 腾创秒会达视频会议系统软件 安卓
  15. 解决微信支付、微信一键登陆在安卓10以上无法调起问题
  16. 云原生:打造「阿拉丁神灯式」应用厨房
  17. 《Unity 3D脚本编程:使用C#语言开发跨平台游戏》序言
  18. 街篮服务器维护比赛没打完,一球成名!热血街篮追梦杯圆满落幕,WaRn丶警告战队一穿五夺冠...
  19. 用Python机器人监听微信群聊 !
  20. 典型webservice(c#)例程序-提取数据库数据

热门文章

  1. 大数据信息资料采集:58同城赶集网百姓网分类网站教育培训采集
  2. linux cmds - ldconfig
  3. 护眼灯对眼睛真的有作用吗?一文了解市面上的护眼灯是否真的管用
  4. java比poi好用的工具五金零配件_好用不一定很贵---平价实用工具介绍
  5. schwarz( 施瓦兹)不等式证明
  6. 树莓派2使用酷芯微C201-D图传模块的使用总结
  7. 一號倉:《漫》--《Documentation》
  8. wms系统与物联网发展趋势密切相关
  9. 高一计算机课学了哪些知识,高一信息技术课教学计划
  10. INSAR和SAR辨析