一、WebUI 使用
与HDFS一样,YARN也提供了一个WebUI服务,可以使用YARN Web用户界面监视群集、队列、应用程序、服务、流活动和节点信息。还可以查看集群详细配置的信息,检查各种应用程序和服务的日志。
1.1 首页
浏览器输入http://node2.itcast.cn:8088/访问YARN WebUI服务,页面打开后,以列表形式展示已经运行完成的各种应用程序,如MapReduce应用、Spark应用、Flink应用等,与点击页面左侧Application栏目红线框Applications链接显示的内容一致。
1.2 应用程序分析
当点击任意一个应用程序时,会打开一个新页面,并展示这个应用程序的运行信息。以MR应用为例,如果应用程序正在运行,打开的页面如图10-1-2所示;如果应用程序已经运行完成,打开的页面如下图所示。
- 正在运行的MR应用程序
- 运行完成的MR应用程序
二、HistoryServer 服务
YARN中提供了一个叫做JobHistoryServer的守护进程,它属于YARN集群的一项系统服务,仅存储已经运行完成的MapReduce应用程序的作业历史信息,并不会存储其他类型(如Spark、Flink等)应用程序的作业历史信息。
- 当启用JobHistoryServer服务时,仍需要开启日志聚合功能,否则每个Container的运行日志是存储在NodeManager节点本地,查看日志时需要访问各个NodeManager节点,不利于统一管理和分析。
- 当开启日志聚合功能后AM会自动收集每个Container的日志,并在应用程序完成后将这些日志移动到文件系统,例如HDFS。然后通过JHS的WebUI服务来提供用户使用和应用恢复。
2.1 启用 JHS 服务
在【mapred-site.xml】文件中配置指定JobHistoryServer服务地址和端口号,具体操作如下。
- 编辑文件:
[root@node1 ~]# vim /export/server/hadoop/etc/hadoop/mapred-site.xml |
- 添加属性配置:
<property> <name>mapreduce.jobhistory.address</name> <value>node1.itcast.cn:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>node1.itcast.cn:19888</value> </property> <property> <name>mapreduce.jobhistory.intermediate-done-dir</name> <value>/mr-history/intermediate</value> </property> <property> <name>mapreduce.jobhistory.done-dir</name> <value>/mr-history/done</value> </property> |
- 同步mapred-site.xml文件到集群其他机器,命令如下:
[root@node1 ~]# cd /export/server/hadoop/etc/hadoop [root@node1 hadoop]# scp -r mapred-site.xml root@node2.itcast.cn:$PWD [root@node1 hadoop]# scp -r mapred-site.xml root@node3.itcast.cn:$PWD |
2.2 启用日志聚合
首先配置运行在YARN上应用的日志聚集功能,当应用运行完成,将日志相关信息上传至HDFS文件系统,编辑文件【yarn-site.xml】和添加属性配置。
- 编辑文件:
[root@node1 ~]# vim /export/server/hadoop/etc/hadoop/yarn-site.xml |
- 添加属性配置:
<property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <property> <name>yarn.nodemanager.remote-app-log-dir</name> <value>/app-logs</value> </property> <property> <name>yarn.log.server.url</name> <value>http://node1.itcast.cn:19888/jobhistory/logs</value> </property> |
- 同步yarn-site.xml文件到集群其他机器,命令如下:
[root@node1 ~]# cd /export/server/hadoop/etc/hadoop [root@node1 hadoop]# scp -r yarn-site.xml root@node2.itcast.cn:$PWD [root@node1 hadoop]# scp -r yarn-site.xml root@node3.itcast.cn:$PWD |
2.3 启动 JHS 服务
在上述配置中指定的JHS服务位于【node1.itcast.cn】节点上,在【node1.itcast.cn】节点中启动JobHistoryServer服务。
- 启动命令如下:
[root@node1 ~]# mr-jobhistory-daemon.sh start historyserver |
- 或者如下命令:
[root@node1 ~]# mapred --daemon start historyserver |
- 浏览器查看:http://node1.itcast.cn:19888/jobhistory
2.4 JHS 管理 MR 应用
当提交运行MapReduce程序在YARN上运行完成以后,将应用运行日志数据上传到HDFS上,此时JobHistoryServer服务可以从HDFS上读取运行信息,在WebUI进行展示,具体流程如下。
2.4.1 提交MR应用程序
使用yarn jar提交运行官方自带词频统计WordCount程序到YARN上运行,命令如下:
[root@node1 ~]# yarn jar \ /export/server/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.4.jar \ wordcount \ /datas/input.data /datas/output |
运行MR程序显示日志信息:
2021-02-25 19:13:43,059 INFO client.ConfiguredRMFailoverProxyProvider: Failing over to rm2 2021-02-25 19:13:43,278 INFO mapreduce.JobResourceUploader: Disabling Erasure Coding for path: /tmp/hadoop-yarn/staging/root/.staging/job_1614243659295_0002 2021-02-25 19:13:43,518 INFO input.FileInputFormat: Total input files to process : 1 2021-02-25 19:13:43,619 INFO mapreduce.JobSubmitter: number of splits:1 2021-02-25 19:13:43,816 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1614243659295_0002 2021-02-25 19:13:43,818 INFO mapreduce.JobSubmitter: Executing with tokens: [] 2021-02-25 19:13:44,007 INFO conf.Configuration: resource-types.xml not found 2021-02-25 19:13:44,008 INFO resource.ResourceUtils: Unable to find 'resource-types.xml'. 2021-02-25 19:13:44,077 INFO impl.YarnClientImpl: Submitted application application_1614243659295_0002 2021-02-25 19:13:44,136 INFO mapreduce.Job: The url to track the job: http://node3.itcast.cn:8088/proxy/application_1614243659295_0002/ 2021-02-25 19:13:44,137 INFO mapreduce.Job: Running job: job_1614243659295_0002 2021-02-25 19:13:51,321 INFO mapreduce.Job: Job job_1614243659295_0002 running in uber mode : false 2021-02-25 19:13:51,322 INFO mapreduce.Job: map 0% reduce 0% 2021-02-25 19:13:57,474 INFO mapreduce.Job: map 100% reduce 0% 2021-02-25 19:14:02,544 INFO mapreduce.Job: map 100% reduce 100% 2021-02-25 19:14:03,564 INFO mapreduce.Job: Job job_1614243659295_0002 completed successfully 2021-02-25 19:14:03,687 INFO mapreduce.Job: Counters: 53 File System Counters FILE: Number of bytes read=65 FILE: Number of bytes written=446779 FILE: Number of read operations=0 FILE: Number of large read operations=0 FILE: Number of write operations=0 HDFS: Number of bytes read=205 HDFS: Number of bytes written=39 HDFS: Number of read operations=8 HDFS: Number of large read operations=0 HDFS: Number of write operations=2 Job Counters Launched map tasks=1 Launched reduce tasks=1 Data-local map tasks=1 Total time spent by all maps in occupied slots (ms)=3439 Total time spent by all reduces in occupied slots (ms)=3085 Total time spent by all map tasks (ms)=3439 Total time spent by all reduce tasks (ms)=3085 Total vcore-milliseconds taken by all map tasks=3439 Total vcore-milliseconds taken by all reduce tasks=3085 Total megabyte-milliseconds taken by all map tasks=3521536 Total megabyte-milliseconds taken by all reduce tasks=3159040 Map-Reduce Framework Map input records=3 Map output records=16 Map output bytes=160 Map output materialized bytes=65 Input split bytes=109 Combine input records=16 Combine output records=5 Reduce input groups=5 Reduce shuffle bytes=65 Reduce input records=5 Reduce output records=5 Spilled Records=10 Shuffled Maps =1 Failed Shuffles=0 Merged Map outputs=1 GC time elapsed (ms)=100 CPU time spent (ms)=2170 Physical memory (bytes) snapshot=506044416 Virtual memory (bytes) snapshot=5578981376 Total committed heap usage (bytes)=360185856 Peak Map Physical memory (bytes)=280317952 Peak Map Virtual memory (bytes)=2785366016 Peak Reduce Physical memory (bytes)=225726464 Peak Reduce Virtual memory (bytes)=2793615360 Shuffle Errors BAD_ID=0 CONNECTION=0 IO_ERROR=0 WRONG_LENGTH=0 WRONG_MAP=0 WRONG_REDUCE=0 File Input Format Counters Bytes Read=96 File Output Format Counters Bytes Written=39 |
2.4.2 MR运行历史信息
MR应用程序在运行时,是通过AM(MRAppMaster类)将日志写到HDFS中,会生成.jhist、.summary和_conf.xml文件。其中.jhist文件是MR程序的计数信息,.summary文件是作业的摘要信息,_conf.xml文件是MR程序的配置信息。
- MR应用程序启动时的资源信息
MR应用程序启动时,会把作业信息存储到${yarn.app.mapreduce.am.staging-dir}/${user}/.staging/${job_id}目录下。
yarn.app.mapreduce.am.staging-dir:/tmp/hadoop-yarn/staging(默认) |
- MR应用程序运行完成时生成的信息
MR应用程序运行完成后,作业信息会被临时移动到${mapreduce.jobhistory.intermediate-done-dir}/${user}目录下。
mapreduce.jobhistory.intermediate-done-dir:/mr-history/intermediate(配置) |
- MR应用程序最终的作业信息
等待${mapreduce.jobhistory.move.interval-ms}配置项的值(默认180000毫秒=3分钟)后,会把${mapreduce.jobhistory.intermediate-done-dir}/${user}下的作业数据移动到${mapreduce.jobhistory.done-dir}/${year}/${month}/${day}/${serialPart}目录下。此时.summary文件会被删除,因为.jhist文件提供了更详细的作业历史信息。
JHS服务中的作业历史信息不是永久存储的,在默认情况下,作业历史清理程序默认按照86400000毫秒(一天)的频率去检查要删除的文件,只有在文件早于mapreduce.jobhistory.max-age-ms(一天)时才进行删除。JHS的历史文件的移动和删除操作由HistoryFileManager类完成。
mapreduce.jobhistory.intermediate-done-dir:/mr-history/intermediate(配置) mapreduce.jobhistory.intermediate-done-dir:/mr-history/done(配置) mapreduce.jobhistory.cleaner.enable: true(默认) mapreduce.jobhistory.cleaner.interval-ms: 86400000(1天) mapreduce.jobhistory.max-age-ms: 86400000(1天) |
2.4.3 JHS 运行流程
- 客户端提交MR应用程序到RM;
- 在/tmp/logs/<user>/logs/application_timestamp_xxxx中创建应用程序文件夹;
- MR作业在群集上的YARN中运行;
- MR作业完成,在提交作业的作业客户上报告作业计数器;
- 将计数器信息(.jhist文件)和job_conf.xml文件写入/user/history/done_intermediate/<user>/job_timestamp_xxxx
- 然后将.jist文件和job_conf.xml从/user/history/done_intermediate/<user>/移动到/user/history/done目录下;
- 来自每个NM的Container日志汇总到/tmp/logs/<用户ID>/logs/application_timestamp_xxxx;
2.5 JHS WebUI
JobHistoryServer服务WebUI界面相关说明:
2.5.1 首页
浏览器输入:http://node1.itcast.cn:19888 访问JHS服务,页面打开后,以列表形式展示已经运行完成的MR应用程序,与点击页面左侧Application栏目红线框jobs链接显示的内容一致。
2.5.2 JHS 构建说明
浏览器输入 http://node1.itcast.cn:19888/jobhistory/about 地址或者在点击页面左侧Application栏目下红线框about链接后会展示JHS服务的构建版本信息和启动时间。
2.5.3 MR应用程序查看
在JHS作业列表点击任意一个作业:
作业信息查看:
2.5.4 JHS 配置
浏览器输入 http://node1.itcast.cn:19888/conf 或点击页面左侧Tools栏目中的红线框configuration链接会打开JHS的所需配置页面,在配置页面中,主要有集群自定义配置(core-site.xml、hdfs-site.xml、yarn-site.xml和mapred-site.xml)和集群默认配置(core-default.xml、hdfs-default.xml、yarn-default.xml和mapred-default.xml)两种。配置页面中的配置项较多,截图为部分展示。
2.5.5 JHS 本地日志
浏览器输入 http://node1.itcast.cn:19888/logs/ 地址或点击页面左侧Tools栏目中的红线框local logs链接会打开JHS服务的所在节点的log文件列表页面。
2.5.6 JHS 堆栈信息
浏览日输入 http://node1.itcast.cn:19888/stacks 地址或点击页面左侧Tools栏目中的红线框Server stacks链接会打开JHS服务的堆栈转储信息。stacks功能会统计JHS服务的后台线程数、每个线程的运行状态和详情。这些线程有MoveIntermediateToDone线程、JHS的10020 RPC线程、JHS的10033 Admin接口线程、HDFS的StatisticsDataReferenceCleaner线程、JHS服务度量系统的计时器线程、DN的Socket输入流缓存线程和JvmPauseMonitor线程等。
三、TimelineServer 服务
由于Job History Server仅对MapReduce应用程序提供历史信息支持,其他应用程序的历史信息需要分别提供单独的HistoryServer才能查询和检索。例如Spark的Application需要通过Spark自己提供的org.apache.spark.deploy.history.HistoryServer来解决应用历史信息。
为了解决这个问题,YARN新增了Timeline Server组件,以通用的方式存储和检索应用程序当前和历史信息。
到目前,有V1、V1.5和V2共三个版本,V1仅限于写入器/读取器和存储的单个实例,无法很好地扩展到小型群集之外;V2还处于alpha状态,所以在本章以V1.5进行讲解。
版本 | 说明 |
V1 | 基于LevelDB实现。 |
V1.5 | 在V1的基础上改进了扩展性。 |
V2 | 1.使用更具扩展性的分布式写入器体系结构和可扩展的后端存储。 2.将数据的收集(写入)与数据的提供(读取)分开。它使用分布式收集器,每个YARN应用程序实质上是一个收集器。读取器是专用于通过REST API服务查询的单独实例。 3.使用HBase作为主要的后备存储,因为Apache HBase可以很好地扩展到较大的大小,同时保持良好的读写响应时间。 4.支持在流级别汇总指标。 |
官方文档:
Apache Hadoop 3.1.4 – The YARN Timeline Server
Apache Hadoop 3.1.4 – The YARN Timeline Service v.2
YARN Timeline Service v.2 服务架构图如下:
3.1 启用 Timeline 服务
在【yarn-site.xml】配置文件中添加如下属性,启动Timeline Server服务功能:
<property> <name>yarn.timeline-service.enabled</name> <value>true</value> </property> <property> <name>yarn.timeline-service.hostname</name> <value>node2.itcast.cn</value> <description>设置YARN Timeline服务地址</description> </property> <property> <name>yarn.timeline-service.address</name> <value>node2.itcast.cn:10200</value> <description>设置YARN Timeline服务启动RPC服务器的地址,默认端口10200</description> </property> <property> <name>yarn.timeline-service.webapp.address</name> <value>node2.itcast.cn:8188</value> <description>设置YARN Timeline服务WebUI地址</description> </property> <property> <name>yarn.resourcemanager.system-metrics-publisher.enabled</name> <value>true</value> <description>设置RM是否发布信息到Timeline服务器</description> </property> <property> <name>yarn.timeline-service.generic-application-history.enabled</name> <value>true</value> <description>设置是否Timelinehistory-servic中获取常规信息,如果为否,则是通过RM获取</description> </property> |
同步yarn-site.xml文件到集群其他机器,命令如下:
[root@node1 ~]# cd /export/server/hadoop/etc/hadoop [root@node1 hadoop]# scp -r yarn-site.xml root@node2.itcast.cn:$PWD [root@node1 hadoop]# scp -r yarn-site.xml root@node3.itcast.cn:$PWD |
重启YARN服务,命令如下所示:
[root@node2 ~]# stop-yarn.sh [root@node2 ~]# start-yarn.sh |
3.2 启动 Timeline 服务
在上述配置中指定的Timeline服务位于【node2.itcast.cn】节点上,需要在【node2.itcast.cn】节点的shell客户端中启动,如果在非【node2.itcast.cn】节点上启动时会报错。
启动命令如下:
[root@node2 ~]# yarn --daemon start timelineserver |
在浏览器中输入:http://node2.itcast.cn:8188/applicationhistory