運行Spark程序的幾種模式

一. 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

相關文章
相關標籤/搜索