【Hadoop】MapReduce

MapReduce是一个分布式计算框架,支持编写程序处理大数据集。

Hadoop 0.20.0以及之前版本,MapReduce由JobTracker和TaskTracker组成。JobTracker是运行在主节点上的后台进程,监听各个TaskTracker发来的心跳,包括资源使用情况和任务运行情况等信息。TaskTracker是运行在从节点上的进程,它一方面将本地节点上各个任务的状态通过心跳,周期性地汇报给JobTracker,另一方面从JobTracker接收并执行各种命令,包括提交任务、运行任务、kill任务等。

Hadoop 0.23.0版本开始,MapReduce架构重构,使用YARN管理资源,框架的组成变为三部分:一个主节点上的资源管理器ResourceManager,每个从节点上的节点管理器NodeManager,每个应用程序对应的MRAppMaster。

MapReduce通过Split、Map、Shuffle、Reduce四个步骤处理数据,其中Map、Reduce通过应用程序实现,Split和Shuffle是由框架自动完成。

1. Split

为了解决记录溢出问题,MapReduce框架中引入Split概念。MapReduce使用input splits作为数据块的逻辑表示。当MapReduce作业客户端计算input splits时,它会计算出块中第一个和最后一个完整记录的位置。如果最后一个记录是不完整的,input splits中包含下一个块的位置信息,还有完整记录所需的字节偏移量。原始数据被分隔成若干split后,每个split作为一个map任务输入,在map执行过程中,split会被分解为一个个键-值对,map会依次处理每个键-值对。map任务输出不写到HDFS中,而是写入map任务所在从节点的本地磁盘,这个中间结果也不会在HDFS集群间复制。

2. Map

此步骤是MapReduce逐一处理input splits阶段,再此ResourceManager调度器会给map任务分配他们处理数据需要的资源。map任务没处理完一条记录就会生成一个新的中间键值对,map任务的输出就是这些中间键值对的集合。

3. Shuffle

Shuffle横跨Map端和Reduce端,它是MapReduce的核心处理过程。在Shuffle中,会把map任务输出的一组无规则中间键值对尽量转换为一组具有一定规则的数据,然后将这些数据传递给Reduce端。Shuffle在Map端包括spill过程,在Reduce端包括copy和sort过程。

4. Reduce

Reduce负责对Map输出结果进行计算归并,它处理Shuffle后的每个键及其对应值的列表,并将一系列键值对反馈给客户端应用。但Reduce步骤不是必要的,有些数据处理只要map阶段就可以了,比如文本转换大小写,视频文件抽取关键帧等,这也称为map-only作业。但在多数情况下,还是需要Reduce对map输出做进一步处理。

Reduce任务和Map任务相同,也会一个个的逐条处理每一个键,每个Reduce任务的输出会写入一个结果文件,并将结果文件存储到HDFS中,HDFS会自动生成结果文件数据块的副本。

值得注意的是Reduce任务只有在所有的map任务结束后才会开始,但当某个map任务非常慢应该怎么办呢?MapReduce框架使用推测执行的方法,当所有的task开始后,MRAppMaster会统计所有任务的平均速度,如果某个task比平均速度慢,此时MRAppMaster就会启动一个新的task,原有任务和新任务哪个先执行完就把另外一个kill掉。另外,根据mapreduce job幂等的特点,同一个task执行多次的结果是一样的,所以task只要有一次执行成功就可以了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值