Spark On Yarn搭建及各運行模式說明


  之前記錄Yarn:Hadoop2.0之YARN組件,這次使用Docker搭建Spark On  Yarn

一、各運行模式

1、單機模式

  該模式被稱為Local[N]模式,是用單機的多個線程來模擬Spark分布式計算,通常用來驗證開發出來的應用程序邏輯上沒有問題。其中N代表可以使用N個線程,每個線程擁有一個core。如果不指定N,則默認是1個線程(該線程擁有1個core)

  指令實例

    1)spark-shell --master local

    2)spark-shell --master local[4]代表會有4個線程(每個線程一個core)來並發執行應用程序

  運行該模式非常簡單,只需要把Spark的安裝包解壓之后,改一些常用的配置即可使用,而不用啟動Spark的Master 、Worker守護進程(只有集群的Standalone方式時,才需要這兩個角色),也不用啟動Hadoop的各服務(除非必須用到hdfs)這是和其他模式的區別。

2、偽集群模式

  該模式和local[N]很像,不同的是。它會在單機啟動多個進程來模擬集群下的分布式場景,而不像Local[N]這種多線程只能在一個進程下共享資源。通常也是用來驗證開發出來的應用程序在邏輯上有沒有問題,或想使用Spark的計算框架而沒有太多資源。

  指令實例:

    spark-shell --master local-cluster[2,3,1024]

  用法:提交應用程序時使用local-cluster[x,y,z],參數:x代表要生成executor數,y和z分別代表每個executor所擁有的core和memory數,上面這條命令表示:會使用2個executor進程,每個進程分配3個core和1G內存來運行應用程序

  該模式非常簡單,只需要把spark的安裝包解壓后,改一些常用的配置即可使用。而不用啟動Spark的Master、Worker守護進程(只有集群的standalone方式時,也不用啟動hadoop的各服務)。

3、集群模式1---spark自帶的Cluster Manager的Standalone client模式

  和單機運行模式不同,這里必須在執行應用程序前,先啟動Spark的Master和Worker守護進程。不用啟動Hadoop服務,除非必須用到。然后在想要作為Master的節點上用start-all.sh來啟動即可。這樣運行模式,可以使用spark的8080 web ui來觀察資源和應用程序的執行情況

  指令實例:

    1)spark-shell --master spark://spark01:7077

    2)spark-shell --master spark://spark01:7077 --deploy-mode client

  產生的進程

    ①Master進程作為clust manager,用來對應用程序申請的資源進行管理。

    ②SparkSubmit作為client端和運行Driver程序

    ③CoarseGrainedExecutorBackend用來並發執行程序

4、集群模式2---spark自帶的Cluster Manager的standalone cluster模式

  指令實例:

    spark-submit --master spark://spark01:6066 --deploy-mode cluster

  與第三種模式的區別

    ①客戶端的SparkSubmit進程會在應用程序提交給集群后退出

    ②Master會在集群中選擇一個Worker進程生成一個子進程DriverWrapper來啟動Driver來啟動程序

    ③該DriverWrapper進程會占用Worker進程的一個core,所以同樣的資源配置下,會比第三種運行模式,少一個core來參與運算

    ④應用程序的結果,會在執行Driver程序的節點的sdtout中輸出,而不是打印在屏幕上。

5、集群模式3---基於Yarn的ResourceManager的Client模式

  現在越來越多的場景,都是Spark跑在Hadoop集群中,所以為了做到資源能夠均衡調度,會使用Yarn來作為Spark的Cluster的Manager,來為Spark的應用程序分配資源。在執行Spark應用程序之前,要啟動Hadoop的各個服務。由於已經有了資源管理器,所以不需要啟動Spark的Master、Work守護進程。

  指令實例:

    ①spark-shell --master yarn

    ②spark-shell --master yarn --deploy-mode client

  提交應用程序后,各節點會啟動相關JVM進程,如下:

    ①在ResourceManager節點上提交應用程序,會生成SparkSubmit進程,該進程會執行Driver程序。

    ②RM會在集群中的某個NodeManager上啟動一個ExecutorLauncher進程來作為ApplicationMaster

    ③RM也會在多個NodeManager上生成一個CoarseGrainedExecutorBackend進程來並發執行應用程序。

6、集群模式4----基於Yarn的ResourceManager的Cluster模式

  指令實例

    ①spark-shell --master yarn --deploy-mode client

  和第5種的區別如下

    ①在ResourceManager端提交應用程序,會生成SparkSubmit進程,該進程只用來做Client端,應用程序提交給集群后,就會刪除該進程

    ②ResourceManager在集群中的某個NodeManager中運行ApplicationMaster,該AM同時會執行Driver程序,緊接着,各NodeManager上運行CoarseGrainedExecutorBackend來並發執行應用程序

    ③應用程序的結果,會在執行Driver應用程序的節點的sdtout輸出,而不是打印在屏幕上。

7、Spark On Mesos模式

  http://ifeve.com/spark-mesos-spark/

二、Spark On Yarn

  官方說明:http://spark.apache.org/docs/latest/running-on-yarn.htmlhttp://spark.apache.org/docs/latest/submitting-applications.html

1、圖解說明

  

   Spark On Yarn模式:Spark集群的資源管理器不是由Master(Cluster Manager)來管理,而是由Yarn的ResourceManager來管理,而Spark的任務調度依然是由SparkContext來調度。

2、環境搭建

  本地搭建還是基於之前的環境:使用Docker搭建Spark集群(用於實現網站流量實時分析模塊),基於以上6個容器的Zookeeper集群、hadoop集群等環境來搭建。

  Spark on YARN運行模式,只需要在Hadoop分布式集群中任選一個節點安裝配置Spark即可,不要集群安裝。因為Spark應用程序提交到YARN后,YARN會負責集群資源的調度,任選一個hadoop容器來安裝spark即可。

1、啟動Zookeeper集群

 

 2、啟動hadoop集群

 3、hadoop0容器安裝配置spark,拷貝編輯spark-env.sh

 4、啟動測試

  spark的bin目錄執行命令:./spark-shell --master yarn --deploy-mode client

 5、Yarn Web界面

可以看到Spark shell應用程序正在運行,單擊ID號鏈接,可以看到該應用程序的詳細信息。

 

3、問題解決

  如果是用虛擬機搭建,可能會由於虛擬機內存過小而導致啟動失敗,比如內存資源過小,yarn會直接kill掉進程導致rpc連接失敗。所以,我們還需要配置Hadoop的yarn-site.xml文件,加入如下兩項配置:

 編輯yarn-site.xml添加如下內容即可

<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>

<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>

   如有問題,歡迎指正交流~~~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM