調研過OOZIE和AZKABA,這種都是隻是使用spark-submit.sh來送出任務,任務送出上去之後擷取不到ApplicationId,更無法跟蹤spark application的任務狀态,無法kill application,更無法擷取application的日志資訊。是以,為了實作一個spark的排程平台是以有了以下調研及測試結論。
調研目前流行的SPARK任務排程:Oozie和Azkaban。
但是這兩個平台不能滿足以下功能(這些功能是希望有的):
1) 無法滿足即安全(使用shell送出任務,操作使用者權限控制)又可以Spark狀态監控(跟蹤SPARK application的任務狀态);
2) 無法滿足監控叢集運作狀态;
3) 無法滿足對每個任務設定監控政策。比如:任務假死狀态判定。
一個合格的spark排程平台要具有的基本功能:可以submit,kill,監控,擷取日志,跟蹤曆史記錄。
本篇文章主要講解如何使用YarnClient API實作,借助于YarnClient來實作監控任務,殺死任務,擷取日志,使用org.apache.spark.deploy.yarn.Client送出spark任務并傳回spark任務的applicationId。
備注:之前研究過使用SparkLauncher類進行排程,該方案也是一種不錯的方案,如果讀者你喜歡也可以嘗試使用SparkLauncher,它一樣可以送出後傳回spark任務的applicationid(送出後無狀态,需要等待applicaitonId不為空為止)。
1)由于我們是使用java 代碼(需要釋出到web項目中,而不是shell調用[不可以再shell中設定環境變量])去調用,是以我們需要centos系統環境變量中包含以下變量:
如果你對spark-env.sh檔案比較熟悉的話,你會發現上邊這些變量來自于該檔案,那麼,我們嗯隻需要把spark-env.sh引入到/ect/profile就可以。
spark-env.sh
View Code
接下來在/ect/profile檔案最後一樣追加
,儲存,然後source /etc/profile使其生效。
2)需要修改yarn上傳資源檔案存儲位置,否則會出現錯誤找不到資源檔案(檔案之是以找不到,是因為那些資源檔案spark_lib.zip,spark_conf.zip,*.jar被上傳到本地的/curent_user[root、zhangsan、lisi]/.sparkStaging/{appId}/*.jar下,在其他executor|container上找不到),必須修改yarn資源檔案上傳到hdfs目錄下:
第一步:送出任務代碼中設定SparkConf變量:
第二步:手動建立hdfs目錄 /user/.sparkStaging,給配置設定權限:
第三步:導入pom.xml依賴包
參數類YarnSubmitConditions:
送出函數:
測試函數
測試函數執行腳本:
執行日志:
目前調試通之後,測試通過yarn的cluster方式,client模式下任務送出到yarn上去無響應。
任務狀态封裝類
基礎才是程式設計人員應該深入研究的問題,比如:
1)List/Set/Map内部組成原理|差別
2)mysql索引存儲結構&如何調優/b-tree特點、計算複雜度及影響複雜度的因素。。。
3)JVM運作組成與原理及調優
4)Java類加載器運作原理
5)Java中GC過程原理|使用的回收算法原理
6)Redis中hash一緻性實作及與hash其他差別
7)Java多線程、線程池開發、管理Lock與Synchroined差別
8)Spring IOC/AOP 原理;加載過程的。。。