1、你要切換到yarn-cluster或者yarn-client模式,很簡單,將我們之前用於提交spark應用程序的spark-submit腳本,加上--master參數,設置為yarn-cluster,或yarn-client,即可。如果你沒設置,那么,就是standalone模式。
2、yarn集群分為主節點和從節點,一個主節點是ResourceManager(RM),多個從節點是NodeManager(NM)。
3、
3.1、如果是yarn-cluster模式,spark-submit在提交的時候請求到ResourceManager,請求來啟動ApplicationMaster,ResourceManager接收到請求后會分配一個container,在某個NodeManager上啟動ApplicationMaster,ApplicationMaster(AM)啟動后會反過來向ResourceManager進行通訊,其實這個ApplicationMaster就相當於是driver,AM找RM請求container,啟動excutor,然后RM會分配一批container,用於啟動executor,AM鏈接其他的NM,來啟動executor,這里的NM相當於worker,executor向AM反向注冊。ResourceManager相當於之前的master。
3.2、yarn-client模式,spark-submit在提交的時候發送給RM,請求啟動AM,分配一個container,在某個NM上,啟動AM,但是這里的AM只是一個ExecutorLauncher,功能是很有限的。AM啟動后會找RM申請container,啟動executor,AM鏈接其他的NM,用container的資源來啟動executor。executor會反向注冊到本地的driver上。
4區別:yarn-cluster的driver相當於就是在NodeManager的某一個ApplicationMaster,yarn-client的driver還是在本地啟動的一個進程,在NodeManager啟動的ApplicationMaster只是一個ExecutorLauncher,ExecutorLauncher只會想ResourceManager申請資源,然后用Container資源去連接其他的NodeManager,然后去啟動Executor,executor啟動后會反向注冊到提交應用程序的本地客戶端driver進程上,然后本地客戶端的driver進程里DAGScheduler,TaskScheduler會大量進行task的調度,發送到NodeManager的executor中。
yarn-client vs yarn-cluster
yarn-client主要用於測試,因為driver運行在本地客戶端,負責調度Application ,會與yarn集群產生大量的網絡通信,好處是執行時,本地可以看到所有的log,方便調試。
yarn-cluster用於生產環境,driver運行在nodemanager,沒有網卡流量激增的問題,缺點是不方便調試,只能同過yarn application -log applacation_id查看。