MapReduce的运行原理

MapReduce的执行步骤:

在这里插入图片描述

  1. 每个Map上创建一个split数据,默认和block大小相同,每一个split都会由一个map task进行处理,从block中读取出每一行的数据会变成一个个的键值对<K,V>。

  2. 接下来,读取出来的数据都会进入内存缓冲区,在进入缓冲区之前,每一条数据都会被打上标签,这个过程叫做分区,由分区器来完成,默认的分区器是HashPartitioner,然后数据就会被读取到缓冲区,缓冲区会将这些数据先进行combiner,然后进行排序,排序规则是先根据分区号来排序,然后根据key来排序,缓冲区大小为100M,分为两个部分,分别是80M和20M,之所以这样划分是为了在内存中读满数据的时候,80M的数据会溢写到磁盘中形成一个个小文件,在这个时候,由剩下的20M内存进行读数据,提高计算效率。

  3. 接下来,磁盘中一个个排好序的小文件会被合并成一个大文件,过程中会使用归并排序将属于同一分区的数据合并大大文件中的同一分区,在排序的过程中还会进行一次combiner。

  4. 当所有的map task完成后,每一个map task都会形成一个最终文件,并且该文件按区进行划分。在reduce中,就会拉取各个map中的属于同一分区的数据到相应的reduce task,当内存满了就会进行溢写,在溢写前会进行排序,当把这个分区的数据全部拉取过来之后,磁盘中一个个的小文件会进行合并,合并的过程中也会根据key进行排序。排完序之后,会把合并后的大文件进行分组,相同的key为一组,每一组数据调用一次reduce。第一组调用reduce形成一个结果文件,其他组形成的结果也会追加到这个结果文件中,也就是说,一个分区的数据只会形成一个结果文件。

MapReduce分布式计算框架体系结构

Hadoop1.x版本:
角色:
  • JobTracker
    JobTracker是整个集群的核心,是集群的资源调度主节点以及任务调度主节点

  • TaskTracker
    1、JobTracker的从节点,负责自身节点的资源管理,会周期性的向JobTracker汇报心跳,心跳信息包括任务执行进度、任务运行状态、资源使用情况、节点健康情况等。
    2、TaskTracker会执行JobTracker下发的各种命令,主要包括:启动任务、提交任务、杀死任务和重新初始化。

  • Client
    以作业为单位,把任务提交到JobTracker

弊端:

  • JobTracker负载过重,容易产生单点故障
  • 资源管理与计算调度强耦合,其他计算框架需要重复实现资源管理、
  • 不同框架对资源不能全局管理,存在资源隔离以及抢夺问题
Hadoop2.x版本 yarn:

在这里插入图片描述

角色:
  • ResourceManager
    负责集群的资源调度,是整个集群的核心,根据客户端的请求启动应用对应的ApplicationMaseter。
    同时会有zookeeper集群管理着一个备用的ResourceManager。

  • NodeManager
    1.向ResourceManager汇报资源
    2.管理Container生命周期

  • Container
    存在于NodeManager节点,具体任务task的计算单元
    默认NodeManager启动线程监控Container大小,超出申请资源额度,kill

  • ApplicationMaster
    管理应用的生命周期,向ResourceManager申请资源,以作业为单位,把作业分发到不同的节点,管理任务对应的Container。
    ApplicationMaster一旦挂掉,整哥任务都停止了,此事ResourceManager会重新启动ApplicationMaster。

  • Client
    请求资源创建AM
    与AM进行交互

工作流程:

1、提交MapReduce程序,向NameNode请求要处理文件的Block的位置信息。
2、向ResourceManager申请资源,请求启动一个ApplicationMaster。
3、RM接收到请求后随机选择一台资源充足的节点启动Container容器
4、NodeManager会在这个Container容器中启动一个ApplicationMaster(任务调度器)
5、client把请求到的Block的位置信息提交到AM。
6、AM根据这些位置信息向ResourceManager申请资源,RM接收请求选择资源充足的节点启动一个Container容器,并在容器中创建yarn-child进程。
7、AM分发Map Task线程到各个yarn-child中执行。
8、在每个yarn-child所在节点,每个Map Task线程执行完后会都会生成一个磁盘文件。
9、如果yarn-child节点资源充足,AM会优先选择这些节点分发Reduce Task任务。
10、等Reduce Task执行完之后,会把结果文件写入HDFS。

总结:

在Hadoop2.x版本,将原本的JobTracker中的资源调度器和任务调度器进行了拆分,分别由ResourceManager和ApplicationMaseter进程实现,yarn的引入,使的多个计算框架可以在同一个集群运行,如果其他的计算框架需要运行在yarn集群,只需要实现ApplicationMaster组件即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值