標籤:spark on yarn徹底解密
內容:
1、Hadoop Yarn的工作流程解密;
2、Spark on Yarn兩種運行模式實戰;
3、Spark on Yarn工作流程解密;
4、Spark on Yarn工作內幕解密;
5、Spark on Yarn最佳實務;
資源管理架構Yarn
Mesos是分布式叢集的資源管理架構,和大資料沒關係,但是可以管理大資料的資源
==========Hadoop Yarn解析============
1、Yarn是Hadoop推出的資源管理員,是負責分布式(大資料)叢集計算的資源管理的,負責資源的管理和分配,基於Yarn我們可以在同一個大資料集群上同時運行多個計算架構,例如Spark、MapReduce、Storm等;
2、Yarn基本工作流程如所示:
650) this.width=650;" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />
Resource Manager管理整個叢集的資源(主要記憶體、CPU,有可能包括磁碟IO和網路IO);
每台機器Node Manager管理每個幾點資源,並向Resource Manager彙報當前機器的資源情況;
由於每台都會彙報,所以Resource Manager知道如何管理。
當用戶端提交程式給Resource Manager的時候,Resource Manager會根據自己對叢集資源狀況掌握的情況,在具體機器上啟動一個進程來運行用戶端提交的程式,此時Resource Manager就是整個叢集的Master。
Resource Manager不會到具體機器上啟動進程,它只會命令Node Manager來啟動相應的進程。
App Mstr就是當前提交程式的Driver,它啟動的時候,就會跟Resource Manager申請資源,Resource Manager會根據資源情況給App Mstr返回資源情況。
Container是封裝資源的容器。向NodeManager彙報資源資訊,想App Mstr彙報計算資訊。
=====>總結:
3、用戶端向Resource Manager提交程式,Resource Manager接受應用程式,並根據叢集資源的狀況決定在具體某個node上來啟動當前提交的應用程式的任務調度器driver(App Mstr),決定後會命令具體的某個node上的資源管理員(Node Manager)來啟動一個新的JVM進程,運行程式的Drvier部分,當App Mstr啟動的時候(會首先向Resource Manager 註冊說明自己負責當前程式的運行),會下載當前App相關的jar等各種資源並基於此決定具體向Resource Manager申請資源的具體內容,Resource Manager接收到App Mastr的資源分派的請求之後會最大化的滿足資源分派的請求,並把資源的中繼資料資訊發送給App Mastr,App Mastr收到資源的中繼資料資訊後,會根據中繼資料資訊髮指令給具體機器上的Node Manager,讓Node Manager來啟動具體的Container,Container在啟動後必須向App Mastr註冊,當App Mstr獲得了用於計算的Containers後,開始進行任務的調度和計算,直到作業執行完成。需要補充說明的是,如果Resource Manager 第一次沒有能夠完全完成請求的資源分派,後續Resource Manager發現叢集中有新的可用時,會主動向App Mastr發送新的可用資源的中繼資料資訊以提供更多的資源用於當前程式的運行;
補充說明:
1)Container如果是Hadoop的MapReduce的計算的話,Container不可以複用,如果是Spark On Yarn,Container可以複用;
2)Container具體的銷毀,是由Application Master來決定的;
==========Spark on Yarn兩種運行模式實戰 ============
啟動yarn,start-yarn
650) this.width=650;" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />
master:8088 看yarn的控制台
啟動hadoop的曆史資訊
mr-jobhistory-daemon.sh start historyserver --config $HADOOP_CONF_DIR
master:19888 看控制台
此時不需要啟動Spark叢集,只需要啟動Yarn即可,Yarn的Resource Manager,就相當於Spark Standalone模式下Master!
1、Spark on Yarn兩種運行模式,唯一的決定因素是,當前Applicatio的任務調度器Drvier運行在什麼地方:
1)Cluster:Driver運行在Yarn叢集下的某台機器上的JVM進程中;
2)Client:Driver運行在當前提交程式的客戶機器上;
需要說明的是:無論什麼模式,只要當前機器運行了Spark代碼,就必須安裝Spark!
2、運行Pi
1)client模式:方便在命令終端直接看到啟動並執行過程資訊,尤其方便做測試使用;
./spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode client ../lib/spark-examples-1.6.0-hadoop2.6.0.jar 50000
如果沒啟動yarn
會報嘗試串連yarn,說明根本不用啟動Spark叢集,Spark叢集本身啟動的就是Master和Worker,其實它本身就是資源管理架構,而yarn就是替代了它的作用。
16/02/13 21:04:07 INFO ipc.Client: Retrying connect to server: Master/192.168.145.131:8032. Already tried 0 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)
16/02/13 21:04:08 INFO ipc.Client: Retrying connect to server: Master/192.168.145.131:8032. Already tried 1 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)
16/02/13 21:04:09 INFO ipc.Client: Retrying connect to server: Master/192.168.145.131:8032. Already tried 2 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)
16/02/13 21:04:10 INFO ipc.Client: Retrying connect to server: Master/192.168.145.131:8032. Already tried 3 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)
16/02/13 21:04:11 INFO ipc.Client: Retrying connect to server: Master/192.168.145.131:8032. Already tried 4 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)
16/02/13 21:04:12 INFO ipc.Client: Retrying connect to server: Master/192.168.145.131:8032. Already tried 5 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)
16/02/13 21:04:13 INFO ipc.Client: Retrying connect to server: Master/192.168.145.131:8032. Already tried 6 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)
天機解密:Standalone模式下,啟動Spark叢集也就是啟動Master和Worker,其實啟動的是資源管理員。真正作業計算的時候和叢集資源管理員沒有任何關係。所以Spark的Job不是真正執行作業的時候不是運行在你啟動的Spark叢集中的,而是運行在一個個JVM中的,只要你在JVM所在的機器上安裝配置了Spark即可!!!
2)cluster模式:方便在命令終端直接看到啟動並執行過程資訊,尤其方便做測試使用;
./spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode cluster../lib/spark-examples-1.6.0-hadoop2.6.0.jar 50000
3、Spark on Yarn模式下Driver和Application Master的關係:
1)Cluster:Drvier位於Appliation Master進程中,我們需要通過Hadoop預設指定的8088連接埠來通過Web控制台查看當前的Spark程式啟動並執行資訊;
2)Client:Drvier位於提交代碼的機器上,此時Application Master依舊位於叢集中,且只負責資源的申請,和launch executor,此時啟動後的Executor並不會向Application Master註冊,只是向Drvier註冊!!!
==========Spark on Yarn最佳實務 ============
1、在Spark on Yarn模式下,Hadoop Yarn的配置yarn.nodemanager.local-dir會覆蓋Spark的spark.local.dir!!!
2、在實際上產環境下,一般都是採用Cluster模式,我們會通過historyServer來擷取最終全部的運行資訊;
3、如果想直接看啟動並執行日誌資訊,可以使用以下命令:
yarn logs -applicationID <app ID>
王家林老師名片:
中國Spark第一人
新浪微博:http://weibo.com/ilovepains
公眾號:DT_Spark
部落格:http://blog.sina.com.cn/ilovepains
手機:18610086859
QQ:1740415547
郵箱:[email protected]
本文出自 “一枝花傲寒” 部落格,謝絕轉載!
Spark on Yarn徹底解密(DT大資料夢工廠)