【问题标题】:Why does my yarn application not have logs even with logging enabled?为什么即使启用了日志记录,我的纱线应用程序也没有日志?
【发布时间】:2017-03-09 02:46:09
【问题描述】:

我在 xml 文件中启用了日志:yarn-site.xml,然后我重新启动了yarn

sudo service hadoop-yarn-resourcemanager restart
sudo service hadoop-yarn-nodemanager restart

我运行了我的应用程序,然后我在yarn application -list 中看到了applicationID。所以,我这样做:yarn logs -applicationId <application ID>,我得到以下信息:

hdfs://<ip address>/var/log/hadoop-yarn/path/to/application/  does not have any log files

我需要更改一些其他配置吗?还是我以错误的方式访问日志?

谢谢。

【问题讨论】:

  • 您的 spark 日志的保留政策是什么?
  • 我不知道.....我怎么知道?
  • yarn-log 目录中是否存在任何日志文件..?

标签: hadoop apache-spark logging hadoop-yarn


【解决方案1】:
yarn application -list

将仅列出已提交接受中的应用程序RUNNING 状态。

日志聚合收集每个容器的日志,只有在应用完成后才将这些日志移动到yarn.nodemanager.remote-app-log-dir配置的目录中。参考yarn.log-aggregation-enable属性here的描述。

因此,该命令列出的applicationId 尚未完成,尚未收集日志。因此尝试访问正在运行的应用程序的日志时的响应

hdfs://<ip address>/var/log/hadoop-yarn/path/to/application/  does not have any log files

应用程序完成后,您可以尝试使用相同的命令yarn logs -applicationId &lt;application ID&gt; 查看日志。

要列出所有已完成应用程序,请使用

yarn application -list -appStates FINISHED

或列出所有应用程序

yarn application -list -appStates ALL

【讨论】:

  • 您能否评论一下在应用程序仍处于预聚合阶段之一时如何查看日志?另外,如果作业有自动重试,我们如何区分运行?
  • 您应该能够在 Application Master UI 中看到正在运行的容器日志。
  • 谢谢你 franklinsijo。如果日志太大而浏览器无法显示它们,我将转到容器的节点,然后查看 $HADOOP_HOME/logs。同样关于我之前的问题,容器ID在重试之间会有所不同
  • 对于每个任务,您应该能够根据它们的尝试 ID 获取日志。
【解决方案2】:

启用日志聚合

yarn-site.xml 文件中启用了日志聚合。 yarn.log-aggregation-enable 属性为正在运行的应用程序启用日志聚合。

<property>
 <name>yarn.log-aggregation-enable</name>
 <value>true</value>
</property>

【讨论】:

  • 以上内容正是我在yarn-site.xml 文件中的内容。我还能做什么?
  • 我还能做什么? @AniMenon
  • 我不确定还有什么问题。只需转到 YARN 资源管理器 UI 并检查您的作业是否在所有作业列表中。
  • hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/…,请参考“NodeManager 配置”的链接
【解决方案3】:

在 hadoop 2.3.2 及更高版本中,您可以使用 yarn-site.xml 中的此配置在运行作业时每小时进行一次日志聚合:

<property>
    <name>yarn.nodemanager.log-aggregation.roll-monitoring-interval-seconds</name>
    <value>3600</value>
</property>

更多详情请参见:https://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.3.2/bk_yarn_resource_mgt/content/ref-375ff479-e530-46d8-9f96-8b52dadb5183.1.html

【讨论】:

  • 呵呵很有趣。很好
  • 我已经配置了这个参数,但仍然没有运行作业的日志。
【解决方案4】:

它可能是由另一个 appOwner 保存的。您可以尝试在命令中指定应用程序所有者:

纱线日志 -appOwner .. -application_id ..

【讨论】:

    【解决方案5】:

    根本原因:启用日志聚合后,每个用户的应用程序日志将默认放置在目录 hdfs:///app-logs//logs/ 中。默认情况下,只有提交作业的用户和 hadoop 组的成员才能读取日志文件。在下面的示例目录列表中,您可以看到权限为 770。除了 hadoop 组的所有者和成员之外,任何人都无法访问。

    [root@mycluster ~]$ hdfs dfs -ls /app-logs
    
    Found 3 items
    
    drwxrwx---    - hive      hadoop    0 2017-03-10 15:33 /app-logs/hive
    
    drwxrwx---    - user1     hadoop          0 2017-03-10 15:37 /app-logs/user1
    
    drwxrwx---    - spark     hadoop          0 2017-03-10 15:39 /app-logs/spark
    

    解决方案:上述消息可能具有欺骗性,并不一定表示未启用日志聚合。要获取应用程序的纱线日志,必须以提交应用程序的用户身份执行“纱线日志”命令。在下面的示例中,应用程序由 user1 提交。如果我们与用户 'user1' 执行相同的命令,如果日志聚合已启用,我们应该得到以下输出。

    yarn logs -applicationId application_1473860344791_0001
    16/09/19 23:10:33 INFO impl.TimelineClientImpl: Timeline service address: http://mycluster.somedomain.com:8188/ws/v1/timeline/
    16/09/19 23:10:33 INFO client.RMProxy: Connecting to ResourceManager at mycluster.somedomain.com/192.168.1.89:8050
    16/09/19 23:10:34 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library
    16/09/19 23:10:34 INFO compress.CodecPool: Got brand-new decompressor [.deflate]
    Container: container_e03_1473860344791_0001_01_000001 on mycluster.somedomain.com_45454
    LogType:stderr
    Log Upload Time:Wed Sep 14 09:44:15 -0400 2016
    LogLength:0
    Log Contents:
    End of LogType:stderr
    

    参考:以下文档描述了如何使用日志聚合来收集长期运行的 YARN 应用程序的日志。 http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.5.0/bk_yarn-resource-management/content/ch_log_a...

    【讨论】:

      猜你喜欢
      • 2021-10-25
      • 2018-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多