更新时间:2025-05-28 GMT+08:00

获取运行中Spark应用的Container日志

场景说明

在运行Spark应用时,获取Container日志对于排查问题、监控应用状态非常重要。运行中Spark应用的Container日志分散在多个节点中,本章节用于说明如何快速获取Spark应用的Container日志。

获取日志

可以通过yarn logs命令获取运行在Yarn上的应用的日志,针对不同的场景,可以使用以下命令获取需要的日志:

  1. 执行如下命令,获取application的完整日志:
    yarn logs --applicationId <appId> -out <outputDir>

    其中,<appId> 为Spark应用的ID,<outputDir>为输出日志路径。例如:

    yarn logs --applicationId application_1574856994802_0016 -out /opt/test

    执行结果:

    1. 如果该application处于运行状态,则无法获取dead状态的container日志。
    2. 如果该application处于结束状态,则可以获取全部归档的container日志。
  2. 执行如下命令,获取指定Container日志:
    yarn logs -applicationId <appId> -containerId <containerId>

    其中,<containerId>为查看日志的Container ID。例如:

    yarn logs -applicationId application_1574856994802_0018 -containerId container_e01_1574856994802_0018_01_000003

    执行结果:

    1. 如果该application处于运行状态,则无法获取dead状态的Container日志。
    2. 如果该application处于结束状态,则可获取任意Container的日志。
  3. 执行如下命令,获取任意状态的Container日志:
    yarn logs -applicationId <appId> -containerId <containerId> -nodeAddress <nodeAddress>

    其中<nodeAddress>为节点IP和端口,可通过以下命令获取:

    yarn node -list -all

    例如:

    yarn logs -applicationId application_1574856994802_0019 -containerId container_e01_1574856994802_0019_01_000003 -nodeAddress 192-168-1-1:8041

    执行结果:可获取任意Container的日志。