Spark on k8s: 調(diào)試客戶端spark-submit進程

Spark on K8S模塊的代碼又臭又長,離我們上生產(chǎn)環(huán)境,也就一個debug的距離。干干巴巴,麻麻咧咧,盤它。。。

前置條件

  • 你有一個可以提交 Spark on k8s 作業(yè)的 k8s 集群,可以參考https://spark.apache.org/docs/latest/running-on-kubernetes.html,自己搭一個玩玩

    • 理論上沒有也沒關系,因為我們客戶端進程只是一個本地的java程序,只是如果沒有真正的 k8s 集群,這個作業(yè)在debug到一定階段會走不下去而已
  • 一只你熟練使用的 IDE

    • 推薦 Intellj IDEA
  • 一份新鮮熱乎的 Spark 源碼

  • 一坨打包過的Spark package

原理說明

spark on k8s架構

上圖所示是 Spark 官方文檔中的 Spark on k8s 的架構圖,圖很簡單,左邊的 Client 和右邊的 k8s 集群,其中 client 通過 spark-submit 接口和 k8s 集群進行交互,主要完成的是Spark Driver Pod的構建,當然由于本文主要講的是 Client 進程調(diào)試相關的東西,后面的細節(jié)就先擱置了。

配置 IDE

通過 Remote 模板新建一份配置,默認的話 Host 的指向的一般是localhost,如果你在遠程的機器上啟動 spark-submit 進程,需要正確的設置Host,我們本地提交的話,直接改個name就可以使用了,如下圖所示,


ide debug 配置

我們需要復制 Command line arguments for remote JVM 的內(nèi)容,來配置到 spark-submit 進程的 java options里。

配置SPARK_SUBMIT_OPTS

設置 spark-submit 的客戶端 java 參數(shù)可以通過 SPARK_SUBMIT_OPTS 環(huán)境變量來搞定,具體如下,

echo SPARK_SUBMIT_OPTS=\"-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=50014\" >> conf/spark-env.sh

開始調(diào)試

我們使用spark自帶的示例程序 org.apache.spark.examples.HdfsTest 來進行調(diào)試,

Kent@KentsMacBookPro  ~/Documents/spark-on-k8s/spark-3.0.0-SNAPSHOT-bin-2.7.3  bin/spark-submit \
    --master k8s://https://10.120.238.100:7443 \
    --name hehe \
    --deploy-mode cluster  \
     --class org.apache.spark.examples.HdfsTest   \
    local:///opt/spark/examples/jars/spark-examples_2.12-3.0.0-SNAPSHOT.jar \
    hdfs://hz-cluster10/user/kyuubi/hive_db/kyuubi.db/hive_tbl

當出現(xiàn)如下打印信息,即可切換到 IDE 中點擊 debug 按鈕。

Listening for transport dt_socket at address: 50014

當然,在這之前,必須要在合適的位置加上斷點。


斷點

運氣好的話,啟動 debug 后,你就可以在如下位置進入斷點。


斷點

我們注意到這個類中有一個 KubernetesClient 對象,我們試著用它來和 k8s 集群做個親密交互。

獲取configmap

上面的例子是訪問我在 k8s 上提前建立好的一個ConfigMap。

所以我們可以看到 Client 進程中主要就是實例化了一個 KubernetesClient 對象來達到了和 k8s 集群,也就是 api server 的交互,完成對Spark Driver Pod的描述。

總結

文章很長,干干巴巴,麻麻咧咧,其實就是設置一個 SPARK_SUBMIT_OPTS 環(huán)境變量的事情,233333~

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容