YARN:Yet Another Resource Negotiator 通用的资源管理系统。为上一层的mapreduce,spark等任务服务提供统一的资源管理和调度。
YARN 是一个资源管理、任务调度的框架,主要包含三大模块:ResourceManager(RM)、 NodeManager(NM)、ApplicationMaster(AM)。 ResourceManager 负责所有资源的监控、分配和管理; ApplicationMaster 负责每一个具体应用程序的调度和协调; NodeManager 负责每一个节点的维护。 对于所有的 applications,RM 拥有绝对的控制权和对资源的分配权。而每个 AM 则会和 RM 协商资源,同时和 NodeManager 通信来执行和监控 task。
Yarn是Master/slave主从结构,通过主从管理关系,对所有的计算框架运行在一个集群中,共享一个集群的资源进行按需分配,提高资源的利用率。
二、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注销并关闭自己。
三、yarn的配置
1.修改配置文件mapred-site.xml,配置mapreduce作业任务交个yarn框架进行管理
vim /opt/mysoft/hadoop/etc/hadoop/mapred-site.xml
2.修改配置文件yarn-site.xml
vim /opt/mysoft/hadooop/etc/hadoop/yarn-site.xml
3.配置完成之后启动服务
start-yarn.sh
4.检查启动是否成功,通过jps查看进程 ResourceManager,NodeManager
5.通过http://hadoop00:8088查看webUI界面上yarn的运行画面
6.提交mapreduce作业,到yarn集群环境,查看任务执行情况。
Apache Hadoop YARN (Yet Another Resource Negotiator,另一种资源协调者)是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处
mapreduce1.0回顾
1. client 负责把作业提交到集群
2. ResourceManager 负责集群资源的统一管理和调度,承担了 JobTracker 的角色,整个集群只有“一个”,总的来说,RM有以下作用:
3. NodeManager 管理YARN集群中的每个节点。整个集群可以有多个。负责单个节点上资源的管理和使用(具体点说是负责计算节点上container的启动、监控和管理,防止Application Master使用多于它申请到的计算资源)。NM有以下作用
4. ApplicationMaster 每个应用有一个,负责应用程序整个生命周期的管理 。
ApplicationMaster 负责协调来自 ResourceManager 的资源,并通过 NodeManager 监视容器的执行和资源使用(CPU、内存等的资源分配)。请注意,尽管目前的资源比较传统(CPU 核心、内存),但未来会带来支持的新资源类型(比如图形处理单元或专用处理设备)。AM有以下作用:
5. Container 是 YARN 中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等,当AM向RM申请资源时,RM为AM返回的资源便是用Container表示的。YARN会为每个任务分配一个Container,且该任务只能使用该Container中描述的资源。Container有以下作用:
剖析MapReduce作业运行机制
1、作业的提交
2、作业的初始化
3、任务的分配
4、任务的执行
5、进度和状态的更新
6、作业的完成
简单版工作流程
详细版工作流程
步骤1:用户向YARN中提交应用程序,其中包括ApplicationMaster程序、启动ApplicationMaster、用户程序等。
步骤2:ResourceManager为该应用程序分配第一个Container,并与对应的NodeManager通信,要求它在这个Container中启动应用程序的ApplicationMaster。
步骤3:ApplicationMaster首先向ResourceManager注册,这样用户可以直接通过ResourceManager查看应用程序的运行状态,然后它将为各个任务申请资源,并监控他的运行状态,直到运行结束,即要重复步骤4-7。
步骤4:ApplicationMaster采用轮询的方式通过RPC协议找ResourceManager申请和领取资源。
步骤5:一旦Application申请到资源后,便与对应的NodeManager通信,要求启动任务。
步骤6:NodeManager为任务设置好运行环境,包括环境变量、JAR包、二进制程序等,然后将任务启动命令写到另一个脚本中,并通过运行该脚本启动任务。
步骤7:各个任务通过RPC协议向ApplicationMaster汇报自己的状态和进度,ApplicationMaster随时掌握各个任务的运行状态,从而可以再任务失败时重新启动任务。在应用程序运行过程中,用户可以随时通过RPC协议ApplicationMaster查询应用程序的当前运行状态。
步骤8:应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己。
1.YARN的HA
2.hdfs的HA
Namenode和resourcemanager的HA两点最大的不同:
1.ZKFC是作为ResourceManager之中的一个进程,而Hadoop中则是一个外置的守护进程
hadoop1.0到hadoop2.0的变迁
MapReduce对任务执行的更多控制(暂时不明白)
1.调度器基本作用
根据节点资源(slot、container)使用情况和作业的要求,将任务调度到各个节点上执行
2.作业调度器考虑的因素
1、作业优先级。作业的优先级越高,它能够获取的资源(slot数目)也越多。Hadoop 提供了5种作业优先级,分别为 VERY_HIGH、HIGH、NORMAL、 LOW、VERY_LOW,通过mapreduce.job.priority属性来设置,或者用JobClient的setJobPriority()方法来设置。
2、作业提交时间。顾名思义,作业提交的时间越早,就越先执行。
3、作业所在队列的资源限制。调度器可以分为多个队列,不同的产品线放到不同的队列里运行。不同的队列可以设置一个边缘限制,这样不同的队列有自己独立的资源,不会出现抢占和滥用资源的情况
3.Hadoop的自带作业调度器
4.如何配置使用调度器?
将其JAR文件放到Hadoop的类路(classpath)
然后设置mapred.jobtracker.taskScheduler属性(yarn.resourcemanager.scheduler.class)值为org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
Application Master决定如何运行构成MapReduce作业的各个任务。如果作业很小,就选择在与它同一个JVM上运行任务
什么样的作业称为小作业(又叫Uber任务或小任务)?
默认情况下,小作业指小于10个mapper且只有一个reducer且输入大小小于HDFS块的任务。
涉及属性配置如下:
设置dfs.name.dir 时,通过逗号分隔多个值,可以使namenode将元数据存储到多个副本,以便namenode出错时恢复。dfs.data.dir也可设置多个目录,但是其目的不是为了冗余容错,而是可以循环写入,提高性能。
fs.checkpoint.dir也可设置多个目录,以保存检查点。和namenode一样,其支持冗余备份。
以上设置的目录,默认在hadoop.tmp.dir目录下,即/tmp/hadoop-${user.name},需要确保该目录不被 *** 作系统清理,或者另外指定到其他目录。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)