YARN提供了一个WebUI V1服务,该服务属于内置服务,随着RM启动而启动。V1表示这是第一代版本的WebUI服务。
用户可以通过浏览器登录界面,来监视群集、队列、应用程序、服务、节点信息。
还可以查看集群详细配置的信息,检查各种应用程序和服务的日志。
浏览器输入http://RM_HOST:8088/访问YARN WebUI服务。
页面打开后,以列表形式展示处于各种状态(接收、执行、完成、杀死、失败)的各种应用程序,如MapReduce应用、Spark应用、Flink应用等,与点击页面左侧Application栏目红线框Applications链接显示的内容一致。
概述:
web查看:浏览器登录JHS http://node1:19888/
查看已完成MR作业历史信息:
概述:
职责:
收集和检索指定应用程序或者框架的某些信息。例如,Hadoop的MR框架会产生像是Map task数量、Reduce task数量、Counter等信息,应用开发人员可以通过TimelineClient,在Application Master或者Container中将特定的信息发送到Timeline服务器。同时Timeline提供了REST API,用于查询Timeline中存储的信息,并可以通过应用程序或者框架的特定UI进行展示。
在之前此功能只能通过JobHistory Server实现,并且只支持MR Job。随着Timeline服务的出现, JobHistory Server的功能可以看做是Timeline的一部分。
版本介绍:
V1仅限于写入器/读取器和存储的单个实例,无法很好地扩展到小型群集之外,伸缩性不足;
V2还处于alpha状态,实现了读写分离,后端依赖HBase;
官方文档:
http://hadoop.apache.org/docs/r3.1.4/hadoop-yarn/hadoop-yarn-site/TimelineServer.html
http://hadoop.apache.org/docs/r3.1.4/hadoop-yarn/hadoop-yarn-site/TimelineServiceV2.html
web查看:http://node1:8188/
概述:
概述:用户命令主要包括对application、applicationattempt、classpath、container、jar、logs、node、queue和Version的使用。
使用方式:
yarn application [options]
#查看帮助信息
yarn application --help
常用的相关操作:
#查看所有的Application 仅显示状态为SUBMITTED、ACCEPTED、RUNNING应用
yarn application -list
#查看状态为ALL的Application列表
yarn application -list -appStates ALL
#杀死某一个Application
yarn application -kill application_1573364048641_0004
#查看某一个Application的统计报告
yarn application -status application_1614179148030_0001
#查看类型为MAPREDUCE的Application列表
yarn application -list -appTypes MAPREDUCE
#移动一个Application到default队列
yarn application -movetoqueue application_1573364048641_0004 -queue default
#修改一个Application的优先级
yarn application -updatePriority 0 -appId application_1573364048641_0006
使用方法:
yarn jar xxx.jar [mainClass] args...
#通常使用这个命令提交作业到yarn上执行
常用的相关操作:
cd /export/server/hadoop-3.1.4/share/hadoop/mapreduce/
#提交官方自带MR示例 评估圆周率值
yarn jar hadoop-mapreduce-examples-3.1.4.jar pi 2 2
使用方法:
yarn applicationattempt [options]
#attempt可以理解为一个app应用内部的一次尝试执行过程(AM Task)
#applicationattempt指的是AM尝试执行过程
常用的相关操作:
#标记某一次applicationattempt失败
yarn applicationattempt -fail appattempt_1573364048641_0004_000001
#查看某个应用所有的attempt
yarn applicationattempt -list application_1614179148030_0001
#查看具体某一个applicationattemp的报告
yarn applicationattempt -status appattempt_1614179148030_0001_000001
使用方法:
yarn container [options]
#可以根据attemptID操作作业的Container相关信息
常用的相关操作:
#列出指定的attemptID的所有container信息
#attemptID可以从RM WebUI 或者时间轴服务上获取
yarn container -list
#打印容器的状态。
yarn container -status
使用方法:
yarn logs -applicationId [options]
#日志相关的操作命令
常用的相关操作:
#查看应用程序所有的logs 此操作慎重 显示内容较多
yarn logs -applicationId application_1614179148030_0001
#指定显示内容大小
yarn logs -applicationId application_1614939306044_0001 -size 100
#查看应用程序某个container运行所在节点的log
yarn logs -applicationId application_1614179148030_0001 -containerId container_e01_1614179148030_0001_01_000001
使用方法:
yarn queue [options]
#队列相关的操作命令
常用的相关操作:
#查看某个queue的状态 这里指定查看default
yarn queue -status default
使用方法:
yarn node [options]
#集群节点操作命令
常用的相关操作:
#查看yarn所有从节点
yarn node -list -all
#查看yarn所有正在运行的节点
yarn node -list -states RUNNING
#查看yarn所有节点的详情
yarn node -list -showDetails
#查看yarn某一个节点的报告
yarn node -status node1.itcast.cn:44929
使用方法:
yarn version
使用方法:
yarn container [options]
#可以根据attemptID操作作业的Container相关信息
概述:管理命令主要包括对daemonlog、nodemanager、proxymanager、resourcemanager、rmadmin、scmadmin、sharedcachemanager和timelineserver的使用。
使用方法:
yarn resourcemanager [options]
#针对RM的操作命令
常用的相关操作:
#启动某个节点的resourcemanager
yarn resourcemanager
#启动某个节点的nodemanager
yarn nodemanager
#格式化resourcemanager的RMStateStore
yarn resourcemanager -format-state-store
#删除RMStateStore中的Application
yarn resourcemanager -remove-application-from-state-store
使用方法:
#启动某个节点的proxyserver,使用代理的原因是为了减少通过YARN进行基于Web的攻击的可能性。
yarn proxyserver
YARN Proxy Server服务需要提前配置:
yarn.web-proxy.address
node3.itcast.cn:8089
使用方法:
yarn daemonlog -getlevel
yarn daemonlog -setlevel
常用的相关操作:
#查看帮助
yarn daemonlog
#查看RMAppImpl的日志级别
yarn daemonlog -getlevel \
node1.itcast.cn:8088 org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppImpl
#设置RMAppImpl的日志级别
yarn daemonlog -setlevel \
node1.itcast.cn:8088 org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppImpl DEBUG
使用方法:
yarn rmadmin [options]
#这个命令比较重要 使用的也较多
常用的相关操作:
#重新加载mapred-queues配置文件
yarn rmadmin -refreshQueues
#刷新ResourceManager的主机信息
yarn rmadmin -refreshNodes
#在ResourceManager上刷新NodeManager的资源
yarn rmadmin -refreshNodesResources
#刷新超级用户代理组映射
yarn rmadmin -refreshSuperUserGroupsConfiguration
#刷新ACL以管理ResourceManager:
yarn rmadmin -refreshAdminAcls
#获取ResourceManager服务的Active/Standby状态
yarn rmadmin -getAllServiceState
#ResourceManager服务执行健康检查,如果检查失败,RMAdmin工具将使用非零退出码退出。
yarn rmadmin -checkHealth rm1
yarn rmadmin -checkHealth rm2
使用方法:
yarn timelineserver
#启动时间轴服务 通常使用下面的命令启动
yarn-daemon.sh start timelineserver
时间轴服务Web UI端口:8188
使用方法:
#scmadmin是ShareCacheManager(共享缓存管理)的管理客户端
yarn scmadmin
常用的相关操作:
#执行清理任务
yarn scmadmin -runCleanerTask
#先启动SCM服务(SharedCacheManager服务)
yarn-daemon.sh start sharedcachemanager
概述:
资源调度分配:ResourceManager将某个NodeManager上资源分配给任务;
资源隔离:NodeManager需按照要求为任务提供相应的资源,甚至保证这些资源应具有独占性,为任务运行提供基础的保证;
内存资源的多少会会决定任务的生死,如果内存不够,任务可能会运行失败;相比之下,CPU资源则不同,它只会决定任务运行的快慢,不会对生死产生影响。
概述:
YARN允许用户配置每个节点上可用的物理内存资源;
注意,这里是“可用的”,因为一个节点上的内存会被若干个服务共享,比如一部分给YARN,一部分给HDFS,一部分给HBase等,YARN配置的只是自己可以使用的。
默认情况下,YARN采用了线程监控的方法判断任务是否超量使用内存,一旦发现超量,则直接将其杀死。
由于Cgroups对内存的控制缺乏灵活性(即任务任何时刻不能超过内存上限,如果超过,则直接将其杀死或者报OOM),而Java进程在创建瞬间内存将翻倍,之后骤降到正常值,这种情况下,采用线程监控的方式更加灵活(当发现进程树内存瞬间翻倍超过设定值时,可认为是正常现象,不会将任务杀死),因此YARN未提供Cgroups内存隔离机制。
核心配置参数:
#参数一:yarn.nodemanager.resource.memory-mb
该节点上YARN可使用的物理内存总量,默认是8192(MB);
如果设置为-1,并且yarn.nodemanager.resource.detect-hardware-capabilities为true时,将会自动计算操作系统内存进行设置。
#参数二:yarn.nodemanager.vmem-pmem-ratio
任务每使用1MB物理内存,最多可使用虚拟内存量,默认是2.1
#参数三:yarn.nodemanager.pmem-check-enabled
是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是true。
#参数四:yarn.nodemanager.vmem-check-enabled
是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true。
#参数五:yarn.scheduler.minimum-allocation-mb
单个任务可申请的最少物理内存量,默认是1024(MB),如果一个任务申请的物理内存量少于该值,则该对应的值改为这个数。
#参数六:yarn.scheduler.maximum-allocation-mb
单个任务可申请的最多物理内存量,默认是8192(MB)。
概述:
核心配置参数:
#参数一:yarn.nodemanager.resource.cpu-vcores
该节点上YARN可使用的虚拟CPU个数,默认是8,注意,目前推荐将该值设值为与物理CPU核数数目相同。如果你的节点CPU核数不够8个,则需要调减小这个值。
如果设置为-1,并且yarn.nodemanager.resource.detect-hardware-capabilities为true时,将会自动计算操作系统CPU核数进行设置。
#参数二:yarn.scheduler.minimum-allocation-vcores
单个任务可申请的最小虚拟CPU个数,默认是1,如果一个任务申请的CPU个数少于该数,则该对应的值改为这个数。
#参数三:yarn.scheduler.maximum-allocation-vcores
单个任务可申请的最多虚拟CPU个数,默认是4。
概述:
调度器策略:
工作队列:
队列树:
概述:
优势:
坏处:
配置:修改yarn-site.xml即可
yarn.resourcemanager.scheduler.class org.apache.hadoop.yarn.server.resourcemanager.scheduler.fifo.FifoScheduler
概述:
资源划分:
每个队列里的应用以FIFO方式调度,每个队列可设定一定比例的资源最低保证和使用上限防止滥用;
而当一个队列的资源有剩余时,可暂时将剩余资源共享给其他队列。
优势:
层次化的管理,可以更容易、更合理分配和限制资源的使用。
每个队列上都可以设置一个资源的占比,保证每个队列都不会占用整个集群的资源。
每个队列有严格的访问控制。用户只能向自己的队列里面提交任务,而且不能修改或者访问其他队列的任务。
空闲的资源可以被分配给任何队列。
当多个队列出现争用的时候,则会按照权重比例进行平衡。
通过队列的容量限制,多个用户就可以共享同一个集群,同时保证每个队列分配到自己的容量,提高利用率
Yarn支持动态修改调整队列容量、权限等的分配,可以在运行时直接修改
允许用户基于用户或者组去映射一个作业到特定队列。
官方默认配置:
概述:
如何理解公平共享:
队列:
特性优势:
概述:
针对ResourceManager主节点来说,需要设置调度器类型及请求线程数据量。
# 设置YARN使用调度器,默认值:(不同版本YARN,值不一样)
yarn.resourcemanager.scheduler.class
#Apache 版本 YARN ,默认值为容量调度器;
org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
#CDH 版本 YARN ,默认值为公平调度器;
org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler
#ResourceManager处理调度器请求的线程数量,默认50,如果YARN运行任务Job比较多,可以将值调整大一下。
yarn.resourcemanager.scheduler.client.thread-count
NodeManager运行在每台机器上,负责具体的资源管理
yarn.nodemanager.resource.detect-hardware-capabilities
#是否让yarn自己检测硬件进行配置,默认false,如果设置为true,那么就会自动探测NodeManager所在主机的内存和CPU。
yarn.nodemanager.resource.count-logical-processors-as-cores
#是否将虚拟核数当作CPU核数,默认false。
yarn.nodemanager.resource.pcores-vcores-multiplier
#确定如何将physcal核心转换为vcore的乘数。vcore的数量将计算为CPU数量*乘数。
yarn.nodemanager.resource.memory-mb
#NodeManager可以使用内存,默认8192M
yarn.nodemanager.resource.system-reserved-memory-mb
保留给非YARN进程的物理内存量(以MB为单位)。
yarn.nodemanager.resource.cpu-vcores
#NodeManager使用CPU核数,默认8个。
参数:yarn.nodemanager.pmem-check-enabled,是否开启container物理内存检查限制,默认打开;
参数:yarn.nodemanager.vmem-check-enabled,是否开启container虚拟内存检查限制,默认打开;
参数:yarn.nodemanager.vmem-pmem-ratio,虚拟内存物理内存比例,默认2.1;
当应用程序提交运行至YARN上时,无论是AppMaster运行,还是Task(MapReduce框架)或Executor(Spark框架)或TaskManager(Flink框架)运行,NodeManager将资源封装在Contanier容器中,以便管理和监控。
参数一:yarn.scheduler.minimum-allocation-mb
#可申请容器的最少物理内存量,默认是1024(MB),如果一个任务申请的物理内存量少于该值,则该对应的值改为这个数。
参数二:yarn.scheduler.maximum-allocation-mb
#可申请的最多物理内存量,默认是8192(MB)。高于此值的内存请求将引发InvalidResourceRequestException。
参数三:yarn.scheduler.minimum-allocation-vcores
#可申请的最小虚拟CPU个数,默认是1,如果一个任务申请的CPU个数少于该数,则该对应的值改为这个数。
参数四:yarn.scheduler.maximum-allocation-vcores
#单个任务可申请的最多虚拟CPU个数,默认是4。高于此值的请求将引发InvalidResourceRequestException。