首页 > 其他分享 >【大数据】yarn 任务中的几种状态变化详细过程

【大数据】yarn 任务中的几种状态变化详细过程

时间:2023-05-08 22:22:53浏览次数:54  
标签:状态 Container 应用程序 几种 YARN 详细 yarn 资源

目录

一、概述

在YARN中,应用程序和Container的状态变化会影响任务的执行和资源分配。下面是YARN中应用程序和Container的状态详细过程:

1)Application 状态

是指YARN应用程序的状态。每个应用程序都有一个唯一的Application ID,并且可以通过ResourceManager API或YARN Web UI来获取应用程序的当前状态。在YARN中,应用程序状态可以有以下状态:

  1. NEW:应用程序刚创建时的状态。应用程序会被分配一个唯一的Application ID,但还没有分配资源,也没有进入资源队列。

  2. NEW_SAVING:应用程序等待资源保存。这个状态只存在于开启了Application历史保存的集群上,如果没有保存历史,则该状态的转换不会发生。

  3. SUBMITTED:应用程序已经提交给YARN,并在队列中等待调度资源。在该状态下,YARN只是对应用程序进行了初步的运行时配置,但还没有将任何容器分配到该应用程序。

  4. ACCEPTED:应用程序已经通过队列,并已经分配了它需要的初始和最小容器。

  5. RUNNING:应用程序正在运行中,并具有正在运行的容器。

  6. FINISHED:应用程序已经成功完成,并且其最终状态已经保存到YARN应用历史中。

  7. FAILED:应用程序运行失败,并且其最终状态已经保存到YARN应用历史中。

  8. KILLED:应用程序已被终止,并且其最终状态已经保存到YARN应用历史中。

2)Container 状态

容器状态指的是在YARN集群上运行的应用程序内部的容器状态。在YARN集群上运行的应用程序是通过启动多个容器来实现的,每个容器都运行着应用程序的一部分(如MapReduce中的一个map或reduce任务),并使用一个或多个资源(如内存、CPU等)来执行任务。当一个应用程序启动后,它的容器状态可能有以下几种:

  1. NEW:Container刚刚创建,但还没有分配资源

  2. LOCALIZED:Container已经获取了运行时环境和所需的资源,表示资源已经被分配给某个容器,但资源还未完全在该容器上本地化。在容器执行应用程序之前,需要将应用程序所需的资源(如JAR包、配置文件等)拷贝到容器所在的节点上,并在容器内部完成相关配置。完成本地化操作后,容器就可以开始执行应用程序。

  3. RUNNING:Container正在运行,并且已经分配了资源。

  4. COMPLETE:Container已经完成工作并退出。

  5. EXITED_WITH_SUCCESS:表示容器成功执行完毕,并且已经被清理。

  6. EXITED_WITH_FAILURE:表示容器执行失败,并且已经被清理。

NEW 状态到 LOCALIZED 状态,Container 会向 NodeManager 发起本地化请求,要求 NodeManager 将所需的资源复制到本地磁盘。从 LOCALIZED 状态到 RUNNING 状态,Container会通过启动进程来运行任务。在运行过程中,Container 可能会由于各种原因失败,进入 FAILED 状态。如果Container 顺利完成任务,则进入 COMPLETE 状态。

在这里插入图片描述

综上所述,YARN中应用程序和Container的状态变化对于任务的执行和资源分配非常关键。在使用YARN进行任务调度和管理时,需要对不同状态之间的转换有清晰的理解,以确保任务能够顺利运行和完成。

二、资源不足情况下状态变化

1)资源不足情况下

在YARN中,当资源不足时,YARN的资源管理器会对应用程序的状态进行调整,以帮助其适应现有的资源情况。下面是YARN中应用程序状态在资源不足的情况下的状态变化:

  • 如果应用程序在 SUBMITTED 状态时,发现资源不足,那么应用程序会进入 ACCEPTED状态。在这种情况下,YARN会尝试为应用程序分配资源,但可能需要等待其他应用程序释放资源后才能成功分配。

  • 如果应用程序在 ACCEPTED 状态时,发现资源不足,那么应用程序会进入等待状态。在等待状态下,应用程序不会分配任何容器,因为资源不足无法分配。

  • 如果应用程序在等待状态中,尝试重新分配资源,但仍然可以找到空闲资源。在这种情况下,应用程序会返回 ACCEPTED 状态,并成功分配新的容器。

  • 如果应用程序在等待状态中,无法重新分配资源,那么应用程序会转移到 KILLEDFAILED 状态。在这种情况下,应用程序无法分配所需的资源,因此无法完成任务。

2)任务超时时间配置

任务等待超时时间:

  • 在YARN中,任务等待资源的超时时间可以由任务提交者指定(优先级高),并且也可以在应用程序的配置文件(例如mapred-site.xmlyarn-site.xml)中进行设置。超时时间指定的是任务等待资源的最长时间,如果在此期间内无法获得所需的资源,则任务将被标记为失败。

  • 在默认情况下,任务等待资源的超时时间是YARN调度器指定的一个全局值,可以在yarn-site.xml配置文件中进行设置。该全局值的默认值600000毫秒(10分钟)。但也可以针对某个具体任务的特定需求进行调整,方法是在提交任务时构造一个ResourceRequest对象,并指定该对象的超时时间。

在YARN中,可以通过配置文件设置任务等待资源的超时时间,其中包括 mapred-site.xmlyarn-site.xml 两个文件。

1、yarn-site.xml 文件中配置超时时间

yarn-site.xml 文件中,可以设置以下两个参数来控制任务等待资源的超时时间:

  • yarn.nodemanager.resource.timeout-ms:这个参数定义了节点管理器等待应用程序可能需要的资源的最长时间。如果等待时间超过此限制,则节点管理器会杀死该应用程序。默认值为10分钟(600000毫秒)。

  • yarn.resourcemanager.resource-tracker.client.thread-count:这个参数定义了资源管理器向节点管理器发送请求的线程数。通过增加这个参数,可以提高资源管理器向节点管理器发送请求的并发性能,从而减少任务等待的时间。

2、mapred-site.xml 文件中配置超时时间

mapred-site.xml 文件中,可以设置以下参数来控制 MapReduce 作业等待资源的超时时间:

  • mapreduce.client.completion.pollinterval:这个参数定义了客户端轮询作业的完成状态的时间间隔。默认值为5000毫秒。

  • mapreduce.client.progressmonitor.pollinterval:这个参数定义了客户端轮询作业的进度状态的时间间隔。默认值为1000毫秒。

在这两个文件中,都可以使用默认值,也可以根据实际需求进行调整。当然也可以在程序中设定超时时间,示例代码如下:

ResourceRequest resReq = Records.newRecord(ResourceRequest.class);
resReq.setResourceName(capability.getResourceName());
resReq.setCapability(capability);
resReq.setNumContainers(numContainers);
resReq.setRelaxLocality(relaxLocality);
resReq.setPriority(priority);
//设置最长等待时间为30分钟,即1800000毫秒
resReq.setTimeout(1800000);
appAttemptID.setAttemptId(appAttemptNumber);
amClient.addContainerRequest(resReq);

综上所述,在应用程序和资源的状态变化中,资源不足是一个常见的问题。在处理这种情况时,YARN会对应用程序的状态进行调整,以尽可能适应现有的资源情况。在使用YARN进行任务调度和管理时,需要注意资源分配情况,并根据实际情况进行调整,以确保任务能够顺利运行和完成。

三、环境准备

如果已经有了环境了,可以忽略,如果想快速部署环境进行测试可以参考我这篇文章:通过 docker-compose 快速部署 Hive 详细教程

# 登录容器
docker exec -it hive-hiveserver2 bash
# 连接hive
beeline -u jdbc:hive2://hive-hiveserver2:10000  -n hadoop

四、Yarn 工作流程

YARN主要由 ResourceManagerNodeManagerApplicationMasterContainer 等组件构成。

在这里插入图片描述
当用户给Yarn提交了一个应用程序后,Yarn的主要工作流程如下图:
在这里插入图片描述

  • 【步骤1】用户向Yarn提交应用程序,其中包括用户程序、相关文件、启动 ApplicationMaster 命令、 ApplicationMaster程序等。

  • 【步骤2】ResourceManager为该应用程序分配第一个Container,并且与Container所在的NodeManager通信,并且要求该NodeManager在这个Container中启动应用程序对应的ApplicationMaster。

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

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

  • 【步骤5】一旦 ApplicationMaster 申请到资源后,便会与申请到的 Container 所对应的 NodeManager 进行通信,并且要求它在该Container中启动任务。

  • 【步骤6】任务启动。NodeManager 为要启动的任务配置好运行环境,包括环境变量、JAR包、二进制程序等,并且将启动命令写在一个脚本里,通过该脚本运行任务。

  • 【步骤7】各个任务通过 RPC 协议向其对应的 ApplicationMaster 汇报自己的运行状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以再任务运行失败时重启任务。

  • 【步骤8】应用程序运行完毕后,其对应的ApplicationMaster会向ResourceManager通信,要求注销和关闭自己。

这个需要注意的是在整个工作流程当中,ResourceManagerNodeManager 都是通过心跳保持联系的,NodeManager 会通过心跳信息向 ResourceManager 汇报自己所在节点的资源使用情况。

五、Yarn 常用命令

下面是YARN常用命令的一些示例:

1)查看应用程序

# 查看在运行的任务
yarn application -list

# 查看所有任务
yarn application -list -appStates ALL
# 状态值:ALL,NEW,NEW_SAVING,SUBMITTED,ACCEPTED,RUNNING,FINISHED,FAILED,KILLED

该命令用于显示当前正在运行中的所有应用程序的列表,包括应用程序ID、名称、用户、队列、开始时间、结束时间、状态等信息。

  • 查看YARN应用程序的状态:
yarn application -status <Application ID>

# 示例:
yarn application -status application_1683209715059_0002

该命令用于查看指定 Application ID 的应用程序的状态。可以查看应用程序的名称、用户、队列、开始时间、结束时间、状态、进度等信息。

3)查看指定应用程序的日志

yarn logs -applicationId <Application ID>

#示例:
yarn logs -applicationId application_1683209715059_0002

该命令用于查看指定应用程序的日志。可以使用该命令查看应用程序在运行过程中输出到 STDOUTSTDERR 的所有日志信息。

4)查看NodeManager ID

使用以下命令查看YARN集群中所有NodeManager的状态:

yarn node -list

该命令将显示所有NodeManager节点的状态,包括主机名,HTTP地址,状态,容器数量等信息。

5)查看指定NodeManager的日志

# 查看<Application ID>
yarn application -list -appStates ALL

# 查看<NodeManager ID>
yarn node -list

# 再查看日志
yarn logs -applicationId <Application ID> -nodeId <NodeManager ID>

# 示例:
yarn logs -applicationId application_1683209715059_0002 hadoop-yarn-nm-0:40140

该命令用于查看指定NodeManager上指定应用程序的日志。可以使用该命令查看节点管理器(NodeManager)在运行过程中输出到 STDOUT 和 STDERR 的所有日志信息。

6)杀死指定应用程序

# 查看在运行的任务
yarn application -list

# kill 任务
yarn application -kill <Application ID>

# 示例:
yarn application -kill application_1683209715059_0002

该命令用于杀死指定 Application ID 的应用程序。如果应用程序正在运行,则它将被强制终止并结束

7)服务启停命令

1、启停YARN服务

# 包括RM,NM,启动
start-yarn.sh

# 停止
stop-yarn.sh

2、启停YARN resourcemanager、NM服务

# 启动 resourcemanager
yarn --daemon start resourcemanager
# 停止 resourcemanager
yarn --daemon stop  resourcemanager

# 启动 nodemanager
yarn --daemon start  nodemanager
# 停止 nodemanager
yarn --daemon stop  nodemanager

# 指定日志级别,有 DEBUG、INFO、WARN、ERROR等级别。
#示例:
yarn --loglevel DEBUG --daemon start resourcemanager

8)启停YARN proxyserver 服务

YARN Proxy可以让您通过Web界面对集群进行监视和管理,而不必直接连接到每个节点。YARN Proxy服务是一个Web代理服务器,运行在YARN集群之外,并提供对集群资源管理器和节点管理器的访问。您可以通过代理访问Web界面,查看群集使用情况和任务执行状况。

yarn --daemon start proxyserver

这里就不展开讲解YARN proxyserver 服务,后面有单独讲解。

yarn 任务中的几种状态变化详细过程讲解就先到这里了,有任何疑问欢迎给我留言,后续会持续更新相关文章,也可关注我公众号【大数据与云原生技术分享】加群交流或私信咨询问题~

标签:状态,Container,应用程序,几种,YARN,详细,yarn,资源
From: https://www.cnblogs.com/liugp/p/17383329.html

相关文章

  • Mac安装MySQL5.7开发环境的详细步骤
    1.进入官网下载MySQL5.7的安装包。下载地址:https://www.mysql.com/downloads/      跟着上面图示下载即可,我这里选择的是5.7.31的版本,根据个人喜好选择版本,但是注意有的版本是没有mac版本的,换个版本就行了。2.安装包下载完成后双击pkg文件进行安装,无脑点下一步......
  • 【深入浅出 Yarn 架构与实现】6-3 NodeManager 分布式缓存
    不要跳过这部分知识,对了解NodeManager本地目录结构,和熟悉Container启动流程有帮助。一、分布式缓存介绍主要作用就是将用户应用程序执行时,所需的外部文件资源下载缓存到各个节点。YARN分布式缓存工作流程如下:客户端将应用程序所需的文件资源(外部字典、JAR包、二进制......
  • javasript定义类的几种方法(推荐)
    1.工厂模式functioncreateObject(name,age){varobj=newObject();obj.name=name;obj.age=age;obj.getName=function(){returnthis.name;};obj.getAge=function(){returnthis.age;}returnobj;}varobj2=createObject("王五",19);......
  • Linux基础19 Gdisk, 挂载命令mount与配置文件, fstab文件的详细信息, Swap介绍与案例,
    gdiskgdisk分区,分区表是GPT,支持更大的容量分区。128个。#需要安装[root@oldboy~]#yuminstall-ygdisk 1.添加硬盘,3TB在vmware里面添加2.查看是否能识别出来。[root@oldboy~]#lsblkNAMEMAJ:MINRMSIZEROTYPEMOUNTPOINTsda8:0050G0disk......
  • Java 几种任务调度的实现方法与比较
    几种任务调度的Java实现方法与比较综观目前的Web应用,多数应用都具备任务调度的功能。本文由浅入深介绍了几种任务调度的Java实现方法,包括Timer,Scheduler,Quartz以及JCronTab,并对其优缺点进行比较,目的在于给需要开发任务调度的程序员提供有价值的参考。 任务调度是指......
  • C3P0连接池在tomcat中的详细配置
    http://qiufubin.blog.sohu.com/55457392.html 2007-07-16 | C3P0连接池在tomcat中的详细配置  一.在tomcat_home\common\lib下放入jdbc的驱动程序,额外说一下,如果是使用sqlserver的话,有至少两个驱动可以选择,一个是微软提供的,另一个是jtds,比微软的要好很多,推荐使用二.配......
  • 几种常见的Python数据结构
    摘要:本文主要为大家讲解在Python开发中常见的几种数据结构。本文分享自华为云社区《Python的常见数据结构》,作者:timerring。数据结构和序列元组元组是一个固定长度,不可改变的Python序列对象。创建元组的最简单方式,是用逗号分隔一列值:In[1]:tup=4,5,6当用复杂的......
  • 仙境传说RO H5游戏详细图文架设教程
    前言还记得萌萌的波利么,对就是天天打波利的那个波利--,这次给大家带来了一款非常精美的休闲H5游戏仙境传说ROH5。满级VIP,爆表战力,各种好看的时装、坐骑、翅膀、宠物就在仙境传说ROH5!本文讲解仙境传说RO架设教程,想研究H5游戏如何实现,体验游戏中秒天秒地秒空气的一定不要......
  • Mac安装Maven开发环境的详细步骤
    1.进入官网下载Maven的压缩包。下载地址:https://maven.apache.org/download.cgi  点击上面图示中的红色方框的apache-maven-3.8.8-bin.zip2.将文件夹apache-maven-3.8.8移动个人喜好的其他目录,Maven安装完成。下面进行环境配置3.打开maven目录,在这个目录下新建一个文件夹......
  • 史上最详细的Android Studio系列教程四--Gradle基础
    什么是Gradle?Gradle是一种依赖管理工具,基于Groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的内部领域特定(DSL)语言。安装Gradle在AndroidStudio系列教程一--下载与安装中新建项目成功后会下载Gradle,貌似这个过程不翻也是可以下载,但是访问......