MapReduce流程(分片和计算)
2022-01-29 11:05:10 7 举报
MapReduce流程
作者其他创作
大纲/内容
归并排序
每个文件进行切片
1.利用快速排序算法对缓存区内的数据进行排序,排序方式是,先按照分区编号Partition进行排序,然后按照key进行排序。这样,经过排序后,数据以分区为单位聚集在一起,且同一分区内所有数据按照key有序。2.按照分区编号由小到大依次将每个分区中的数据写入任务工作目录下的临时文件output/spillN.out(N表示当前溢写次数)中。如果用户设置了Combiner,则写入文件之前,对每个分区中的数据进行一次聚集操作。3.将分区数据的元信息写到内存索引数据结构SpillRecord中,其中每个分区的元信息包括在临时文件中的偏移量、压缩前数据大小和压缩后数据大小。如果当前内存索引大小超过1MB,则将内存索引写到文件output/spillN.out.index中。
所有MapTask完成后告诉ReduceTask处理范围(MrAppMaster)
调用FileInputFormat.getSplits()获取分片信息
设置缓存、把Job的参数写到job.xml
KV
分区1
如果是yarnRunner,上传jar包
Output
合并成一个文件
map
MapTaskResult
分组
MrAppMasterNodeManager
提交jar包job.submit()
左边索引index、patition、keyStart、valstart右边数据key、value、unsued默认100M,写到80%时反向写同时把数据溢写到文件
Reducer
Job.jarjob.splitjob.xml
Shuffle
combine(可选)
MapTask1
合并数据(内存/硬盘)
快排
Yarn RM调度
写到文件Part-r-0001
下载需要的数据到Reduce
环型缓冲区
job.xml文件
在job提交时已经完成了分片Mapper会按照分片真正去读取数据并进行Map操作
RecordReader读取分片数据
整个map完成后
job.split&job.xml
分区2
input
不一定是FileInputFormat,可以是InputFormat的子类,不同的InputFormat会有不同的切片方法
outputFormat
recordWriter
InputFormat
超过最大size1.1倍进行新的分片
生成jobId
Job.split文件
Mapper
OutputFormat
hdfs:..../job.jar
0 条评论
下一页