代碼形式提交Spark作業

Spark作業提交方式一般有兩種,一種是使用spark-submit腳本進行提交作業,另一種方式是使用rest api方式,但是有時候由於集羣的安全原因可能無法使用rest api方式進行提交作業,但是由於業務需要的話我們可以直接調用SparkSubmit.main方法進行api方式提交作業。(當然也可以使用ProcessBuilder執行shell腳本提交)。除了通常兩種情況,Spark其實還提供了API提交作業的方法。

1 調用SparkSubmit提交作業:

爲了使用SparkSubmit#main方法方式提交作業,因此重點就是需要構造參數,我們可以根據spark-submit腳本源碼進行構造參數,翻閱spark-submit源碼不難發現最終調用的是spark-class腳本提交作業,spark-class腳本中最核心的代碼如下:

exec "${CMD[@]}"

因此只要我們弄清楚 "${CMD[@]}"參數是什麼就可以解決問題,最好的方法就是在spark-class腳本中添加echo 打印出來看看。打印結果如下:

/usr/local/jdk1.8.0_161/bin/java -cp /home/daxin/bigdata/spark/conf/:/home/daxin/bigdata/spark/jars/*:/home/daxin/bigdata/hadoop/etc/hadoop/:/home/daxin/bigdata/hadoop/etc/hadoop/ -Xmx1g  org.apache.spark.deploy.SparkSubmit --master yarn   --class com.daxin.remote.debug.App wc.jar

由於我們提交的作業是使用yarn調度,因此需要傳入hadoop相關配置。如果使用yarn調度卻沒有傳入hadoop配置文件的話此時會提示操作不到ResourceMangaer,即信息如下:

0.0.0.0/0.0.0.0:8032. Already tried 7 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1 SECONDS)

正常spark腳本提交作業時候hadoop等相關配置文件是通過classpath傳入的,因此我們在classpath傳入即可。


2:使用SPARK API提交作業。

參考文檔:https://spark.apache.org/docs/latest/rdd-programming-guide.html#launching-spark-jobs-from-java--scala,內容比較簡單就不描述了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章