hadoop基础(三)—YARN的架构
YARN概述
Yarn本来只是MapReduce的一部分,后来变成了Hadoop一个独立的项目
概括来说,Hadoop YARN的目的是使得Hadoop数据处理能力超越MapReduce。众所周知,Hadoop HDFS是Hadoop的数据存储层,Hadoop MapReduce是数据处理层。然而,MapReduce已经不能满足今天广泛的数据处理需求,如实时/准实时计算,图计算等。而Hadoop YARN提供了一个更加通用的资源管理和分布式应用框架。在这个框架上,用户可以根据自己需求,实现定制化的数据处理应用。而Hadoop MapReduce也是YARN上的一个应用。我们将会看到MPI,图处理,在线服务等(例如Spark,Storm,HBase)都会和Hadoop MapReduce一样成为YARN上的应用。下面将分别介绍传统的Hadoop MapReduce以及新一代Hadoop YARN架构
传统的Hadoop MapReduce 架构
传统的Apache Hadoop MapReduce系统由JobTracker和TaskTracker组成。其中JobTracker是master,只有一个;TaskTracker是slaves,每个节点部署一个。架构图如下:
-
job tracker负责:
资源管理
跟踪资源消耗/可用资源
Job生命周期管理(调度Job的每个task,跟踪状态,容灾等)
-
task tracker负责
依次启动和停止由JobTracker分配的Task
周期性的向job tracker汇报task的进度和状态信息
新一代Hadoop YARN
YARN的最基本思想是将JobTracker的两个主要职责:资源管理和Job调度管理分别交给两个角色负责。一个是全局的ResourceManager,一个是每个应用一个的ApplicationMaster。ResourceManager以及每个节点一个的NodeManager构成了新的通用系统,实现以分布式方式管理应用。
- YARN架构图
-
基本说明:
- ResouceManager
每个Hadoop集群只会有一个ResourceManager(如果是HA的话会存在两个,但是有且只有一个处于active状态),它负责管理整个集群的计算资源,并将这些资源分别给应用程序。ResourceManager 内部主要有两个组件:
- 1.
-
NodeManager
NodeManager是YARN中每个节点上的代理,它管理Hadoop集群中单个计算节点,根据相关的设置来启动容器的。NodeManager会定期向ResourceManager发送心跳信息来更新其健康状态。同时其也会监督Container的生命周期管理,监控每个Container的资源使用(内存、CPU等)情况,追踪节点健康状况,管理日志和不同应用程序用到的附属服务(auxiliary service)
-
ApplicationMaster
ApplicationMaster是应用程序级别的,每个ApplicationMaster管理运行在YARN上的应用程序。YARN 将 ApplicationMaster看做是第三方组件,ApplicationMaster负责和ResourceManager scheduler协商资源,并且和NodeManager通信来运行相应的task。ResourceManager 为 ApplicationMaster 分配容器,这些容器将会用来运行task。ApplicationMaster 也会追踪应用程序的状态,监控容器的运行进度。当容器运行完成, ApplicationMaster 将会向 ResourceManager 注销这个容器;如果是整个作业运行完成,其也会向 ResourceManager 注销自己,这样这些资源就可以分配给其他的应用程序使用了。
-
Container
Container是与特定节点绑定的,其包含了内存、CPU磁盘等逻辑资源。不过在现在的容器实现中,这些资源只包括了内存和CPU。容器是由 ResourceManager scheduler 服务动态分配的资源构成。容器授予 ApplicationMaster 使用特定主机的特定数量资源的权限。ApplicationMaster 也是在容器中运行的,其在应用程序分配的第一个容器中运行
- ResouceManager
YARN的优点
-
可扩展性
- MapReduce 1 最多可支持4000个节点的集群.因为JobTracker负责的职责太多而成为瓶颈
- Yarn 可以支持10000个节点,并行100000个task.
-
可靠性
- Yarn的ResourceManager职责很简单,很容易实现HA;
- MapReduce 1 的JobTracker的状态变化非常迅速(想象下每个Task过几秒都会想它报告状态). 这使得JotTracker很难实现HA(高可用性).通常HA都是通过备份当前系统的状态然后当系统失败备用系统用备份的状态来继续工作.
-
并行性
- MapReduce 1只能运行MapReduce应用
- Yarn最大的好处之一就是职称很多其他类型的分布式Application. 如下图:
YARN运行机制
流程图
-
流程说明:
- Client提交一个application,以及必要的specification来启动ApplicationMaster
- ResourceManager敲定一个用来启动ApplicationMaster的container。然后启动ApplicationMaster
- ApplicationMaster启动时会向ResourceManager注册。 注册后,client可以向ResourceManager查询ApplicationMaster的详细信息,并且client可以直接和ApplicationMaster通信。
- ApplicationMaster通过resourcerequest 协议来敲定更多的Container资源
- ApplicationMaster向NodeManager提供详细的信息来启动Container。之后Container可以和ApplicationMaster通信
- application会在Container里面执行,并根据applicaion-specific的协议来向ApplicationMaster报告状态
- 在appliation运行期间,client直接通过application-specific协议来和ApplicationMaster通信去获取运行状态以及进展
- application结束后,ApplicationMater会向ResourceManager注销然后释放资源。