Spark_6 Spark on YARN

YARN

Yarn 是一個操作系統級別的統一的資源管理和調度框架
多種計算框架可以通過Yarn共享集羣資源,按需分配 ==> 可以提升資源的利用率
Yarn上可以跑:
批處理作業(MR)
交互式INTERACTIVE(Tez)
ONLINE (HBASE)
Streaming (Storm/Flink)
In-Memory (Spark)

Spark on YARN執行流程

Spark on YARN

  1. Client端將任務提交到YARN的RM中的ApplicationsManager,這其中包含Driver程序和啓動命令;
  2. ApplicationsManager會找一個NodeManager來分配第一個Container容器,用來啓動ApplicationMaster程序,ApplicationMaster啓動Driver。啓動之後Application會向ApplicationsManager註冊,彙報已經創建成功,這時可以從WebUI來觀測整個App的運行情況;
  3. ApplicationMaster會向ResourceManager的ResourceScheduler以輪詢的方式申請資源(所謂輪詢是指:如果集羣資源不夠,會先拿部分資源來運行,運行完之後釋放container再執行),申請到資源並拿到資源列表,ApplicationMaster會到對應的NodeManager上去要求分配Container,繼而啓動Executor分配各種Task。
  4. AppMaster會一直監測各個Executor的執行情況,如果掛掉會進行重跑;
  5. 當所有的Executor執行完任務,AppMaster會向ApplicationsManager註銷並關閉自己。

MR 與 Spark作業對比

  1. MR: base-process
    each task in its process: MapTask,ReduceTask process
    when a task completes,the process goes away
  2. Spark: base-thread
    many tasks can run concurrently in a single process (executor)
    一個Executor進程可以跑多個Task(這幾個Task是並行計算的)
    this process sticks around for the lifetime of the Spark Application
    lifetime of the Spark Application:
    整個Spark Application包括一個driver和多個Executor
    一個程序起來以後,即使是沒有job運行,Executor還是存在的

基於線程比基於進程的好處:
3. MapReduce啓動,因爲都是進程,啓動時資源都需要申請,結束後需要銷燬
4. Spark在申請到Executor之後,所有的task可以直接啓動,不需要再去申請資源,這樣省去了很多時間。

Cluster Manage

Spark Application ==> CM (Local,Standalone,Yarn,Mesos,K8S==> Pluggable 可插拔的)

Application Master :AM
每一個YARN Application 都會有AM (first container)
Executor runs in container ===> (memory of container > Executor memory)

Spark在YARN模式下僅僅是一個客戶端

Spark on Yarn 中,Spark僅僅只是一個客戶端而已,不需要裝一個集羣:
提交Spark作業的這臺機器必須是有GATEWAY權限的機器,只要能訪問到Hadoop的配置文件就可以了。跑Yarn的時候,只需要這臺機器作爲客戶端就可以了,並不需要slaves那些東西,所以 Spark on Yarn 僅僅只需要一臺客戶端。不需要 spark 節點 ,不需要 start-master.shstart-slaves.sh,不需要在那些節點上起任何的Spark的進程。生產上95%都跑在Yarn上的。
工作上,只要GATEWAY+spark-submit就可以了,不需要起別的任何的進程

Deploy Mode

Spark的部署模式分爲 Cluster 和 Client

  1. Client
    the Spark driver runs in the client process,AM is only used for requesting resources;
    由於AM只是需要申請資源,driver跑在本地,所以需要client監測並調度各個節點的任務,所以Client不能停掉;
    適用於交互、調試,希望立即看到 app 的輸出,Cluster模式看日誌比較麻煩,因爲不知道AM運行在那個節點上;
    默認是client模式

  2. Cluster
    the Spark driver runs inside an ApplicationMaster process which is managed by YARN;
    the Client can go away after initiating the application
    適用於生產環境

ApplicationMaster:在client模式中只是申請資源的;在 cluster模式中既申請資源又調度task。

實例

export HADOOP_CONF_DIR=/home/hadoop/software/hadoop-xxxx/etc/hadoop 
./spark-shell --master yarn
--deploy-mode DEPLOY_MODE 默認是client,所以這個啓動模式時client模式;
	注意,這裏不能使用cluster模式,會報錯:
	Error: Cluster deploy mode is not applicable to Spark shells.
	因爲spark-shell作爲一個與用戶交互的命令行,必須將Driver運行在本地,而不是yarn上
--num-executors NUM 指定YARN模式下啓動多少個Executor 默認是2個Executor

在WebUI中,顯示 RunningContainer爲3,AllocatedCPU VCores爲3
RunningContainer爲3是因爲driver佔用一個Container加上默認的2個Executor各自佔用一個Container,所以是佔用3個Container;
而默認一個Container佔用一個虛擬Core,所以AllocatedCPU VCores爲3。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章