黑马程序员技术交流社区

标题: 【上海校区】mapreduce概念以及架构 [打印本页]

作者: 梦缠绕的时候    时间: 2019-2-21 10:49
标题: 【上海校区】mapreduce概念以及架构

在我们了解了hdfs的一些基础概念以后,我们现在就来进一步了解一下mapreduce的相关概念。

首先,mapreduce在hadoop体系里面充当一个计算者的角色,但如我们之前所演示一样我们在开启hdfs和yarn时都有相关的进程,但mapreduce就是没有的。mapreduce是直接运行在yarn上面的,我们来简单描述一下hdfs,yarn和mapreduce三者的关系。

最底层的是hdfs,其作为存储的角色。在其之上的是yarn,这个是充当了资源调度和作业分配的角色。最后是mapreduce直接使用hdfs上的数据在yarn上进行计算。

而在mapreduce中,map对象和reduce对象是最为主要和重要的抽象类。我们在这里先将这两货理解为两个方法吧,对应的分别是大数据计算的两个阶段:map阶段和reduce阶段,中间还有一个shuffle过程,一般有些人喜欢将这个过程算到reduce阶段里面。那什么是map和reduce呢?map我们可以理解为是一个映射关系,就是通过一个统一的规则将所有的数据转化成另外一种格式或者样式,一般在大数据开发的过程,我们会将单个原素转化成一个key,value的键值对方便后面的shuffle和reduce过程。而reduce我们可以理解为是一种聚合分组的概念,就是将相同的key的元素统一计算其value值。至于中间的shuffle过程你可以理解为是一个数据重新分配的过程,后面我们将详细地介绍这个过程,同时shuffle也将伴随你的整个大数据开发的生涯,很多大数据组件都从中引用了这一个概念。

简单举个例子来说明下map和reduce在sql语句中对应的是什么:

select age+1 as newAge from t; 就是我选择一个年龄的字段对每一个值都执行一个+1操作就是map,执行的是一个统一映射操作

select name max(sale) from t group by name;就是根据年龄进行分组聚合,将相同名字的人的最高工资show出来,最后我们的key是name而对value(sale)进行了一个聚合

下面我们来讲一下mapreduce的架构,其实就是你把作业提交的yarn上时yarn的执行流程。

1,用户想yarn的ResourceManager提交了应用程序,其中包括:ApplicationMaster程序,启动ApplicationMaster程序请求,以及用户程序等。

2,ResourceManager首先为该程序分配一个container容器(线程),并与对应放置这个container的NodeManager进行rpc通信,要求他在这个container中启动一个应用程序的ApplicationMaster。

3,ApplicationMaster首先想ResourceManager注册,这样用户就可以直接通过ResourceManager查看应用程序的运行状态,查看各个任务的资源状态运行状态等。

4,ApplicationMaster以轮询的方式通过rpc通讯向ResourceScheduler申请资源,当拿到资源列表(就是哪些机器有空闲资源就调用他们来执行计算),就可以去访问那些机器。

5,一旦ApplicationMaster申请到资源后,便与对应的NodeManager节点通信,要求它启动一个container,这个container是用来运行我们现在所提交的作业的各种task的。

6,NodeManager节点启动一个container运行task。

7,各个容器的task通过rpc向ApplictionMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个task的状态,如果某task失败时,ApplicationMaster可以重启这个task,用户也可以通过web界面实时了解作业的执行情况。

8,App完成后,ApplicationMaster向ApplicationManager注销并关闭这个作业。

Ps:reduce和map这两个task不会在同一个container里,一个container只对应一个task或者一个ApplicationMaster。

这里我们其实可以总结一个:在yarn当中有主节点是ResourceManager和一堆从节点NodeManager(这个是物理存在的结构)。其中ResourceManager负责管理集群的资源和监视所有提交运行的App以及监控每个NodeManager(主要是资源层面的东西,具体的作业不实际管理),而在ResourceManager里面又有ApplicationManager和ResourceScheduler,前者是对应Apps作业的后者是对应资源分配的。

而每一个Apps在NodeManager里面都有一个ApplicationMaster负责管理这个app的运行以及反馈状态情况给ApplicationManager,然后还有一堆的NodeManager开启了container来运行这个app中的各个task。

所以我们可以理解为资源端或者实际结构上的主从结构是ResourceManager和NodeManager,而作业端是ApplicationMaster管理一个作业,在一堆NodeManager中启动多个container来运行各个task(当然了ApplicationMaster也是在一个container当中的)

作者: 不二晨    时间: 2019-2-26 15:41
奈斯,感谢分享




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2