大数据——Hadoop2.0 Yarn框架原理及运作机制

网友投稿 703 2022-05-29

大数据——Hadoop2.0 Yarn框架原理及运作机制

1.1 Hadoop1.x VS Hadoop2.x比较

hadoop1.0时期架构

hadoop2.0时期架构

hdfs架构

【Active Namenode】:主 Master(只有一个),管理 HDFS 的名称空间,管理数据块映射信息;配置副本策略;处理客户端读写请求

【Secondary NameNode】:NameNode 的热备;定期合并 fsimage 和 fsedits,推送给 NameNode;当 Active NameNode 出现故障时,快速切换为新的 Active NameNode。

【Datanode】:Slave(有多个);存储实际的数据块;执行数据块读 / 写

【Client】:与 NameNode 交互,获取文件位置信息;与 DataNode 交互,读取或者写入数据;管理 HDFS、访问 HDFS。

MapReduce架构

MapReduce1.x架构

客户端向JobTracker提交一个作业JobTracker把这个作业拆分成很多份然后分配给TaskTracker任务执行者去执行TaskTracker会隔一段时间向JobTracker发送心跳信息如果JobTracker在一段时间内没有收到TaskTracker的心跳信息JobTracker会认为TaskTracker死掉了会把TaskTracker的作业任务分配给其他TaskTracker。

MapReduce1.x架构存在的问题

1.JobTracker节点压力大

2.单点故障

3.只能跑mapreduce作业

MapReduce2.x架构

MapReduce就是分而治之的理念把一个复杂的任务划分为若干个简单的任务分别来做。把一些数据通过map来归类通过reducer来把同一类的数据进行处理。map的工作就是切分数据然后给他们分类分类的方式就是以key,value键值对 分类之后reduce拿到的都是同类数据进行处理

MapReduce执行流程

1.客户端提交一个作业

2.JobClient与JobTracker通信JobTracker返回一个JobID

3.JobClient复制作业资源文件

将运行作业所需要的资源文件复制到HDFS上包括MapReduce程序打包的JAR文件、配置文件和客户端计算所得的输入划分信息。这些文件都存放在JobTracker专门为该作业创建的文件夹中。文件夹名为该作业的Job ID。JAR文件默认会有10个副本mapred.submit.replication属性控制输入划分信息告诉了JobTracker应该为这个作业启动多少个map任务等信息

1.2 Hadoop2.0之YARN 基本架构

YARN是Hadoop 2.0中的资源管理系统它的基本设计思想是将MRv1中的JobTracker拆分成了两个独立的服务一个全局的资源管理器ResourceManager和每个应用程序特有的ApplicationMaster。

其中ResourceManager负责整个系统的资源管理和分配而ApplicationMaster负责单个应用程序的管理。

1.3 YARN基本组成结构

YARN总体上仍然是Master/Slave结构在整个资源管理框架中ResourceManager为MasterNodeManager为SlaveResourceManager负责对各个NodeManager上的资源进行统一管理和调度。当用户提交一个应用程序时需要提供一个用以跟踪和管理这个程序的ApplicationMaster它负责向ResourceManager申请资源并要求NodeManger启动可以占用一定资源的任务。由于不同的ApplicationMaster被分布到不同的节点上因此它们之间不会相互影响。在本小节中我们将对YARN的基本组成结构进行介绍。

图2-9描述了YARN的基本组成结构YARN主要由ResourceManager、NodeManager、ApplicationMaster图中给出了MapReduce和MPI两种计算框架的ApplicationMaster分别为MR AppMstr和MPI AppMstr和Container等几个组件构成。

1.ResourceManagerRM

RM是一个全局的资源管理器负责整个系统的资源管理和分配。它主要由两个组件构成调度器Scheduler和应用程序管理器Applications ManagerASM。

1调度器

调度器根据容量、队列等限制条件如每个队列分配一定的资源最多执行一定数量的作业等将系统中的资源分配给各个正在运行的应用程序。

需要注意的是该调度器是一个“纯调度器”它不再从事任何与具体应用程序相关的工作比如不负责监控或者跟踪应用的执行状态等也不负责重新启动因应用执行失败或者硬件故障而产生的失败任务这些均交由应用程序相关的ApplicationMaster完成。调度器仅根据各个应用程序的资源需求进行资源分配而资源分配单位用一个抽象概念“资源容器”Resource Container简称Container表示Container是一个动态资源分配单位它将内存、CPU、磁盘、网络等资源封装在一起从而限定每个任务使用的资源量。此外该调度器是一个可插拔的组件用户可根据自己的需要设计新的调度器YARN提供了多种直接可用的调度器比如Fair Scheduler和Capacity Scheduler等。

2 应用程序管理器

应用程序管理器负责管理整个系统中所有应用程序包括应用程序提交、与调度器协商资源以启动ApplicationMaster、监控ApplicationMaster运行状态并在失败时重新启动它等。

2. ApplicationMasterAM

用户提交的每个应用程序均包含1个AM主要功能包括

与RM调度器协商以获取资源用Container表示

将得到的任务进一步分配给内部的任务

与NM通信以启动/停止任务

监控所有任务运行状态并在任务运行失败时重新为任务申请资源以重启任务。

当前YARN自带了两个AM实现一个是用于演示AM编写方法的实例程序distributedshell它可以申请一定数目的Container以并行运行一个Shell命令或者Shell脚本另一个是运行MapReduce应用程序的AM—MRAppMaster我们将在第8章对其进行介绍。此外一些其他的计算框架对应的AM正在开发中比如Open MPI、Spark等。

3. NodeManagerNM

NM是每个节点上的资源和任务管理器一方面它会定时地向RM汇报本节点上的资源使用情况和各个Container的运行状态另一方面它接收并处理来自AM的Container启动/停止等各种请求。

4. Container

Container是YARN中的资源抽象它封装了某个节点上的多维度资源如内存、CPU、磁盘、网络等当AM向RM申请资源时RM为AM返回的资源便是用Container表示的。YARN会为每个任务分配一个Container且该任务只能使用该Container中描述的资源。

需要注意的是Container不同于MRv1中的slot它是一个动态资源划分单位是根据应用程序的需求动态生成的。截至本书完成时YARN仅支持CPU和内存两种资源且使用了轻量级资源隔离机制Cgroups进行资源隔离。

1.4  YARN工作流程

当用户向YARN中提交一个应用程序后YARN将分两个阶段运行该应用程序

第一个阶段是启动ApplicationMaster

第二个阶段是由ApplicationMaster创建应用程序为它申请资源并监控它的整个运行过程直到运行完成。

如图2-11所示YARN的工作流程分为以下几个步骤

步骤1 用户向YARN中提交应用程序其中包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等。

步骤2 ResourceManager为该应用程序分配第一个Container并与对应的Node-Manager通信要求它在这个Container中启动应用程序的ApplicationMaster。

步骤3 ApplicationMaster首先向ResourceManager注册这样用户可以直接通过ResourceManager查看应用程序的运行状态然后它将为各个任务申请资源并监控它的运行状态直到运行结束即重复步骤4~7。

步骤4 ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源。

步骤5 一旦ApplicationMaster申请到资源后便与对应的NodeManager通信要求它启动任务。

步骤6 NodeManager为任务设置好运行环境包括环境变量、JAR包、二进制程序等后将任务启动命令写到一个脚本中并通过运行该脚本启动任务。

步骤7 各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度以让ApplicationMaster随时掌握各个任务的运行状态从而可以在任务失败时重新启动任务。

在应用程序运行过程中用户可随时通过RPC向ApplicationMaster查询应用程序的当前运行状态。

步骤8 应用程序运行完成后ApplicationMaster向ResourceManager注销并关闭自己。

1.5 多角度理解YARN

可将YARN看做一个云操作系统它负责为应用程序启动ApplicationMaster相当于主线程然后再由ApplicationMaster负责数据切分、任务分配、启动和监控等工作而由ApplicationMaster启动的各个Task相当于子线程仅负责自己的计算任务。当所有任务计算完成后ApplicationMaster认为应用程序运行完成然后退出。

Hadoop生态系统各个时期主要架构图:https://blog.csdn.net/c929833623lvcha/article/details/81220612

1.1 Hadoop1.x VS Hadoop2.x比较

hadoop1.0时期架构

hadoop2.0时期架构

hdfs架构

【Active Namenode】:主 Master(只有一个),管理 HDFS 的名称空间,管理数据块映射信息;配置副本策略;处理客户端读写请求

【Secondary NameNode】:NameNode 的热备;定期合并 fsimage 和 fsedits,推送给 NameNode;当 Active NameNode 出现故障时,快速切换为新的 Active NameNode。

【Datanode】:Slave(有多个);存储实际的数据块;执行数据块读 / 写

【Client】:与 NameNode 交互,获取文件位置信息;与 DataNode 交互,读取或者写入数据;管理 HDFS、访问 HDFS。

MapReduce架构

MapReduce1.x架构

客户端向JobTracker提交一个作业JobTracker把这个作业拆分成很多份然后分配给TaskTracker任务执行者去执行TaskTracker会隔一段时间向JobTracker发送心跳信息如果JobTracker在一段时间内没有收到TaskTracker的心跳信息JobTracker会认为TaskTracker死掉了会把TaskTracker的作业任务分配给其他TaskTracker。

1.JobTracker节点压力大

2.单点故障

3.只能跑mapreduce作业

MapReduce2.x架构

MapReduce就是分而治之的理念把一个复杂的任务划分为若干个简单的任务分别来做。把一些数据通过map来归类通过reducer来把同一类的数据进行处理。map的工作就是切分数据然后给他们分类分类的方式就是以key,value键值对 分类之后reduce拿到的都是同类数据进行处理

MapReduce执行流程

将运行作业所需要的资源文件复制到HDFS上包括MapReduce程序打包的JAR文件、配置文件和客户端计算所得的输入划分信息。这些文件都存放在JobTracker专门为该作业创建的文件夹中。文件夹名为该作业的Job ID。JAR文件默认会有10个副本mapred.submit.replication属性控制输入划分信息告诉了JobTracker应该为这个作业启动多少个map任务等信息

1.2 Hadoop2.0之YARN 基本架构

YARN是Hadoop 2.0中的资源管理系统它的基本设计思想是将MRv1中的JobTracker拆分成了两个独立的服务一个全局的资源管理器ResourceManager和每个应用程序特有的ApplicationMaster。

其中ResourceManager负责整个系统的资源管理和分配而ApplicationMaster负责单个应用程序的管理。

1.3 YARN基本组成结构

YARN总体上仍然是Master/Slave结构在整个资源管理框架中ResourceManager为MasterNodeManager为SlaveResourceManager负责对各个NodeManager上的资源进行统一管理和调度。当用户提交一个应用程序时需要提供一个用以跟踪和管理这个程序的ApplicationMaster它负责向ResourceManager申请资源并要求NodeManger启动可以占用一定资源的任务。由于不同的ApplicationMaster被分布到不同的节点上因此它们之间不会相互影响。在本小节中我们将对YARN的基本组成结构进行介绍。

图2-9描述了YARN的基本组成结构YARN主要由ResourceManager、NodeManager、ApplicationMaster图中给出了MapReduce和MPI两种计算框架的ApplicationMaster分别为MR AppMstr和MPI AppMstr和Container等几个组件构成。

1.ResourceManagerRM

RM是一个全局的资源管理器负责整个系统的资源管理和分配。它主要由两个组件构成调度器Scheduler和应用程序管理器Applications ManagerASM。

1调度器

调度器根据容量、队列等限制条件如每个队列分配一定的资源最多执行一定数量的作业等将系统中的资源分配给各个正在运行的应用程序。

需要注意的是该调度器是一个“纯调度器”它不再从事任何与具体应用程序相关的工作比如不负责监控或者跟踪应用的执行状态等也不负责重新启动因应用执行失败或者硬件故障而产生的失败任务这些均交由应用程序相关的ApplicationMaster完成。调度器仅根据各个应用程序的资源需求进行资源分配而资源分配单位用一个抽象概念“资源容器”Resource Container简称Container表示Container是一个动态资源分配单位它将内存、CPU、磁盘、网络等资源封装在一起从而限定每个任务使用的资源量。此外该调度器是一个可插拔的组件用户可根据自己的需要设计新的调度器YARN提供了多种直接可用的调度器比如Fair Scheduler和Capacity Scheduler等。

2 应用程序管理器

应用程序管理器负责管理整个系统中所有应用程序包括应用程序提交、与调度器协商资源以启动ApplicationMaster、监控ApplicationMaster运行状态并在失败时重新启动它等。

2. ApplicationMasterAM

用户提交的每个应用程序均包含1个AM主要功能包括

与RM调度器协商以获取资源用Container表示

将得到的任务进一步分配给内部的任务

与NM通信以启动/停止任务

监控所有任务运行状态并在任务运行失败时重新为任务申请资源以重启任务。

当前YARN自带了两个AM实现一个是用于演示AM编写方法的实例程序distributedshell它可以申请一定数目的Container以并行运行一个Shell命令或者Shell脚本另一个是运行MapReduce应用程序的AM—MRAppMaster我们将在第8章对其进行介绍。此外一些其他的计算框架对应的AM正在开发中比如Open MPI、Spark等。

3. NodeManagerNM

NM是每个节点上的资源和任务管理器一方面它会定时地向RM汇报本节点上的资源使用情况和各个Container的运行状态另一方面它接收并处理来自AM的Container启动/停止等各种请求。

4. Container

Container是YARN中的资源抽象它封装了某个节点上的多维度资源如内存、CPU、磁盘、网络等当AM向RM申请资源时RM为AM返回的资源便是用Container表示的。YARN会为每个任务分配一个Container且该任务只能使用该Container中描述的资源。

需要注意的是Container不同于MRv1中的slot它是一个动态资源划分单位是根据应用程序的需求动态生成的。截至本书完成时YARN仅支持CPU和内存两种资源且使用了轻量级资源隔离机制Cgroups进行资源隔离。

1.4  YARN工作流程

当用户向YARN中提交一个应用程序后YARN将分两个阶段运行该应用程序

第一个阶段是启动ApplicationMaster

第二个阶段是由ApplicationMaster创建应用程序为它申请资源并监控它的整个运行过程直到运行完成。

如图2-11所示YARN的工作流程分为以下几个步骤

步骤1 用户向YARN中提交应用程序其中包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等。

步骤2 ResourceManager为该应用程序分配第一个Container并与对应的Node-Manager通信要求它在这个Container中启动应用程序的ApplicationMaster。

步骤3 ApplicationMaster首先向ResourceManager注册这样用户可以直接通过ResourceManager查看应用程序的运行状态然后它将为各个任务申请资源并监控它的运行状态直到运行结束即重复步骤4~7。

步骤4 ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源。

步骤5 一旦ApplicationMaster申请到资源后便与对应的NodeManager通信要求它启动任务。

步骤6 NodeManager为任务设置好运行环境包括环境变量、JAR包、二进制程序等后将任务启动命令写到一个脚本中并通过运行该脚本启动任务。

步骤7 各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度以让ApplicationMaster随时掌握各个任务的运行状态从而可以在任务失败时重新启动任务。

在应用程序运行过程中用户可随时通过RPC向ApplicationMaster查询应用程序的当前运行状态。

步骤8 应用程序运行完成后ApplicationMaster向ResourceManager注销并关闭自己。

1.5 多角度理解YARN

可将YARN看做一个云操作系统它负责为应用程序启动ApplicationMaster相当于主线程然后再由ApplicationMaster负责数据切分、任务分配、启动和监控等工作而由ApplicationMaster启动的各个Task相当于子线程仅负责自己的计算任务。当所有任务计算完成后ApplicationMaster认为应用程序运行完成然后退出。

Hadoop生态系统各个时期主要架构图:https://blog.csdn.net/c929833623lvcha/article/details/81220612

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【Hello,鲲鹏】第一期:什么是华为云鲲鹏?
下一篇:华为云FusionInsight助力太保跨多版本升级业务0中断
相关文章