天天看點

spark-submit碰到的坑(持續更新)

我的spark部署模式是standalone-cluster,IP分别為:129,130,131,129為Master, 本文主要是将相關配置的注意事項進行記錄,相關配置 檔案如下:

1、spark-env.sh

spark-submit碰到的坑(持續更新)

2、spark-default.conf(之前報錯,配置過,然後又登出掉了)

spark-submit碰到的坑(持續更新)

之前使用spark-shell、spark-submit碰到的異常有以下:

1、driver端綁定不了端口,嘗試16次後失敗('Service 'sparkDriver' can't bind onport after retry 16 times

2、can't not find Main Class,找到不送出的程式的主類入口;

網上找的資料,解決方試嘗試過幾種 :

1、修改spark-default.conf,指定driver端口,發現然并卵,還是報錯,是以我又登出掉了;

2、修改spark-env.sh ,設定 SPARK_LOCAL_IP=127.0.0.1,發現然并卵,還是報錯;

最後懷疑是不是程式寫的有問題,修改了程式寫法,手動指定spark.driver.port等等 參數,錯誤依舊。

是以為了查找問題,首先重新寫了一下程式,删除原有項目,将代碼目錄進行了調整按照 com.myapp.test1 目錄建包,把src目錄設定為源代碼檔案,其實代碼很簡單,如下:

spark-submit碰到的坑(持續更新)

然後打包,打包的時候之前沒有注意幾個選項, 這次特别留意了,如下圖:

spark-submit碰到的坑(持續更新)

這裡要注意看 Main.Class這裡的類名稱,spark-submit要用的,scala、spark的jar包不用打包,伺服器上己經有了。這樣打好包,我的jar檔案名是sparks.jar,上傳到hdfs中(後面會說為什麼上傳)。

針對之前spark-driver無法綁定的問題,我又百度修改了一下/etc/sysconfig/network這個檔案,增加了一行:

HOSTSNAME  hserver1(我是用的這個名稱)

submit語句:

 ./spark-submit --master spark://10.10.10.129:7077 --class test1.MyCount  hdfs://10.10.10.129:9000/data/input/sparks.jar

這裡要注意一個問題:一定要先把jar包上傳到叢集,像我剛接觸不是太懂的時候,上百度查,很多人的jar包路徑直接是寫的本地伺服器路徑(例如:/var/ftp/pub/這種),這個其實應該是跟spark的叢集模式有關,如果是local模式,spark所有節點才可以從本地通路路徑,如果是分開在網絡中的叢集,必須要確定所有節點能通路,否則會報找不到jar封包件的異常,我剛開始不了解,試了幾次才明白。

按以上submit 語句執行後,在webui檢視,成功執行了,再也沒有任何異常。

總結及原因分析:

1、最大的問題首先是在IDea中打 jar 包的時候就錯了,要注意包路徑名及jar包依賴,隻把程式檔案打出來即可;

2、對/etc/sysconfig/network可能也起了一定作用,因為我把spark-env.sh 、 spark-default.conf檔案全部還原配置後,還是可以的,說明不是配置檔案的問題。

HOSTSNAME  hserver1(我是用的這個名稱)

額外:看官網說明 spark-submit 還有一個--deploy-mode參數  由于各種報錯,之前沒有辦法嘗試,本次嘗試以後才了解了一點。其實官網己經有過說明了。

spark-submit碰到的坑(持續更新)

standalone-client  standalone-cluster ,如果是client端便于與work節點間網絡通信的,就用client模式,如果是距離的傳輸,就使用cluster模式,從叢集中安排driver,這樣client在送出完程式以後就可以了。

繼續閱讀