mapreduce核心流程 hadoop
2019-11-18 10:24:51 0 举报
MapReduce是一种分布式计算框架,它的核心流程包括Map和Reduce两个阶段。在Map阶段,输入数据被切分成多个小的数据块,每个数据块由一个Map任务处理。Map任务将输入数据转换为一组键值对,然后输出到本地磁盘。接着,这些键值对会被排序并分区,以便后续的Reduce任务处理。 在Reduce阶段,每个Reduce任务接收到所有具有相同键的值,并将它们合并在一起。然后,Reduce任务对这些值进行规约操作,以生成最终结果。最后,所有的Reduce任务会将结果写入HDFS中。
作者其他创作
大纲/内容
reduce开始
combine计算规则和mapreduce一样
分区之后就知道交给哪个reduce处理
tasktracker
创建每一个MapTask 和 ReduceTasktask
文件内容拆分成多个split
spill(溢写):sort & combiner
把内存缓冲区中的数据写入到本地磁盘,在写入本地磁盘时先按照partition、再按照key进行排序(quick sort);这个spill是由另外单独的线程来完成,不影响往缓冲区写map结果的线程;如果缓存不够写入到磁盘
对该节点的map数据进行hash分区
grep问题解决
先计数再排序
常见api熟悉
+ operation1(params):returnType- operation2(params)- operation3()
wordcount过程
。。。。。
文件存储是block处理按照split
按split执行mapreduce
hadoop旧api的兼容
新api 部分不兼容2.0,旧的可以mapred /mapreduce(新 )
reduce所在节点磁盘(缓冲区)
client
Shuffle阶段
map阶段的 shuffle过程
对每个split数据应执行maptask
merge 有三种形式:1)内存到内存 2)内存到磁盘 3)磁盘到磁盘
copy map之后数据
当整个MapReduce作业的所有已执行完成的Map Task任务数超过Map Task总数的5%后,JobTracker便会开始调度执行Reduce Task任务
job jar
merge
次溢写会产生一个spill_file,这样会有多个spill_file,而最终的一个map task输出只有一个文件
jobtracker
hadoop流程
重新把任务分配给其他节点
心跳检查 节点挂了,会把任务分配给其他节点
各个进程的关系
mapreduce过程
reduce阶段
分区代码应该一样的,就是规则一样
slot分为Map slot 和Reduce slot 两种,分别供Map Task 和Reduce Task 使用。
map过大,缓冲区理论
如果map过大,缓冲区理论和map阶段缓冲区一致
split和block关系
不是一一对应关系进行map解析的时候,一个split对应多个block
task
和linux管道的处理方式
不同的管道之间使用不同的语言管道就是标准输入输出cat 1.txt | grep \"doing\" | sort
心跳机制
写法
模版方法的设计模式实现
检查心跳
job.setCombinerClass(myCombine.class)
两种情况可能会执行combine:map输出数据根据分区排序完成后,在写入文件之前会执行一次combine操作(前提是作业中设置了这个操作)如果map输出比较大,font color=\"#ff3333\
job.setPartitionerClass(MyPartition.class
mapreduce提供的Partitioner接口,对key进行hash后,再以reducetask数量取模,然后到指定的job上作用:决定于当前的mapper的part交给哪个reduce
并行执行多个split对应的流程
把相应task分发
map做分片的意义
map处理完之后,才能进行reduce
其他语言
只能实现mapreduce
slot\"代表计算资源(CPU、内存等空闲slot分配给Task 使用
split map所在 磁盘(缓冲区)
map阶段
收藏
收藏
0 条评论
下一页