实战技巧通过Spark日志文件定位作业报错或异常

Posted 勾叔谈大数据

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实战技巧通过Spark日志文件定位作业报错或异常相关的知识,希望对你有一定的参考价值。

大家好,我是勾叔。今天和大家聊聊Spark的日志:通过查看Spark日志文件定位作业的报错或异常。

当作业执行报错或者速度异常,通常需要查看 Spark 作业日志,Spark 日志通常是排错的唯一根据。查看日志的时候,需要注意的是 Spark 作业是一个分布式执行的过程,所以日志也是分布式的。联想到 Spark 的架构,Spark 的日志也分为两个级别:

  • Driver

  • Executor


一般来说,小错误通常可以从 Driver 日志中定位;但复杂一点的问题,还是要从 Executor 的执行情况来判断。

如果选取 yarn-client 的模式执行,日志会输出到客户端,直接查看即可,非常方便。可以用下面这种方式收集,如下:

nohup ./bin/spark-submit \--class org.apache.spark.examples.SparkPi \--master yarn \--deploy-mode client \--executor-memory 20G \--num-executors 50 \/path/to/examples.jar \

1000  >>  o  &
其中 nohup 和 & 表示后台执行,>> o 表示将日志输出到文件 o 中。

查看 Executor 的日志需要先将散落在各个节点(Container)的日志收集汇总成一个文件。以 YARN 平台为例:

yarn logs -applicationId application_1552880376963_0002 >> oapplication_1552880376963_0002 是 Spark 作业 id,当汇聚为一个文件后,我们就可以对其进行查看了。打开文件,我们发现这份日志是这样组织的:container_0-----------------------------------------------------WARN.....ERROR...........(日志内容)
container_1-----------------------------------------------------......(日志内容)......

这种方式给定位造成了一定障碍。

阅读这样的日志,最重要的是找到最开始报错的那一句日志。因为一旦作业报错,几乎会造成所有 Container 报错,但大部分错误日志都对定位原因没有什么帮助。

所以拿到这份日志要做的第一件事是利用时间戳和 ERROR 标记定位最初的错误日志。这种方式通常可以直接解决一半以上的报错问题。

大家如果想进行更深入的了解和学习,请关注勾叔谈大数据参与更多互动。




推荐阅读:




以上是关于实战技巧通过Spark日志文件定位作业报错或异常的主要内容,如果未能解决你的问题,请参考以下文章

启动zookeeper和kafka时kafka报错或闪退一直无法启动

实战干货解决Spark数据倾斜之快速准确定位数据倾斜产生原因

Spark API综合实战:动手实战和调试Spark文件操作动手实战操作搜狗日志文件搜狗日志文件深入实战

springMVC:为MultipartFilte配置了上传文件解析器,报错或不能使用

通过yarn提交作业到spark,运行一段时间后报错。

vim三种模式下的小技巧,提高一半工作效率