问题描述
spark以cluster模式运行在yarn上. 我们访问这个正在运行着的Spark UI时, 发现页面缺少样式, 如下图.
排查
-
我们之前使用Spark 2.2.0时. 也遇到过类似的情况, 当时排查出问题的根源是yarn需要一个参数, 但是spark没有给提供.
具体内容见这个issue: YARN-7269
但是我们现在使用的Spark版本是2.4.4, 按理来说在Spark中已经解决掉了这个问题, 具体可以参考下面的两个链接:- SPARK-23679
-
commit#22164
所以排除了这个原因.
后来在查看Spark 的后台日志时看到下面的报错.
NoSuchMethodError
, 说明servlet-api
jar包冲突了.
2019-11-05 03:55:24,986 WARN [SparkUI-44] servlet.ServletHandler: Error for /static/sorttable.js
java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.isAsyncSupported()Z
at org.spark_project.jetty.servlet.DefaultServlet.sendData(DefaultServlet.java:943)
............省略...............
到这里, 主要是排查这个jar包是从哪里引入进来的. IDEA的jar包分析功能用起来!
-
找到项目, 显示包的依赖项.
-
在页面中ctrl+f查找servlet-api, 当我们想要在这个图中找到引用它的jar包(父辈)时, 密密麻麻的关系线会使得查找非常困难. 所以这里推荐使用"仅显示所选jar包相关联的jar包"项, 然后不断的单击引用了它的父辈jar包, 就会显示"爷爷辈"jar包, 以此类推, 双击就会进入到对应的pom文件中.
最后找到这个jar包在项目里的终极父包, 然后结合实际, 排除还是怎么滴, 都可以.