【Yarn】YARN 聚合日志配置

在这里插入图片描述

1.概述

转载:YARN 聚合日志配置

上一篇文章:【Yarn】Yarn : 日志管理

MapReduce 是在各个机器上运行的, 在运行过程中产生的日志存在于各个机器上,为了能够统一查看各个机器的运行日志,将日志集中存放在 HDFS 上, 这个过程就是日志聚集。

如果打开了日志聚合的选项,即yarn.log-aggregation-enable,container的日志会拷贝到hdfs上去,并从机器中删除。可以使用yarn logs -applicationId 命令,来查看日志yarn logs命令,会打印出application对应的所有container的日志出来,当然,因为日志是在hdfs上的,我们自然也可以通过hdfs的命令行来直接从hdfs中查看日志,日志在hdfs中的目录,可以通过查看yarn.nodemanager.remote-app-log-dir和yarn.nodemanager.remote-app-log-dir-suffix属性来获知。

2.是否开启日志聚合区别

如果 打开日志聚合(使用 yarn.log-aggregation-enable配置),容器日志将复制到HDFS中,而本地计算机上的日志将被删除。查看日志可以通过 yarn logs 命令从群集中的任何位置查看。

yarn logs -applicationId <app ID>
  1. 该命令会将指定的应用程序日志从所有的容器中打印所有的日志内容。您也可以使用HDFS shell 或API直接在HDFS中查看容器日志文件。

  2. 他们所在的目录参考YARN配置(yarn.nodemanager.remote-app-log-dir和 yarn.nodemanager.remote-app-log-dir-suffix)

  3. 日志也可以通过Spark Web UI中的Executors 标签页查看。你需要运行spark 历史服务器和MapReduce历史服务器,并在yarn-site.xml正确配置yarn.log.server.url。

  4. Spark历史记录服务器UI上的日志URL会将您重定向到MapReduce历史记录服务器以显示聚合日志。

如果 日志聚合未打开 时,日志将保存在每台计算机上的本地YARN_APP_LOGS_DIR,通常配置为 /tmp/logs 或 $HADOOP_HOME/logs/userlogs,取决于Hadoop版本和安装配置。

  1. 查看容器的日志需要转到包含它们的主机并查看此目录。子目录按应用程序ID和容器ID组织日志文件。日志也可以在执行程序选项卡下的Spark Web UI上使用,并且不需要运行MapReduce历史记录服务器。

  2. 要查看每个容器的启动环境,请增加 yarn.nodemanager.delete.debug-delay-sec 一个较大的值(例如36000),然后通过 yarn.nodemanager.local-dirs 在启动容器的节点上访问应用程序缓存。

  3. 该目录包含启动脚本,JAR以及用于启动每个容器的所有环境变量。这个过程特别适用于调试类路径问题。
    (请注意,启用此功能需要具有群集设置的管理权限并重新启动所有节点管理器。因此,这不适用于托管群集)。

3.日志参数

yarn-site.xml中有几个配置项与日志的保存与删除,本地job执行文件的保留与删除有关。若不做配置,日志和job.jar会在application执行结束后被直接删除掉。

yarn.log-aggregation-enable      true                  执行结束后收集(聚合)各个container本地的日志
yarn.nodemanager.remote-app-log-dir  /app-logs          聚合日志后在hdfs的存放地址
yarn.nodemanager.remote-app-log-dir-suffix  logs         聚合日志存放的后缀,存放地址由 ${remote-app-log-dir}/${user}/{thisParam}构成
yarn.log-aggregation.retain-seconds 2592000            聚合日志在hdfs上的保留时间,以秒为单位,到时后被删除,保留30天后删除 2592000=30 天

yarn.log.server.url http://hostname:19888/jobhistory/logs    log server的地址  
yarn.nodemanager.local-dirs /hadoop/yarn/local          存放 application 运行的本地文件(计算过程中的中间数据存储)的根目录,执行完毕后删除,按用户名存储 
yarn.nodemanager.log-dirs /hadoop/yarn/log            存放 container 运行的本地日志的根目录,执行完毕后删除,按用户名存储 
yarn.nodemanager.log.retain-seconds 604800            本地日志的保留时间,只有aggregation没有enable时才生效 
yarn.nodemanager.delete.debug-delay-sec 600            yarn 的 DeletionService 在任务结束多长时间后,删除本地化的日志(yarn.nodemanager.local-dirs)和container的运行日志(yarn.nodemanager.log-dirs)。 这个时间最好设置的大一点。

4.日志聚合配置文件

其中executor日志分为运行时日志以及结束日志,两种日志分别存放于不同的位置,运行时候的日志文件存放于yarn.nodemanager.log−dirs/{ApplicationID}

要实现日志聚集,只需要在yarn-site.xml中配置如下几个参数:
(1) yarn.log-aggregation-enable
参数解释:是否启用日志聚集功能。
默认值:false2) yarn.log-aggregation.retain-seconds
参数解释:在HDFS上聚集的日志最多保存多长时间。
默认值:-13) yarn.log-aggregation.retain-check-interval-seconds
参数解释:多长时间检查一次日志,并将满足条件的删除,如果是0或者负数,则为上一个值的1/10。
默认值:-14) yarn.nodemanager.remote-app-log-dir
参数解释:当应用程序运行结束后,日志被转移到的HDFS目录(启用日志聚集功能时有效)。
默认值:/tmp/logs

<property>
    <!--开启日志聚合-->
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
</property>
<property>
    <!--日志聚合hdfs存储路径-->
    <name>yarn.nodemanager.remote-app-log-dir</name>
    <value>/tmp/logs</value>
</property>
<property>
    <!--hdfs上的日志保留时间-->
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
</property>

<property>
    <!--应用执行时存储路径-->
    <name>yarn.nodemanager.log-dirs</name>
    <value>file:/mnt/ddb/2/hadoop/nm</value>
</property>

<property>
    <!--应用执行完日志保留的时间,默认0,即执行完立刻删除-->
    <name>yarn.nodemanager.delete.debug-delay-sec</name>
    <value>0</value>
</property>

运行时候的executor日志存放于:

root@hadoop01:/opt/hadoop-2.7.7/hadoop/nm/application_1471515078641_0007
# ls
container_1471515078641_0007_01_000001 
container_1471515078641_0007_01_000002  
container_1471515078641_0007_01_000003

注:其中container_1471515078641_0007_01_000001为RM为application_1471515078641_0007分配的第一个container,即AM所在的container,第一个container都是运来启动AM的,containerID形式为,container_APPID_01_000001,你在RM日志文件里面根据container_APPID搜索即可看到为该APPID分配的container的分布情况及生命周期。

运行结束以后日志会聚合到HDFS上面去,运行结束的日志文件存入于/tmp/logs/${user}/logs

drwxrwx---   - root supergroup          0 2016-08-18 18:29 /tmp/logs/root/logs/application_1471515078641_0002
drwxrwx---   - root supergroup          0 2016-08-18 19:10 /tmp/logs/root/logs/application_1471515078641_0003
drwxrwx---   - root supergroup          0 2016-08-18 19:17 /tmp/logs/root/logs/application_1471515078641_0004

运行结束后,可以通过以下命令查看日志:

yarn logs --applicationId <id>

5.通过webUI查看yarn上任务聚合日志

1.配置文件上增加配置信息yarn-site.xml

<!-- 日志聚集功能使能 -->
<property>
  <name>yarn.log-aggregation-enable</name>
  <value>true</value>
</property>
<!-- 日志保留时间设置7天 -->
<property>
  <name>yarn.log-aggregation.retain-seconds</name>
  <value>604800</value>
</property>
<property>
    <name>yarn.nodemanager.remote-app-log-dir</name>
    <value>/tmp/logs</value>
</property>

<property>
    <name>yarn.log.server.url</name>
    <value>http://100.86.40.113:19888/jobhistory/logs/</value>
</property>
<property> 
    <name>yarn.nodemanager.vmem-check-enabled</name> 
    <value>false</value> 
</property> 
<property>
  <name>yarn.log-aggregation-enable</name>
  <value>true</value>
</property>
<property>
  <name>yarn.log-aggregation.retain-seconds</name>
  <value>106800</value>
</property>
<property>
          <name>mapreduce.jobhistory.address</name>
        <value>100.86.40.113:10020</value>
</property>
<property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>100.86.40.113:19888</value>
</property>


mapred-site.xml

<property>
    <!-- 表示提交到hadoop中的任务采用yarn来运行,要是已经有该配置则无需重复配置 -->
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>
<property>
  <!--日志监控服务的地址,一般填写为nodenode机器地址 -->
    <name>mapreduce.jobhistroy.address</name>
    <value>100.86.40.113:10020</value>
</property>
<property>
    <name>mapreduce.jobhistroy.webapp.address</name>
    <value>100.86.40.113:19888</value>
</property>


2.启动JobHistoryServer

# hadoop的bin目录下执行
sbin/mr-jobhistory-daemon.sh start historyserver

3.访问yarnweb页面查看日志

在这里插入图片描述

<think>好的,我现在需要解决用户关于如何使用YARN查看历史日志的问题。用户提到了yarn logs命令,并且引用了一些相关的资料,我需要结合这些引用来整理出一个清晰的步骤指南。 首先,用户提供的引用中有提到使用yarn logs -applicationId来查看运行日志,例如引用[1]中的命令:yarn logs -applicationId application_1660378737778_0001。这说明基本命令结构是yarn logs加上应用程序ID。这是关键的第一步,用户需要知道如何获取这个应用程序ID。 接下来,引用[4]提到可以通过YARN的Web界面(比如hadoop103:8088)查看作业状态,或者使用命令行工具。用户可能需要先找到对应的应用程序ID,这时候可以使用yarn application -list命令,如引用[2]中的例子,结合grep来筛选特定的作业。例如,yarn application -list | grep <word> 可以查找包含特定关键词的作业,这样用户就能快速找到需要的应用程序ID。 然后是关于日志文件的存储位置。引用[3]指出物理日志路径在/yarn/container-logs目录下,通常在某个节点(如cdh01)上。不过用户可能更关心如何通过命令行访问这些日志,而不是直接去文件系统查找。这时候,yarn logs命令应该已经能够获取这些日志内容,但用户可能需要了解参数来调整输出,比如-containerId和-nodeAddress,这在帮助文档中可能有说明,需要进一步确认。 用户的问题还包括参数说明和文件位置。根据引用[3],日志存储在HDFS的/yarn/container-logs路径下,每个应用程序的容器日志会分布在不同节点。不过,使用yarn logs命令时,用户不需要手动去各个节点查找,因为该命令会自动聚合日志吗?或者YARN日志聚合功能是否开启会影响日志的存储位置和访问方式。如果聚合未开启,日志可能分散在各个NodeManager的本地目录,而开启后则存储在HDFS中。因此,需要提醒用户确认集群是否启用了日志聚合,这可能影响日志的查看方式。 此外,引用[4]提到可以通过Yarn命令查看任务运行情况,比如提交WordCount作业后用命令监控。这里可能需要补充说明如何启用日志聚合,因为默认情况下可能未开启,导致无法通过yarn logs获取历史日志。例如,需要配置yarn.log-aggregation-enable为true,并且设置yarn.nodemanager.remote-app-log-dir为HDFS路径,这样日志才会被聚合HDFS,之后才能通过yarn logs查看。 用户可能需要了解如何查看特定容器的日志,这时候-containerId和-nodeAddress参数就派上用场了。例如,如果用户知道某个容器运行在特定节点上,可以使用这些参数直接获取日志。但首先需要知道容器ID和节点地址,这可能需要通过ResourceManager的Web界面或yarn application -status <applicationId>命令来获取。 总结步骤应该是: 1. 获取应用程序ID:使用yarn application -list或Web界面。 2. 使用yarn logs -applicationId <ID>查看聚合后的日志(如果启用聚合)。 3. 若需要特定容器日志,使用-containerId和-nodeAddress参数。 4. 确认日志聚合是否启用,否则需要到各节点本地目录查找。 同时,参数说明需要包括常用的选项,比如-show_container_log_info显示容器信息,-appOwner指定用户等。另外,日志保存时间可能受集群配置限制,用户需注意日志保留策略。 最后,用户可能需要示例命令和注意事项,比如日志文件的位置和权限问题,以及如何配置日志聚合。需要将这些信息整理成清晰的步骤,并引用相关的参考资料,确保用户能够一步步操作。</think>### 如何用YARN查看历史日志的方法及命令说明 #### 1. 查看历史日志的核心命令 使用`yarn logs`命令可直接查看指定应用程序的聚合日志,基本格式为: ```bash yarn logs -applicationId <application_id> ``` 例如: ```bash yarn logs -applicationId application_1660378737778_0001 ``` 此命令会输出该应用程序所有容器的汇总日志(需集群启用日志聚合功能)[^1][^4]。 #### 2. 关键参数说明 | 参数 | 作用 | 示例 | |------|------|------| | `-applicationId` | 指定应用程序ID(必填) | `-applicationId application_xxx` | | `-containerId` | 过滤特定容器日志 | `-containerId container_xxx` | | `-nodeAddress` | 指定容器所在节点 | `-nodeAddress hadoop103:8041` | | `-appOwner` | 指定应用程序所有者 | `-appOwner user1` | | `-show_container_log_info` | 显示容器日志元信息 | 添加该参数直接使用 | #### 3. 操作步骤 **步骤1:获取应用程序ID** - 通过Web界面访问`http://<resourcemanager_host>:8088`,在YARN任务列表中查找目标应用ID。 - 或通过命令行筛选: ```bash yarn application -list | grep "关键词" ``` 例如查找包含"wordcount"的作业[^2][^4]。 **步骤2:查看完整日志** ```bash yarn logs -applicationId application_xxx ``` **步骤3(可选):查看特定容器日志** 1. 通过Web界面进入应用程序详情页,找到容器ID和所在节点。 2. 执行命令: ```bash yarn logs -applicationId application_xxx -containerId container_xxx -nodeAddress hadoop103:8041 ``` #### 4. 日志文件存储位置 - **聚合日志路径**:若集群启用日志聚合日志存储在HDFS目录 `/yarn/container-logs` 下,按应用ID和容器ID组织[^3]。 - **本地日志路径**:未启用聚合时,日志分散在各NodeManager节点的本地目录(默认路径为 `$YARN_HOME/logs/userlogs`)。 #### 5. 注意事项 - **日志聚合要求**:必须配置 `yarn.log-aggregation-enable=true` 且作业完成后聚合需一定时间。 - **权限问题**:需具有应用程序所有者权限或YARN管理员权限才能查看完整日志- **日志保留时间**:由集群配置 `yarn.log-aggregation.retain-seconds` 决定,超时后自动删除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值