MapReduce

一、执行流程

1.Input -> split

文件要存储在HDFS中,每个文件切分成多个一定大小(默认64M)的Block(默认3个备份)存储在多个节点(DataNode)上,即散落在不同机器上。InputFormat是MapReduce提供的一个类(提供了数据切分(如图切分成5个分片split,split作为Map读入的数据源,Map数量取决于split数量,一个map对应一个split分片)和记录读取器两个功能)。

Input -> split
在这里插入图片描述

2.总体流程图:

Map task:
一个map对应一个split分片,map读取split数据到内存buffer memory中,并启动一个进程(每个map对应一个进程,每个reduce也对应一个进程)。内存达到缓冲区阈值(如80%)后把数据锁住,进行分区排序(排序默认算法为快速排序第一关键字为分区号第二关键字为key)落地到磁盘,形成很多小文件。最后进行归并排序(如图三个文件,每个文件已经排好序)。
Reduce task:
把map数据通过hash哈希拷贝到reduce机器上,后把数据合并、作计算、输出。

总体流程

3.详细的Input split-> 小文件split.n(n=1,2,…)过程

输入到形成小文件

4.详细的小文件split.n归并排序过程

小文件split.n归并排序

5.reduce过程:拷贝copy-合并-计算reduce

每个map都有三个partition,把map数据partition=0的数据都拷贝到reduce机器上,合并成大的文件,把这个文件附加到进程Reduce 0中,这三个Reduce对应着各自的分区进行计算。
reduce过程三阶段

二、 MapReduce工作流程

1. 两个重要的进程

(1)JobTracker
• 主进程,负责接收客户作业提交,调度任务到作节点上运行,并提供诸如监控工作节点状态及任务进度等管理功能,一个MapReduce集群有一个jobtracker,一般运行在可靠的硬件上。
• tasktracker是通过周期性的心跳来通知jobtracker其当前的健康状态,每一次心跳包含了可用的map和reduce任务数目、占用的数目以及运行中的任务详细信息。Jobtracker利用一个线程池来同时处理心跳和客户请求。
(2) TaskTracker
• 由jobtracker指派任务,实例化用户程序,在本地执行任务并周期性(如每3s,确保JobTracker健康状态)地向jobtracker汇报状态。在每一个工作节点上永远只会有一个tasktracker

2.MapReduce工作原理

• JobTracker一直在等待JobClient提交作业
• 当Task Tracker处于空闲状态时,TaskTracker每隔3秒向JobTracker发送心跳询问有没有任务可做,如果有,让其派发任务给它执行;
当Task Tracker正在工作时,每隔3秒向JobTracker发送心跳汇报任务做到什么程度。
• Slave主动向master拉生意

3.MapReduce作 业 调 度

• 默认先进先出队列调度模式(FIFO)
– 优先级(very_high、high、normal,low,very low)

三、问题:

1. 所有的文件都需要split吗:

所有的文件都需要split吗?不是,压缩文件没有办法做split,不管压缩文件是大还是小,都要一个map处理。一个压缩文件对应一个map,没有办法像一个block对应一个split一样预估split大小。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值