文章目录

  • 聚合日志
  • 日志查看方式
  • 1. yarn命令
  • 2. HDFS命令行工具
  • 3. Spark Web UI
  • 非聚合日志
  • Spark日志文件
  • 参考


当我们的Spark应用程序运行在YARN资源管理器的时候,集群中ApplicationMaster和Executor都是运行在YARN container中,container是YARN集群对资源(内存、CPU等)的抽象。YARN对于运行完成的应用程序有两种处理container日志的模式,是哪种模式取决于是否开启了日志聚合功能。

聚合日志

日志聚合功能是通过配置“yarn.log-aggregation-enable=true”开启的,默认为false。日志聚合功能会在应用程序结束后,收集所有container位于本地的日志信息,并将这些日志信息移到文件系统上(比如HDFS),之后会将本地日志信息删除。要移到HDFS上的什么位置,可以通过"yarn.nodemanager.remote-app-log-dir"和"yarn.nodemanager.remote-app-log-dir-suffix" 两个配置进行指定:

  • yarn.nodemanager.remote-app-log-dir:聚合日志保存路径,默认为/tmp/logs。
  • yarn.nodemanager.remote-app-log-dir-suffix:远程HDFS上所要创建的日志目录{yarn.nodemanager.remote-app-log-dir}/${user}/yarn.nodemanager.remote-app-log-dir-suffix

上面这些配置都位于YARN安装目录下的…/conf/yarn-site.xml中,如果我们使用的是CDH等有管理页面的集群,也可以在网页端进行修改。

日志查看方式

1. yarn命令

开启日志聚合功能,在应用程序结束之后,我们可以在YARN集群的任何节点上,通过下面的yarn logs命令来查看日志信息:

yarn logs -applicationId <app ID>

<app ID>可在集群节点上使用yarn命令查看:

yarn application -list

或者在YARN应用程序页面进行查看:http://${yarn.resourcemanager.hostname}:8088。主机名对应…/conf/yarn-site.xml文件中参数yarn.resourcemanager.webapp.address指定的值。

2. HDFS命令行工具

通过HDFS命令行查看我们上面配置的日志目录下的文件。

hadoop fs -cat /tmp/logs/.../xxx.log

3. Spark Web UI

也可以在Spark Web UI的Executor标签页下进行查看。这种方式需要后台启动Spark history server进程和MapReduce history server进程,并且要配置…/conf/yarn-site.xml中的参数yarn.log.server.url。

非聚合日志

在日志聚合功能未开启的情况下,日志会保留在集群每个节点的$HADOOP_YARN_HOME/logs目录下,是通过配置yarn.nodemanager.log-dirs“”指定的。

要查看container日志,就必须要到container所属的节点上,到上述指定目录下查找对应的文件。

此外,也可以进入Spark Web UI上Executor标签页进行查看。

Spark日志文件

如果我们要设置Spark应用程序的日志等级等信息,或者使用自定义的log4j配置,有3种方式:

  1. 更新$SPARK_CONF_DIR/log4j.properties文件,此文件在提交Spark应用程序后会自动上传到集群。
  2. 在使用spark-submit时,通过–files指定要上传的log4j.properties文件。
  3. 在使用spark-submit时,通过spark.driver.extraJavaOptions(Driver)或者spark.executor.extraJavaOptions(Executor端)指定-Dlog4j.configuration=<location of configuration file>。需要注意的,集群中所有节点的本地都要此文件。

对于第二种方式,ApplicationMaster和Executor是共享log4j配置的,当两者运行在同一个节点的时候,会造成两者的日志信息会写到同一个日志文件中。