Spark核心编程进阶-yarn模式下日志查看详解

Spark核心编程进阶-yarn模式下日志查看详解,第1张

yarn模式下调试运行中的spark作业

在yarn模式下,spark作业运行相关的executor和ApplicationMaster都是运行在yarn的container中的

一个作业运行完了以后,yarn有两种方式来处理spark作业打印出的日志

这种方式的话,顾名思义,就是说,将散落在集群中各个机器上的日志,最后都给聚合起来,让我们可以统一查看

如果打开了日志聚合的选项,即yarn.log-aggregation-enable,container的日志会拷贝到hdfs上去,并从机器中删除

对于这种情况,可以使用yarn logs -applicationId <app ID>命令,来查看日志

yarn logs命令,会打印出application对应的所有container的日志出来,当然,因为日志是在hdfs上的,我们自然也可以通过hdfs的命令行来直接从hdfs中查看日志

日志在hdfs中的目录,可以通过查看yarn.nodemanager.remote-app-log-dir和yarn.nodemanager.remote-app-log-dir-suffix属性来获知

日志也可以通过spark web ui来查看executor的输出日志

但是此时需要启动History Server,需要让spark history server和mapreduce history server运行着

并且在yarn-site.xml文件中,配置yarn.log.server.url属性

spark history server web ui中的log url,会将你重定向到mapreduce history server上,去查看日志

如果没有打开聚合日志选项,那么日志默认就是散落在各个机器上的本次磁盘目录中的,在YARN_APP_LOGS_DIR目录下

根据hadoop版本的不同,通常在/tmp/logs目录下,或者$HADOOP_HOME/logs/userlogs目录下

如果你要查看某个container的日志,那么就得登录到那台机器上去,然后到指定的目录下去,找到那个日志文件,然后才能查看

无论Flink还是Spark都支持自建集群(standalone cluster)。但是为了保证稳定性和资源隔离等,生产环境里的任务最好借助资源管理框架(如Yarn)运行。任务运行在yarn上,查询日志就可能不是很方便,尤其是任务进程异常退出之后。

yarn容器退出之后,默认是不保存日志的。所以需要开启JobHistoryServer,具体方法网上有很多教程。

运行中的Spark任务可以直接通过spark web ui查看:

对于已经结束的yarn应用,spark进程已经退出也无法提供webui服务。

根据 Flink On Yarn如何查看任务日志 ,我们已经知道了日志的url组成方式,这次同理,只要找到 容器名 和 node 就能访问日志了。

driver的url为: http://node5:19888/jobhistory/logs/node3:8041/container_1634207619484_0496_01_000001/container_1634207619484_0496_01_000001/root/stderr/?start=0

搜索driver的日志,找到容器名 container_1634207619484_0496_01_000002 和host node3

运行中的flink/spark的日志查看非常容易,因为它们本身都提供了web ui服务。但是当任务异常退出之后,flink/spark进程的结束导致无法提供web ui服务。我们利用job history server来保留和展示当时的日志。但是yarn的web只展示了flink job manager/spark driver的日志链接,我们需要自己拼接flink task manager/spark executor日志链接。

最后我有一个小疑问:文中介绍的URL组成是推测出来的,其中第三部分 /container_1634207619484_0505_01_000001/container_1634207619484_0505_01_000001 是两个同样的容器名,这是为什么?希望知道的小伙伴能留言解惑一下。

相关链接:

Flink On Yarn如何查看任务日志

Spark On Yarn如何查看任务日志

无论Flink还是Spark都支持自建集群(standalone cluster)。但是为了保证稳定性和资源隔离等,生产环境里的任务最好借助资源管理框架(如Yarn)运行。任务运行在yarn上,查询日志就可能不是很方便,尤其是任务进程异常退出之后。

yarn容器退出之后,默认是不保存日志的。所以需要开启JobHistoryServer,具体方法网上有很多教程。

运行中的Flink任务可以直接通过flink web ui查看:

对于已经结束的yarn应用,flink进程已经退出无法提供webui服务。所以需要通过JobHistoryServer查看保留在yarn上的日志。

好像没有task manager的日志啊,怎么办?我们可以先研究一下job manager的日志url: http://node5:19888/jobhistory/logs//node2:8041/container_1634207619484_0505_01_000001/container_1634207619484_0505_01_000001/root ,可以发现一些规律:

所以我们只需要知道taskmanager的 容器名 和 node 就能找到它的日志了。flink在jobmanager的日志中记录了详细的相关信息,包括所有的taskmanager的 容器名 和 node 。日志太多可能不好找,这里有一个小技巧:利用appid去搜索日志,比如本文中的例子,可以搜索 1634207619484_0505

分析这行日志:taskmanager只有一个,并且它的容器名为 container_1634207619484_0505_01_000002 ,node为 node1 (注意:后面拼接url用的端口号是8041不是37798)

最终我们得的taskmanager日志的url是: http://node5:19888/jobhistory/logs/node1:8041/container_1634207619484_0505_01_000002/container_1634207619484_0505_01_000002/root

运行中的flink/spark的日志查看非常容易,因为它们本身都提供了web ui服务。但是当任务异常退出之后,flink/spark进程的结束导致无法提供web ui服务。我们利用job history server来保留和展示当时的日志。但是yarn的web只展示了flink job manager/spark driver的日志链接,我们需要自己拼接flink task manager/spark executor日志链接。

最后我有一个小疑问:文中介绍的URL组成是推测出来的,其中第三部分 /container_1634207619484_0505_01_000001/container_1634207619484_0505_01_000001 是两个同样的容器名,这是为什么?希望知道的小伙伴能留言解惑一下。

相关链接:

Flink On Yarn如何查看任务日志

Spark On Yarn如何查看任务日志


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8038684.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存