SparkUI是开源Spark作业诊断的重要工具,本文介绍如何使用SparkUI诊断作业。
使用SparkUI诊断作业
步骤一:获取链接
打开MaxCompute Spark LogView URL后,可获取SparkUI链接,SparkUI是开源Spark作业诊断的重要工具,可用于获取作业日志,以检查作业是否已正常提交并执行。
在MaxCompute Spark LogView URL的summary模块下找到Spark UI链接和History Server链接,如图所示:

Spark Web UI:仅在作业运行时才能打开,包含当前作业进度及线程栈等信息
Spark History Server:作业结束后可以打开,事件从驱动传递至HistoryServer的过程存在1至3分钟的延迟,立刻打开Tracking URL时,可能会出现一个页面,显示
Application application_1560240626712_2078769635 not found.错误。请稍后重试即可正常访问。若在kube模式下查看History Server,需要在配置文件
spark-defaults.conf中修改eventLog 的相关参数,如下:(必须)spark.eventLog.enabled = true (必须)spark.eventLog.dir = /workdir/eventlog/ (可选)spark.eventLog.compress = true (可选)spark.eventLog.overwrite = true
步骤二:通过SparkUI查看作业基本信息
复制上述该链接到浏览器,可以看到 Spark-Web-UI,如图所示:

点击
Environment页签确认设置的Spark参数。排查
Environment页签设置的配置参数,确认是否存在配置了但是未生效的情况,这种情况通常由于没有设置SPARK_HOME导致spark-defaults.conf读取不正确。点击
Executors页签重点关注是否存在Dead节点及Thread Dump。
点击Logs-StdOut按钮可以看到节点结果输出。
点击Logs-StdErr按钮可以看到节点
log4j日志。
步骤三:利用SparkUI排查阻塞或运行缓慢的作业
SparkUI支持查看正在运行的任务及其状态。在Executor页签中,可以查看每个Executor的线程栈快照。这由每个Executor的线程转储(thread dump)按钮提供。
打开运行中的SparkUI,切换到Executors页签。

确认是Driver线程卡住还是Executor线程卡住
如上图示例,可以看到Executor 59还有一个Active Tasks,说明此时还有一个Task未完成,因此点击该Executor的Thread Dump查看该Executor的线程栈信息。
若Active Tasks数量均为0,说明此时Executor均处于空闲状态,当前任务大概率卡在Driver执行逻辑,因此点击Driver的Thread Dump查看Driver的线程栈信息。
Driver的主线程通常如下:

Executor执行线程通常如下:
