【问题标题】:Where are logs in Spark on YARN?Spark on YARN 的日志在哪里?
【发布时间】:2014-05-28 07:53:09
【问题描述】:

我是新来的火花。现在我可以在 yarn (2.0.0-cdh4.2.1) 上运行 spark 0.9.1。但是执行后没有日志。

以下命令用于运行 spark 示例。但是在历史服务器中找不到日志,就像在正常的 MapReduce 作业中一样。

SPARK_JAR=./assembly/target/scala-2.10/spark-assembly-0.9.1-hadoop2.0.0-cdh4.2.1.jar \
./bin/spark-class org.apache.spark.deploy.yarn.Client --jar ./spark-example-1.0.0.jar \
--class SimpleApp --args yarn-standalone  --num-workers 3 --master-memory 1g \
--worker-memory 1g --worker-cores 1

在哪里可以找到日志/stderr/stdout?

有什么地方可以设置配置吗? 我确实找到了控制台的输出:

14/04/14 18:51:52 INFO 客户端:ApplicationMaster 的命令:$JAVA_HOME/bin/java -server -Xmx640m -Djava.io.tmpdir=$PWD/tmp org.apache.spark.deploy。 yarn.ApplicationMaster --class SimpleApp --jar ./spark-example-1.0.0.jar --args 'yarn-standalone' --worker-memory 1024 --worker-cores 1 --num-workers 3 1> /stdout 2> /stderr

在这一行,注意1> $LOG_DIR/stdout 2> $LOG_DIR/stderr

LOG_DIR可以在哪里设置?

【问题讨论】:

    标签: hadoop logging apache-spark cloudera hadoop-yarn


    【解决方案1】:

    可以通过命令访问日志

    yarn logs -applicationId <application ID> [OPTIONS]

    一般选项是:

    • appOwner <Application Owner> - AppOwner(如果未指定,则假定为当前用户)
    • containerId <Container ID> - ContainerId(如果节点必须指定 地址已指定)
    • nodeAddress <Node Address> - 格式为 nodename:port 的节点地址(如果指定了容器 ID,则必须指定)

    例子:

    yarn logs -applicationId application_1414530900704_0003                                      
    yarn logs -applicationId application_1414530900704_0003 myuserid
    
    // the user ids are different
    yarn logs -applicationId <appid> -appOwner <userid>
    

    【讨论】:

    • 只有当yarn.log-aggregation-enabletrue in yarn-site.xml 并且应用程序已经完成时,这才是正确的。
    • nish1013 试试 yarn application --list
    • 如果日志文件被压缩,如何获取日志?我试过这个命令,但它打印出乱码的压缩文件输出。谢谢。
    • 要获取应用程序 ID,请运行 yarn application -list -appStates ALL 并获取以“application_”开头的第一行的第一个字段。就我而言,它类似于“application_1480604706480_0001”。
    • @jacek Laskowski,如果启用了日志聚合,我将无法从 spark 历史服务器访问容器日志。它不断检查节点管理器日志目录,而不是聚合日志位置。这是为了完成的工作
    【解决方案2】:

    这个问题的漂亮文章:

    Running Spark on YARN - 请参阅“调试您的应用程序”部分。包含所有必需示例的体面解释。

    要让 Spark 的历史记录服务器正常工作,您唯一需要遵循的就是关闭应用程序中的 Spark 上下文。否则,应用程序历史服务器不会将您视为 COMPLETE 并且不会显示任何内容(尽管历史 UI 可访问但不那么可见)。

    【讨论】:

      【解决方案3】:

      没有一个答案清楚地表明在哪里可以找到日志(尽管它们是分段的),所以我将它们放在一起。

      如果日志聚合已打开(使用 yarn.log-aggregation-enable yarn-site.xml),则执行此操作

      yarn logs -applicationId <app ID>
      

      但是,如果没有打开,则需要在 Data-Node 机器上查看

      $HADOOP_HOME/logs/userlogs/application_1474886780074_XXXX/
      

      application_1474886780074_XXXX 是应用程序 ID

      【讨论】:

      • 对于像我这样不知道如何获取应用程序id的人:使用yarn applications -list
      • @stefan.m,应该是 yarn application -list 而不是 yarn applications -list
      • 如果您对这一切感兴趣,yarn logs -applicationId &lt;app ID&gt; -log_files stdout 将只检索标准输出:)。
      • 对于未来的读者,我发现这个库很有用。请试一试:github.com/hammerlab/yarn-logs-helpers
      【解决方案4】:

      它记录到:

      /var/log/hadoop-yarn/containers/[application id]/[container id]/stdout
      

      日志位于运行 Spark 作业的每个节点上。

      【讨论】:

      • 当日志聚合未开启时,它存储在/tmp/logs。我使用hdfs dfs -ls /tmp/logs/{USER}/logs 找到了我的,其中{USER} 是启动spark 应用程序的用户。
      • 这对我有用。此外,如果您正在运行集群,则日志可能位于其中一个节点上。因此,请确保您对集群中的每个节点都很便宜,并查看日志是否在此目录结构中。
      猜你喜欢
      • 2015-08-10
      • 2019-07-25
      • 1970-01-01
      • 2017-10-31
      • 1970-01-01
      • 1970-01-01
      • 2016-06-04
      • 2019-07-13
      • 1970-01-01
      相关资源
      最近更新 更多