問題描述
spark以cluster模式運(yùn)行在yarn上. 我們訪問這個正在運(yùn)行著的Spark UI時, 發(fā)現(xiàn)頁面缺少樣式, 如下圖.
image.png
排查
-
我們之前使用Spark 2.2.0時. 也遇到過類似的情況, 當(dāng)時排查出問題的根源是yarn需要一個參數(shù), 但是spark沒有給提供.
具體內(nèi)容見這個issue: YARN-7269
但是我們現(xiàn)在使用的Spark版本是2.4.4, 按理來說在Spark中已經(jīng)解決掉了這個問題, 具體可以參考下面的兩個鏈接:- 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包是從哪里引入進(jìn)來的. IDEA的jar包分析功能用起來!
-
找到項(xiàng)目, 顯示包的依賴項(xiàng).
image.png -
在頁面中ctrl+f查找servlet-api, 當(dāng)我們想要在這個圖中找到引用它的jar包(父輩)時, 密密麻麻的關(guān)系線會使得查找非常困難. 所以這里推薦使用"僅顯示所選jar包相關(guān)聯(lián)的jar包"項(xiàng), 然后不斷的單擊引用了它的父輩jar包, 就會顯示"爺爺輩"jar包, 以此類推, 雙擊就會進(jìn)入到對應(yīng)的pom文件中.
image.png
最后找到這個jar包在項(xiàng)目里的終極父包, 然后結(jié)合實(shí)際, 排除還是怎么滴, 都可以.