如何进行MapReduce中的JobSplit源码分析

这篇文章将为大家详细讲解有关如何进行MapReduce中的JobSplit源码分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

创新互联建站是一家专注于网站设计、成都网站制作与策划设计,沙河口网站建设哪家好?创新互联建站做网站,专注于网站建设10年,网设计领域的专业建站公司;建站业务涵盖:沙河口等地区。沙河口做网站价格咨询:028-86922220

MapReduce源码分析 - JobSplit

根据MapRudece的原理,我们从4个过程去分析MR的源码:

  • Split阶段;

  • MapTask阶段;

  • Shuffle阶段;

  • ReduceTask阶段;

下面首先介绍Split阶段的源码。

如何进行MapReduce中的JobSplit源码分析

Split源码分析

  • MR是通过JobSubmitter.submitJobInternal提交给RM的

  • 在submitJobInternal中通过writeSplits(JobContext job, Path jobSubmitDir)将job的输入文件进行split

  • writeSplit只是对新旧api进行了下封装,根据你的代码选择新旧api,这里调用writeNewSplits使用新API对file进行split

  • 整个切片的逻辑过程主要就是在writeNewSplit里

① writeNewSplits源码分析

进入writeNewSplits()方法,可以看出该方法首先获取splits数组信息后,排序,将会优先处理大文件,最终返回mapper数量。这其中又分为两部分:确定切片数量 和 写入切片信息。 确定切片数量的任务交由FileInputFormat的getSplits(job)完成,写入切片信息的任务交由JobSplitWriter.createSplitFiles(jobSubmitDir, conf, jobSubmitDir.getFileSystem(conf), array)方法,该方法会将切片信息和SplitMetaInfo都写入HDFS中。return array.length,返回的是map任务数,默认map的数量是: default_num = total_size / block_size;

其内部逻辑主要分为以下几个步骤:

  • 创建InputFormat实例,用实例调用getSplits方法对文件进行切分,getSplits内部是切分的主要逻辑;

  • 将切片文件根据split的大小进行sort逆序排序

  • createSplitFiles:将保存切片信息的array数组落地到文件;

② getSplits源码分析

如何进行MapReduce中的JobSplit源码分析

如何进行MapReduce中的JobSplit源码分析

getSplits主要是将files进行切片,将文件路径path、偏移量(即起始位置,是该split在整个文件中的起始位置)、切分大小splitSize、偏移量所在block的locations信息Host和在内存中的host信息写入FileSplit对象中,一个split对应一个对象,最后放入splits中返回。

③ createFile源码分析

如何进行MapReduce中的JobSplit源码分析

createSplitFiles创建的文件包括两个,分别是记录切片的切片文件和记录切片元数据的切片元数据文件 。

补充内容:

getSplits方法中split切片的大小

  • 首先要区分两个概念:块(block)和切片(split)。块是HDFS中的概念,文件在HDFS中是以块为单位进行存储。切片是MapReduce中的概念;

  • split的大小由公式可知,取决于minSize、blockSize、maxSize三者之间的大小关系;从而也决定了split和block块的大小关系,我们在实际使用中要保证split和block是一对一的关系;

如何进行MapReduce中的JobSplit源码分析

关于如何进行MapReduce中的JobSplit源码分析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


文章题目:如何进行MapReduce中的JobSplit源码分析
路径分享:http://ybzwz.com/article/gjghgo.html