spark運維管理

一:實現HAweb

1-基於zookeeper實現HA算法

配置spark-env.sh,master節點掛掉之後,會進行恢復操做。app

export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=192.168.114.200:2181,192.168.114.201:2181,192.168.114.202:2181 -Dspark.deploy.zookeeper.dir=/spark"

提交任務腳本(若是spark1這個master掛掉後,會尋找新的master,從而保證任務不會由於spark1掛掉而失敗):curl

/opt/module/spark/bin/spark-submit \
--class com.zj.spark.applog.AppLogSpark \
--master spark://spark1:7077,spark2:7077 \
--deploy-mode client \
--num-executors 1 \
--driver-memory 600m \
--executor-memory 600m \
--executor-cores 1 \
--conf spark.cores.max=3 \
/opt/spark-study/mysparkstudy-1.0-SNAPSHOT-jar-with-dependencies.jar \

2- 基於文件系統實現HA(不推薦,須要手動啓動)工具

spark-env.sh
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=FILESYSTEM -Dspark.deploy.recoveryDirectory=/usr/local/spark_recovery"

 

二:spark監控(基本上前兩個就已經夠使用了)ui

方式一:spark web UI獲取正在運行的監控信息url

port爲4040spa

包括瞭如下信息日誌

  1. stage和task列表
  2. RDD大小以及內存使用的概覽
  3. 環境信息
  4. 做業對應的executor的信息

方式二:spark history web UI,獲取歷史 的監控信息code

從18080端口中進入

能夠設置的屬性

  1. spark.eventLog.enabled,必須設置爲true,開啓關聯
  2. spark.eventLog.dir,默認是/tmp/spark-events,建議本身手動調整爲其餘目錄,好比/usr/local/spark-event或是hdfs目錄,必須手動建立
  3. spark.history.fs.logDirectory,記錄日誌的目錄
  4. spark.history.fs.update.interval,默認10s更新檢測/spark-log目錄下的文件內容變動)
  5. spark.history.retainedApplicaions,50
  6. spark.eventLog.compress ,是否壓縮數據,默認爲false,建議能夠開啓壓縮以減小磁盤空間佔用
  7. spark.io.compression.codec,默認是lz4壓縮,不用改,直接用推薦的便可)
  8. spark.io.compression.lz4.blocksize,默認是32k,過小,須要調大
  9. spark.history.ui.port,默認是18080
  10. spark.history.fs.cleaner.enable,開啓日清理,默認是false
  11. spark.history.fs.cleaner.interval,默認1d檢測一次
  12. spark.history.fs.cleaner.maxAge,清理7d前的日誌

方式三:RESTFUL API,須要安裝curl工具

方式四:Metrics

   定時將監控數據拉取到指定的路徑下。

 

三:spark靜態資源分配和動態資源分配

靜態資源分配:在這種方式下,每一個做業都會被給予一個它能使用的最大資源量的限額,而且能夠在運行期間持有這些資源。

動態資源分配:當executor再也不被使用的時候,spark就應該釋放這些executor,而且在須要的時候再次獲取這些executor。由於沒有一個絕對的方法去預測一個將來可能會運行一個task的executor應該被移除掉,或者一個新的executor應該別加入,咱們須要一系列的探索式算法來決定什麼應該移除和申請executor。driver會輪詢式地申請executor。當在必定時間內(spark.dynamicAllocation.schedulerBacklogTimeout)有pending的task時,就會觸發真正的executor申請,而後每隔必定時間後(spark.dynamicAllocation.sustainedSchedulerBacklogTimeout),若是又有pending的task了,則再次觸發申請操做。

相關文章
相關標籤/搜索