这篇文章将为大家详细讲解有关如何进行MapReduce中的JobSplit源码分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
创新互联建站是一家专注于网站设计、成都网站制作与策划设计,沙河口网站建设哪家好?创新互联建站做网站,专注于网站建设10年,网设计领域的专业建站公司;建站业务涵盖:沙河口等地区。沙河口做网站价格咨询:028-86922220
根据MapRudece的原理,我们从4个过程去分析MR的源码:
Split阶段;
MapTask阶段;
Shuffle阶段;
ReduceTask阶段;
下面首先介绍Split阶段的源码。
MR是通过JobSubmitter.submitJobInternal提交给RM的
在submitJobInternal中通过writeSplits(JobContext job, Path jobSubmitDir)
将job的输入文件进行split
writeSplit只是对新旧api进行了下封装,根据你的代码选择新旧api,这里调用writeNewSplits
使用新API对file进行split
整个切片的逻辑过程主要就是在writeNewSplit里
进入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主要是将files进行切片,将文件路径path、偏移量(即起始位置,是该split在整个文件中的起始位置)、切分大小splitSize、偏移量所在block的locations信息Host和在内存中的host信息写入FileSplit
对象中,一个split对应一个对象,最后放入splits中返回。
createSplitFiles创建的文件包括两个,分别是记录切片的切片文件和记录切片元数据的切片元数据文件 。
补充内容:
getSplits方法中split切片的大小
首先要区分两个概念:块(block)和切片(split)。块是HDFS中的概念,文件在HDFS中是以块为单位进行存储。切片是MapReduce中的概念;
split的大小由公式可知,取决于minSize、blockSize、maxSize三者之间的大小关系;从而也决定了split和block块的大小关系,我们在实际使用中要保证split和block是一对一的关系;
关于如何进行MapReduce中的JobSplit源码分析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款