在YARN中,状态应用程序和Container的变化状态变化会影响任务的执行和资源分配。下面是详细YARN中应用程序和Container的状态详细过程:
是指YARN应用程序的状态。每个应用程序都有一个唯一的过程Application ID,并且可以通过ResourceManager API或YARN Web UI来获取应用程序的大数的种当前状态。在YARN中,状态应用程序状态可以有以下状态:
容器状态指的是在YARN集群上运行的应用程序内部的容器状态。在YARN集群上运行的应用程序是通过启动多个容器来实现的,每个容器都运行着应用程序的一部分(如MapReduce中的一个map或reduce任务),并使用一个或多个资源(如内存、CPU等)来执行任务。当一个应用程序启动后,它的容器状态可能有以下几种:
从 NEW 状态到 LOCALIZED 状态,Container 会向 NodeManager 发起本地化请求,要求 NodeManager 将所需的资源复制到本地磁盘。从 LOCALIZED 状态到 RUNNING 状态,Container会通过启动进程来运行任务。在运行过程中,Container 可能会由于各种原因失败,进入 FAILED 状态。如果Container 顺利完成任务,则进入 COMPLETE 状态。
综上所述,YARN中应用程序和Container的状态变化对于任务的执行和资源分配非常关键。在使用YARN进行任务调度和管理时,需要对不同状态之间的转换有清晰的理解,以确保任务能够顺利运行和完成。
在YARN中,当资源不足时,YARN的资源管理器会对应用程序的状态进行调整,以帮助其适应现有的资源情况。下面是YARN中应用程序状态在资源不足的情况下的状态变化:
任务等待超时时间:
在YARN中,可以通过配置文件设置任务等待资源的超时时间,其中包括 mapred-site.xml 和 yarn-site.xml 两个文件。
在 yarn-site.xml 文件中,可以设置以下两个参数来控制任务等待资源的超时时间:
在 mapred-site.xml 文件中,可以设置以下参数来控制 MapReduce 作业等待资源的超时时间:
在这两个文件中,都可以使用默认值,也可以根据实际需求进行调整。当然也可以在程序中设定超时时间,示例代码如下:
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# 连接hivebeeline -u jdbc:hive2://hive-hiveserver2:10000 -n hadoop
YARN主要由 ResourceManager、NodeManager、ApplicationMaster 和 Container 等组件构成。
当用户给Yarn提交了一个应用程序后,Yarn的主要工作流程如下图:
这个需要注意的是在整个工作流程当中,ResourceManager 和 NodeManager 都是通过心跳保持联系的,NodeManager 会通过心跳信息向 ResourceManager 汇报自己所在节点的资源使用情况。
下面是YARN常用命令的一些示例:
# 查看在运行的任务yarn application -list# 查看所有任务yarn application -list -appStates ALL# 状态值:ALL,NEW,NEW_SAVING,SUBMITTED,ACCEPTED,RUNNING,FINISHED,FAILED,KILLED
该命令用于显示当前正在运行中的所有应用程序的列表,包括应用程序ID、名称、用户、队列、开始时间、结束时间、状态等信息。
yarn application -status <Application ID># 示例:yarn application -status application_1683209715059_0002
该命令用于查看指定 Application ID 的应用程序的状态。可以查看应用程序的名称、用户、队列、开始时间、结束时间、状态、进度等信息。
yarn logs -applicationId <Application ID>#示例:yarn logs -applicationId application_1683209715059_0002
该命令用于查看指定应用程序的日志。可以使用该命令查看应用程序在运行过程中输出到 STDOUT 和STDERR 的所有日志信息。
使用以下命令查看YARN集群中所有NodeManager的状态:
yarn node -list
该命令将显示所有NodeManager节点的状态,包括主机名,HTTP地址,状态,容器数量等信息。
# 查看<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 的所有日志信息。
# 查看在运行的任务yarn application -list# kill 任务yarn application -kill <Application ID># 示例:yarn application -kill application_1683209715059_0002
该命令用于杀死指定 Application ID 的应用程序。如果应用程序正在运行,则它将被强制终止并结束。
# 包括RM,NM,启动start-yarn.sh# 停止stop-yarn.sh
# 启动 resourcemanageryarn --daemon start resourcemanager# 停止 resourcemanageryarn --daemon stop resourcemanager# 启动 nodemanageryarn --daemon start nodemanager# 停止 nodemanageryarn --daemon stop nodemanager# 指定日志级别,有 DEBUG、INFO、WARN、ERROR等级别。#示例:yarn --loglevel DEBUG --daemon start resourcemanager
YARN Proxy可以让您通过Web界面对集群进行监视和管理,而不必直接连接到每个节点。YARN Proxy服务是一个Web代理服务器,运行在YARN集群之外,并提供对集群资源管理器和节点管理器的访问。您可以通过代理访问Web界面,查看群集使用情况和任务执行状况。
yarn --daemon start proxyserver
这里就不展开讲解YARN proxyserver 服务,后面有单独讲解。
责任编辑:武晓燕 来源: 今日头条 WebYARN管理(责任编辑:时尚)
WFP secures 71 mln USD to address food crisis in Africa
4K液晶索尼X95J vs 三星 MiniLED QN85A,两大显示技术巅峰对决谁能占据上风?
Death toll of S. Africa's Johannesburg building fire rises to 63