分布式资源调度--YARN框架

YARN产生背景

        YARN是Hadoop2.x才有的,所以在介绍YARN之前,我们先看一下MapReduce1.x时所存在的问题:
  • 单点故障
  • 节点压力大
  • 不易扩展

MapReduce1.x时的架构如下:

可以看到,1.x时也是Master/Slave这种主从结构,在集群上的表现就是一个JobTracker带多个TaskTracker。

JobTracker:负责资源管理和作业调度
TaskTracker:定期向JobTracker汇报本节点的健康状况、资源使用情况以及作业执行情况。还可以接收来自JobTracker的命令,例如启动任务或结束任务等。

那么这种架构存在哪些问题呢:

整个集群中只有一个JobTracker,就代表着会存在单点故障的情况
JobTracker节点的压力很大,不仅要接收来自客户端的请求,还要接收大量TaskTracker节点的请求
由于JobTracker是单节点,所以容易成为集群中的瓶颈,而且也不易域扩展
JobTracker承载的职责过多,基本整个集群中的事情都是JobTracker来管理
1.x版本的整个集群只支持MapReduce作业,其他例如Spark的作业就不支持了
由于1.x版本不支持其他框架的作业,所以导致我们需要根据不同的框架去搭建多个集群。这样就会导致资源利用率比较低以及运维成本过高,因为多个集群会导致服务环境比较复杂。如下图:

在上图中我们可以看到,不同的框架我不仅需要搭建不同的集群。而且这些集群很多时候并不是总是在工作,如上图可以看到,Hadoop集群在忙的时候Spark就比较闲,Spark集群比较忙的时候Hadoop集群就比较闲,而MPI集群则是整体并不是很忙。这样就无法高效的利用资源,因为这些不同的集群无法互相使用资源。除此之外,我们还得运维这些个不同的集群,而且文件系统是无法共享的。如果当需要将Hadoop集群上的HDFS里存储的数据传输到Spark集群上进行计算时,还会耗费相当大的网络IO流量。

所以我们就想着要把这些集群都合并在一起,让这些不同的框架能够运行在同一个集群上,这样就能解决这各种各样的问题了。如下图:
分布式资源调度——YARN框架

正是因为在1.x中,有各种各样的问题,才使得YARN得以诞生,而YARN就可以令这些不同的框架运行在同一个集群上,并为它们调度资源。我们来看看Hadoop2.x的架构图:
分布式资源调度——YARN框架

在上图中,我们可以看到,集群最底层的是HDFS,在其之上的就是YARN层,而在YARN层上则是各种不同的计算框架。所以不同计算框架可以共享同一个HDFS集群上的数据,享受整体的资源调度,进而提高集群资源的利用率,这也就是所谓的 xxx on YARN。

YARN架构
YARN概述:

YARN是资源调度框架
通用的资源管理系统
为上层应用提供统一的资源管理和调度
YARN架构图,也是Master/Slave结构的:
分布式资源调度——YARN框架

从上图中,我们可以看到YARN主要由以下几个核心组件构成:

  1. ResourceManager, 简称RM,整个集群同一时间提供服务的RM只有一个,它负责集群资源的统一管理和调度。以及还需要处理客户端的请求,例如:提交作业或结束作业等。并且监控集群中的NM,一旦某个NM挂了,那么就需要将该NM上运行的任务告诉AM来如何进行处理。
  2. NodeManager, 简称NM,整个集群中会有多个NM,它主要负责自己本身节点的资源管理和使用,以及定时向RM汇报本节点的资源使用情况。接收并处理来自RM的各种命令,例如:启动Container。NM还需要处理来自AM的命令,例如:AM会告诉NM需要启动多少个Container来跑task。
  3. ApplicationMaster, 简称AM,每个应用程序都对应着一个AM。例如:MapReduce会对应一个、Spark会对应一个。它主要负责应用程序的管理,为应用程序向RM申请资源(Core、Memory),将资源分配给内部的task。AM需要与NM通信,以此来启动或停止task。task是运行在Container里面的,所以AM也是运行在Container里面。
  4. Container, 封装了CPU、Memory等资源的一个容器,相当于是一个任务运行环境的抽象。
  5. Client, 客户端,它可以提交作业、查询作业的运行进度以及结束作业。

YARN官方文档地址如下:

https://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-site/YARN.html

YARN执行流程
假设客户端向ResourceManager提交一个作业,ResourceManager则会为这个作业分配一个Container。所以ResourceManager会与NodeManager进行通信,要求这个NodeManager启动一个Container。而这个Container是用来启动ApplicationMaster的,ApplicationMaster启动完之后会与ResourceManager进行一个注册。这时候客户端就可以通过ResourceManager查询作业的运行情况了。然后ApplicationMaster还会到ResourceManager上申请作业所需要的资源,申请到以后就会到对应的NodeManager之上运行客户端所提交的作业,然后NodeManager就会把task运行在启动的Container里。

如下图:
分布式资源调度——YARN框架

另外找到两篇关于YARN执行流程不错的文章:

【图文】YARN 工作流程
Yarn应用程序运行流程剖析
YARN环境搭建
介绍完基本的理论部分之后,我们来搭建一个伪分布式的单节点YARN环境,使用的hadoop版本如下:

hadoop-2.6.0-cdh5.7.0
官方的安装文档地址如下:

       https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html

1.下载并解压好hadoop-2.6.0-cdh5.7.0,这一步可以参考我之前写的一篇关于http://blog.51cto.com/13132636/2095339的文章,我这里就不再赘述了。

确保HDFS是否为正常启动状态

        [[email protected] ~]# jps
        3383 NameNode
        3500 DataNode
        3709 SecondaryNameNode
       [[email protected]~]# 

2.编辑mapred-site.xml配置文件,在文件中增加如下内容:

         [[email protected] sbin]# cd /usr/local/hadoop-2.6.0-cdh5.7.0/e
         [[email protected] hadoop]#
         [[email protected] /usr/local/hadoop-2.6.0-cdh5.7.0/etc/hadoop]# cp mapred-site.xml.template mapred-site.xml  # 拷贝模板文件
         [[email protected]] /usr/local/hadoop-2.6.0-cdh5.7.0/etc/hadoop]# vim mapred-site.xml  

<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

3.编辑yarn-site.xml配置文件,在文件中增加如下内容:

          [[email protected] /usr/local/hadoop-2.6.0-cdh5.7.0/etc/hadoop]# vim yarn-site.xml  # 增加如下内容

<configuration>
 <!-- Site specific YARN configuration properties -->
 <property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>

4.启动ResourceManager进程以及NodeManager进程:

   [[email protected] /usr/local/hadoop-2.6.0-cdh5.7.0/etc/hadoop]# cd ../../sbin/
   [[email protected] /usr/local/hadoop-2.6.0-cdh5.7.0/sbin]# ./start-yarn.sh

starting yarn daemons
starting resourcemanager, logging to /usr/local/hadoop-2.6.0-cdh5.7.0/logs/yarn-root-resourcemanager-localhost.out
localhost: starting nodemanager, logging to /usr/local/hadoop-2.6.0-cdh5.7.0/logs/yarn-root-nodemanager-localhost.out

  [[email protected] /usr/local/hadoop-2.6.0-cdh5.7.0/sbin]# jps
 3984 NodeManager  # 启动成功后可以看到多出了NodeManager
 4947 DataNode
5252 Jps
5126 SecondaryNameNode
3884 ResourceManager  # 和ResourceManager进程,这样才是正常的。
4813 NameNode

 [[email protected] /usr/local/hadoop-2.6.0-cdh5.7.0/sbin]# netstat -lntp |grep java

tcp 0 0 0.0.0.0:50090 0.0.0.0: LISTEN 5126/java
tcp 0 0 127.0.0.1:42602 0.0.0.0:
 LISTEN 4947/java
tcp 0 0 192.168.77.130:8020 0.0.0.0: LISTEN 4813/java
tcp 0 0 0.0.0.0:50070 0.0.0.0:
 LISTEN 4813/java
tcp 0 0 0.0.0.0:50010 0.0.0.0: LISTEN 4947/java 
tcp 0 0 0.0.0.0:50075 0.0.0.0:
 LISTEN 4947/java
tcp 0 0 0.0.0.0:50020 0.0.0.0: LISTEN 4947/java 
tcp6 0 0 :::8040 :::
 LISTEN 5566/java 
tcp6 0 0 :::8042 ::: LISTEN 5566/java
tcp6 0 0 :::8088 :::
 LISTEN 5457/java 
tcp6 0 0 :::13562 ::: LISTEN 5566/java
tcp6 0 0 :::8030 :::
 LISTEN 5457/java 
tcp6 0 0 :::8031 ::: LISTEN 5457/java
tcp6 0 0 :::8032 :::
 LISTEN 5457/java 
tcp6 0 0 :::48929 ::: LISTEN 5566/java
tcp6 0 0 :::8033 :::
 LISTEN 5457/java

5..通过浏览器来访问ResourceManager,默认端口是8088,例如10.0.0.7:8088,就会访问到这样的一个页面上:

6.到此为止,我们的yarn环境就搭建完成了。

原文地址:https://www.cnblogs.com/syf-com/p/9015840.html

时间: 2024-07-30 16:44:32

分布式资源调度--YARN框架的相关文章

Hadoop MapReduceV2(Yarn) 框架

Hadoop MapReduceV2(Yarn) 框架简介 原 Hadoop MapReduce 框架的问题 对于业界的大数据存储及分布式处理系统来说,Hadoop 是耳熟能详的卓越开源分布式文件存储及处理框架,对于 Hadoop 框架的介绍在此不再累述,读者可参考 Hadoop 官方简介.使用和学习过老 Hadoop 框架(0.20.0 及之前版本)的同仁应该很熟悉如下的原 MapReduce 框架图: 图 1.Hadoop 原 MapReduce 架构 从上图中可以清楚的看出原 MapRed

Hadoop学习之YARN框架

转自:http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/,非常感谢分享! 对于业界的大数据存储及分布式处理系统来说,Hadoop 是耳熟能详的卓越开源分布式文件存储及处理框架,对于 Hadoop 框架的介绍在此不再累述,读者可参考 Hadoop 官方简介.使用和学习过老 Hadoop 框架(0.20.0 及之前版本)的同仁应该很熟悉如下的原 MapReduce 框架图: 图 1.Hadoop 原 MapReduce

Hadoop MapReduceV2(Yarn) 框架简介[转]

对于业界的大数据存储及分布式处理系统来说,Hadoop 是耳熟能详的卓越开源分布式文件存储及处理框架,对于 Hadoop 框架的介绍在此不再累述,读者可参考 Hadoop 官方简介.使用和学习过老 Hadoop 框架(0.20.0 及之前版本)的同仁应该很熟悉如下的原 MapReduce 框架图: 图 1.Hadoop 原 MapReduce 架构 从上图中可以清楚的看出原 MapReduce 程序的流程及设计思路: 首先用户程序 (JobClient) 提交了一个 job,job 的信息会发送

hadoop备战:yarn框架的简介(mapreduce2)

新 Hadoop Yarn 框架原理及运作机制 重构根本的思想是将 JobTracker 两个主要的功能分离成单独的组件,这两个功能是资源管理和任务调度 / 监控.新的资源管理器全局管理所有应用程序计算资源的分配,每一个应用的 ApplicationMaster 负责相应的调度和协调.一个应用程序无非是一个单独的传统的 MapReduce 任务或者是一个 DAG( 有向无环图 ) 任务.ResourceManager 和每一台机器的节点管理服务器能够管理用户在那台机器上的进程并能对计算进行组织.

Lucene + Hadoop 分布式搜索运行框架 Nut 1.0a9转自http://www.linuxidc.com/Linux/2012-02/53113.htm

1.概述 不管程序性能有多高,机器处理能力有多强,都会有其极限.能够快速方便的横向与纵向扩展是Nut设计最重要的原则,以此原则形成以分布式并行计算为核心的架构设计.以分布式并行计算为核心的架构设计是Nut区别于Solr.Katta的地方. Nut是一个Lucene+Hadoop分布式并行计算搜索框架,能对千G以上索引提供7*24小时搜索服务.在服务器资源足够的情况下能达到每秒处理100万次的搜索请求. Nut开发环境:jdk1.6.0.23+lucene3.0.3+eclipse3.6.1+ha

基于netty轻量的高性能分布式RPC服务框架forest&lt;下篇&gt;

基于netty轻量的高性能分布式RPC服务框架forest<上篇> 文章已经简单介绍了forest的快速入门,本文旨在介绍forest用户指南. 基本介绍 Forest是一套基于java开发的RPC框架,除了常规的点对点调用外,Motan还提供服务治理功能,包括服务节点的自动发现.摘除.高可用和负载均衡等. 架构概述 Forest中分为服务提供方(RPC Server),服务调用方(RPC Client)和服务注册中心(Registry)三个角色. Server提供服务,向Registry注册

分布式的任务调度框架

[niubi-job——一个分布式的任务调度框架]----niubi-job这下更牛逼了! niubi-job迎来第一次重大优化 niubi-job是一款专门针对定时任务所设计的分布式任务调度框架,它可以进行动态发布任务,并且有超高的可用性保证. 有多少人半夜被叫起来查BUG,结果差到最后发现,是因为某个定时任务挂了导致出了问题? 有了niubi-job,你再也不用担心这个问题! 又有多少人因为要发布一个新的定时任务,为了不影响线上的运行,只能等到半夜再去发布应用? 有了niubi-job,你可

分布式服务治理框架Dubbo

前言 Dubbo是一个被国内很多互联网公司广泛使用的开源分布式服务治理框架,是一个非常全面的SOA基础框架,当当网在Dubbo基础上新增了一些功能,并将其命名为Dubbox(Dubbo eXtensions). 为什么需要Dubbo? 以前所有的业务处理,都在一个系统当中: 接着,这个大系统按照业务领域划分为N个业务系统: 各个业务系统之间不可避免需要交互,采用什么呢?HTTP的方式?WebService?... 我们将面临很多URL的管理,服务之间的调用链,依赖关系,服务的负载均衡.监控等等

分布式开源调度框架TBSchedule原理与应用

主要内容: 第一部分 TBSchedule基本概念及原理 1. 概念介绍 2. 工作原理 3. 源代码分析 4. 与其它开源调度框架对照 第二部分 TBSchedule分布式调度演示样例 1. TBSchedule源代码下载 2. 引入源代码Demo开发演示样例 3. 控制台配置任务调度 4. selectTasks方法參数说明 5. 创建调度策略參数说明 6. 创建任务參数说明 第一部分 TBSchedule基本概念及原理 1. 概念介绍 TBSchedule是一个支持分布式的调度框架.能让一