Spark Yarn 提交作業

初學Spark時,部署的是Standalone模式(集成了HA),寫的測試程序一般創建上下文時如下:

此處master設置爲管理節點的集羣地址(spark webui上顯示的地址) 。

之後將測試代碼打包成jar包,上傳到服務器,使用spark-submit提交作業。

提交命令:

spark-submit --master spark://s44:7077 --name MyWordCount --class com.yahuidemo.spark.scala.WordCountScala SparkDemo1-1.0-SNAPSHOT.jar hdfs://s44:8020/usr/hadoop/test.txt

打包部署參考 官方api:

http://spark.apache.org/docs/latest/submitting-applications.html

注意,此處我把master設置爲我集羣master的url,那麼可以隨意定義;class參數要帶包名,一直指定到要運行的類入口,後面緊跟所在的jar(我是直接在jar所在目錄下執行的spark-submit,配置過spark環境變量;試過在spark的bin目錄下執行,但jar包在別的地方,結果沒有成功~)jar包參數後 跟main需要的自定義參數,如果有多個,空格隔開即可。我這裏只需要一個參數,用來指定程序要加載的文件目錄。

提交後就等着打印結果就好。另外可以根據屏幕打印出來的提示查看日誌,還可以在webui上查看具體的執行過程。類似於這樣:

點超鏈接可以看詳細的。

 

前面是測試standalone模式,現在要講的是yarn模式下提交作業。

由於公司使用ambari來統一搭建管理hadoop、spark等集羣。ambari上添加servcie的方式搭建的spark集羣是spark-yarn模式。底層原理跟standalone是差不多的,由master來調度worker實現計算,只不過調度交給yarn來管理。

看網上有人這樣解釋:客戶端提交一個Application,在客戶端啓動一個Driver進程。Driver進程會向RS(ResourceManager)發送請求,啓動AM(ApplicationMaster)的資源。RS收到請求,隨機選擇一臺NM(NodeManager)啓動AM。這裏的NM相當於Standalone中的Worker節點。AM啓動後,會向RS請求一批container資源,用於啓動Executor.RS會找到一批NM返回給AM,用於啓動Executor。AM會向NM發送命令啓動Executor。Executor啓動後,會反向註冊給Driver,Driver發送task到Executor,執行情況和結果返回給Driver端。

官方也給出了spark-yarn的部署文檔:

http://spark.apache.org/docs/latest/running-on-yarn.html

ambari上搭建好集羣后,提交了一個example沒有問題:

spark-submit --master yarn --class org.apache.spark.examples.SparkPi spark-examples_2.11-2.3.0.2.6.5.0-292.jar

後來自己寫了個單詞統計的測試類,在使用yarn方式提交。

這裏需要將SparkConfig的master配置修改爲“yarn”。

依舊將作業打成jar包,上傳到服務器,提交作業。提交命令爲:

spark-submit --master yarn --class com.yahuidemo.spark.scala.WordCountScala SparkDemo1-1.0-SNAPSHOT.jar yarn /user/spark/test.txt

如圖:

注意 需要將master參數修改爲yarn,class參數、jar包 和自定義參數跟standalone模式下一樣傳遞。我傳了兩個參數,一個是指定masterurl 另一個是文件目錄。

執行結果

webui 觀察

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