Yarn : 日志管理

1.美图

在这里插入图片描述

2.概述

Hadoop作业的用户日志有很多用途。首先,当运行中的MapReduce应用出错时,它们可以用于排查错误,包括应用本身的正确性问题、在集群上运行的竞争条件以及由于硬件或平台bug导致的调试任务1作业失败。其次,可以做日志的历史分析,看看作业中单个任务或工作流程随着时间如何运作。我们甚至可以利用HadoopMapReduce分析Hadoop
MapReduce用户日志定位任何性能问题。

处理应用生成的用户日志在过去是Hadoop的-一大痛处。在第1版Hadoop中,用户日志由TaskTracker留在了各个节点上,在本地节点上管理日志文件对于较长期分析不够充分,用户的访问也有很大不确定性。在应用完成后,YARN通过NodeManager提供的将日志安全地移动到HDFS.上的选项,搞定了这个日志管理问题。

3. YARN上的日志聚合

有了YARN,对于同属于一个应用且运行于一一个给定的NodeManager的所有Container的日志,可以聚合并写到指定文件系统中配置的目录里的一个单独的(可能被压缩)日志文件中。在目前的实现中,一旦应用完成了,我们就可以得到一个应用级的日志目录和与节点一一对应的日志文件,其中包括了运行在该个节点上这个应用的所有Container的日志。

有了第2版的Hadoop,用户可以通话YARN的命令行工具、Web用户界面或直接从文件系统访问这些日志文件。这些日志可能可以比第1版Hadoop保存更长的时间,因为它们位于一个大的分布式文件系统中。Hadoop2不需要把日志切成很小的长度(与日志相同的长度是比较合理的),并有能力保存整个日志更长的时间。而且,在Container运行过程
中,日志是可以写到每个节点上的多个目录的,用于进行有效的负载均衡并提高容错能力。

此外,有-一个AggregatedLogDeletionService服务周期性地删除聚合的日志,目前,它只在MapReduce的JobHistoryServer内运行。

4.Web用户界面

在Web界面上,日志聚合是完全对用户隐藏的。在MapReduce应用程序运行时,用户可以通过ApplicationMaster的用户界面看到日志,它将用户重定向到NodeManager的用户界面上。一旦应用程序结束了,完整的信息就交由MapReduce的JobHistoryServer管理,日志重新透明地提供给用户。

5.命令行访问

除了Web用户界面,命令行工具也可以用来与日志交互。使用选项可以运行如下命令查看:

$ yarn logs

举个例子,你可以简单地通过输人如下命令,就打印一个给出的应用的全部日志:

$ yarn logs -applicationId <application ID>

一个特定Container的日志可以使用如下命令打印:

yarn logs -applicationId <application ID> -containerId <Container ID> \
-nodeAddress <Node Address>

使用命令行工具的最明显的好处是,你可以使用通用的shell 工具来帮助处理文件。

6. 日志的管理和配置

一般日志相关的配置项是yarn.nodemanager.log-dirsyarn.log-aggregation-enable。各个
功能说明如下。

配置项yarn.nodemanager.log-dirs决定了在Container运行时,它的日志保存在节点的什么位置。默认值是${yarm.log.dir}/userlogs。应用程序的本地化日志目录在{yarn.nodemanager.log-dirs }/application ${appid} 下。各个Container的日志目录在这个层级之下的名为container_{$containerld} 的子目录中。

对于MapReduce应用程序,每个Container目录包含了Container 生成的stderr文件、stdin文件和syslog文件。其他框架可以选择输出更多或更少的文件,YARN对文件名和文件数量没有规定。

配置项yarm.log-aggregation-enable指定是否开启日志聚合功能。如果功能关闭了,
NodeManager会本地保存日志(与第1版Hadoop相似)但不会聚合它们。
当开启日志聚合功能时,下面的配置项将会生效。

yarn.nodemanager.remote-app-log-dir :这个目录位于默认的文件系统(通常是HDFS)中,指定NodeManager将会在哪里聚合日志。它不能是本地文件系统,否则服务的守护进程(如历史服务器)将不能服务于聚合的日志。默认是值/tmp/logso

  1. yarm.nodemanager.remote app-log- dir-suffix: 在{yarm.nodemanagerremote app-log-dir}/$ {user}/ {suffix}目录下创建的远程日志目录。默认的后缀值是“ logs
  2. yarn.log-aggregation.retain-seconds:这个配置项定义了等待多长时间后删除聚合后的日志,-1或任意一个负数表示不删除聚合的日志。注意不要将这个配置设置的太小,否则会给分布式文件系统带来负担。
  3. yarn.log- aggregation.retain- check interval-seconds:这个配置决定了隔多久检查- - 次是否保留汇聚的日志。如果这个值设为0或一一个负值,那么这个值将按照聚合日志保留时间的十分之-来计算。跟前面的配置项一样,注意不要将它设的非常小。默认值为-1。
    4.yarn.log.server.url:一旦应用完成了,NodeManager 会将Web用户界面重定向到这个URL,它向用户提供汇聚后的日志。目前,它指向MapReduce专用的作业历史界面。

下面的配置在关闭日志聚合功能时使用。

  1. yarn.nodemanager.log. retain- seconds:在日志聚合关闭的情况下在各个节点上保留用户日志的时间(单位:秒)。默认是10800。
  2. yarn.nodemanager.log deletion-threads-count: 在聚合功能关闭的情况下,当日志的本地保留时间到了,NodeManager 用于清理日志所启动的线程数。

7.日志权限

远程日志目录需要其所有者是${NMUser},权限为1777,并且目录和组属于${NMGroup}(即: NMUser属于这个组)。每个应用级的目录都以770权限来创建,而拥有用户为应用的提交者,拥有组为$ {NMGroup}。这个特性使得应用的提交者可以访问聚合日志为自己使用,${NMUser}可以访问或修改文件用于日志管理。另外,${NMGroup}*应该是一- 个访问受限的组,以防出现访问泄漏。

发布了1184 篇原创文章 · 获赞 455 · 访问量 151万+

猜你喜欢

转载自blog.csdn.net/qq_21383435/article/details/105328520