文章目录
- 聚合日志
- 日志查看方式
- 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种方式:
- 更新$SPARK_CONF_DIR/log4j.properties文件,此文件在提交Spark应用程序后会自动上传到集群。
- 在使用spark-submit时,通过–files指定要上传的log4j.properties文件。
- 在使用spark-submit时,通过spark.driver.extraJavaOptions(Driver)或者spark.executor.extraJavaOptions(Executor端)指定-Dlog4j.configuration=<location of configuration file>。需要注意的,集群中所有节点的本地都要此文件。
对于第二种方式,ApplicationMaster和Executor是共享log4j配置的,当两者运行在同一个节点的时候,会造成两者的日志信息会写到同一个日志文件中。