Spark文檔閱讀之一:Spark Overview
版本:2.4.5
1. spark的幾種執行方式
1)交互式shell:bin/spark-shell
bin/spark-shell –master <MasterURL> 可配置不同的執行器
例如:
bin/spark-shell --master local # 本地單worker執行 bin/spark-shell --master local[K] # 本地K個worker執行,K為"*"(星號)時表示本機CPU核數 bin/spark-shell --master local[K, F] # spark.task.maxFailures = F,單個task失敗F次後job失敗,即task可以重試最多F-1次 bin/spark-shell --master spark://HOST:PORT # 連接已有的standalone cluster,standalone模式就是手動部署一個測試用的集群,包含master和slave,可以為單機環境(standalone模式使用說明://spark.apache.org/docs/latest/spark-standalone.html)(standalone有client模式和cluster模式。client模式中driver和提交任務的client在一個進程中;而cluster模式中driver在cluster的一個worker中執行,client提交任務後就結束退出了,另外cluster模式還以配置為任務非0退出後立即重跑。) bin/spark-shell --master spark://host1:port1,host2:port2 # 連接已有的基於ZK的standalone master(有多個master,其中一個是leader,掛了以後其他master恢復狀態並上位) bin/spark-shell --master mesos://host:port # 連接已有的Mesos cluster(沒細看) bin/spark-shell --master yarn # 連接一個Yarn集群,可以配置 --deploy-mode client/cluster (yarn的地址從hadoop配置中讀取,不需要在命令中指定) bin/spark-shell --master k8s://host:port # 連接一個kubernetes集群(目前不支持client模式)
2)python: bin/pyspark & bin/spark-submit xx.py
3)R:bin/sparkR & bin/spark-submit xx.R
2. 任務的提交
spark-submit可以將任務提交到一個集群上,並且有統一的接口支持所有cluster manager(standalone、mesos、yarn、kubernetes)。
打包任務所有的依賴到一個jar包中,或者使用–py-files參數提交.py、.zip、.egg文件(多個文件需打包為一個.zip)
bin/spark-submit \ --class <main-class> \ # 任務入口 --master <master-url> \ # 支持多種cluster manager --deploy-mode <deploy-mode> \ # cluster / client,默認為client --conf <key>=<value> \ ... # other options,如--supervise(非0退出立即重啟), --verbose(打印debug信息), --jars xx.jar(上傳更多的依賴,逗號分隔,不支持目錄展開) <application-jar> \ # main-class來自這個jar包,必須是所有節點都可見的路徑,hdfs://或file:// [application-arguments] # 入口函數的參數 bin/spark-submit \ --master <master-url> \ <application-python> \ [application-arguments]
* 關於cluster / client模式:
如果任務提交機和worker執行機在同一個物理位置,可以用client模式;如果不再同一個位置,可以用cluster模式,讓driver和worker一起執行,減少網絡延遲。另外python沒有standalone cluster模式。
* 很多配置可以放在spark-defaults.conf中,就不用在spark-submit中重複配置了
3. cluster模式
spark任務在集群上作為一個獨立的資源集合運行,由driver的SparkContext對象進行管理。為了在集群上運行,SparkContext連接cluster manager讓它來分配任務資源。一旦連接,spark從集群節點獲取executors,用來進行計算和存儲數據。之後,spark發送任務代碼(jar或python)到executors中。最後,SparkContext發送tasks到executors執行。