一. local 模式 -- 全部程序都運行在一個JVM中,主要用於開發時測試
無需開啓任何服務,可直接運行 ./bin/run-example 或 ./bin/spark-submit 如:
./bin/run-example SparkPi 10
./bin/spark-submit --class org.apache.spark.examples.SparkPi --master local[4] ./examples/jars/spark-examples_2.11-2.1.1.jar 100
local[4] 表明會有4個線程(每一個線程一個core)來併發執行應用程序。
此模式下,
1. 這個SparkSubmit進程又當爹、又當媽,既是客戶提交任務的Client進程、又是Spark的driver程序、還充當着Spark執行Task的Executor角色
2.程序的運行狀態可經過 http://<driver-node>:4040 查看,可是這是臨時的,程序運行完後,這個UI也就失效了。咱們能夠啓動Spark History Server,這
樣就能夠看到歷史運行程序的信息了。
開啓Spark History Server,能夠在spark-defaults.conf裏配置以下信息:
spark.eventLog.enabled true
spark.eventLog.dir hdfs://ubuntu1:9000/spark/eventlog
spark.history.fs.logDirectory hdfs://ubuntu1:9000/spark/eventlog
經過: 192.168.137.11:18080 訪問 history server //若是啓動history的話
二. 測試或實驗性質的本地僞集羣運行模式(單機模擬集羣) -- 在單機啓動多個進程來模擬集羣下的分佈式場景
無需開啓任何服務,可直接運行以下命令:
./bin/spark-submit --class org.apache.spark.examples.SparkPi --master local-cluster[2,3,512] ./examples/jars/spark-examples_2.11-2.1.1.jar 20
local-cluster[x,y,z]參數:x表明要生成的executor數,y和z分別表明每一個executor所擁有的core和memory數。
遇到的問題:sc.executorMemory默認值是1024M,若是咱們設置的z的值比1024小的話,就會拋錯。能夠在spark-defaults.conf 裏配置sc.executorMemory的大小。如:
spark.executor.memory 512m
設置成512(單位M)的緣由是:用的是本地VM,總共內存也沒多少。可是若是設置小於450m的話,仍是會報錯。
此模式下:SparkSubmit依然充當全能角色,又是Client進程,又是driver程序,還有點資源管理的做用
三. Spark自帶Cluster Manager的Standalone Client模式(集羣)
須要先啓動Spark的Master和Worker守護進程。提交一個任務的命令以下:
./bin/spark-submit --class org.apache.spark.examples.SparkPi --master spark://ubuntu1:7077 ./examples/jars/spark-examples_2.11-2.1.1.jar 100
此模式下,1. 會在全部有Worker進程的節點上啓動Executor來執行應用程序。
2. Master進程作爲cluster manager,用來對應用程序申請的資源進行管理;
3. SparkSubmit 作爲Client端和運行driver程序;
4. 運行結果在Shell裏可見
注意,Worker進程生成幾個Executor,每一個Executor使用幾個core,這些均可以在spark-env.sh裏面配置
須要配置項:
1. slaves 文件
2. spark-env.sh
export JAVA_HOME=/opt/programs/jdk1.8.0_131
export SPARK_MASTER_IP=ubuntu1
export SPARK_WORKER_CORES=2
export SPARK_EXECUTOR_MEMORY=512m
export SPARK_WORKER_MEMORY=512m
export SPARK_DRIVER_MEMORY=512m
提交一個Spark程序後,能夠經過下面的UI查看任務運行狀態。
UI: 192.168.137.11:8080
192.168.137.11:18080 //若是啓動history的話
四. spark自帶cluster manager的standalone cluster模式(集羣)
須要先啓動Spark的Master和Worker守護進程。提交一個任務的命令以下:
./bin/spark-submit --class org.apache.spark.examples.SparkPi --master spark://ubuntu1:7077 --deploy-mode cluster ./examples/jars/spark-examples_2.11-2.1.1.jar 50
此模式下,1. 客戶端的SparkSubmit進程會在應用程序提交給集羣以後就退出。因此在shell裏,運行結果不可見
2. Master會在集羣中選擇一個Worker進程生成一個子進程DriverWrapper來啓動driver程序
3. 而該DriverWrapper 進程會佔用Worker進程的一個core,因此一樣的資源下配置下,會比第3種運行模式,少用1個core來參與計算
4. 應用程序的結果,會在執行driver程序的節點的stdout中輸出
須要配置項:同(三)
五. 基於YARN的Resource Manager的Client模式(集羣)
須要先啓動 Hadoop 的 YARN。不須要啓動Spark的Master、Worker守護進程。運行以下命令
./bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode client ./examples/jars/spark-examples_2.11-2.1.1.jar 100
此模式下:1. 在Resource Manager節點上提交應用程序,會生成SparkSubmit進程,該進程會執行driver程序。
2. RM會在集羣中的某個NodeManager上,啓動一個ExecutorLauncher進程,來作爲ApplicationMaster
3. 也會在多個NodeManager上生成CoarseGrainedExecutorBackend進程來併發的執行應用程序
Yarn 集羣模式須要配置項:
1. spark-env.sh
export JAVA_HOME=/opt/programs/jdk1.8.0_131
export HADOOP_HOME=/opt/programs/hadoop-2.7.3
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
export SPARK_HOME=/opt/programs/spark-2.1.1-bin-hadoop2.7
六. 基於YARN的Resource Manager的Cluster模式(集羣)
須要先啓動 Hadoop 的 YARN。不須要啓動Spark的Master、Worker守護進程。運行以下命令
./bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode cluster ./examples/jars/spark-examples_2.11-2.1.1.jar 100
此模式下:1. 在Resource Manager端提交應用程序,會生成SparkSubmit進程,該進程只用來作Client端,應用程序提交給集羣后,就會刪除該進程。
2. Resource Manager在集羣中的某個NodeManager上運行ApplicationMaster,該AM同時會執行driver程序
3. 緊接着,會在各NodeManager上運行CoarseGrainedExecutorBackend來併發執行應用程序
4. 應用程序的結果,會在執行driver程序的節點的stdout中輸出,而不是打印在屏幕上。
Yarn 集羣模式須要配置項:同(五)
node