1. 程式人生 > >Spark Yarn-cluster與Yarn-client

Spark Yarn-cluster與Yarn-client

-s 生成 med apache 分享 多個 submit cat 方便

總覽二者

在Spark中,有Yarn-Client和Yarn-Cluster兩種模式可以運行在Yarn上,通常Yarn-Cluster適用於生產環境,而Yarn-Clientr更適用於交互,調試模式,以下是它們的區別 Spark插撥式資源管理 Spark支持Yarn,Mesos,Standalone三種集群部署模式,它們的共同點:Master服務(Yarn ResourceManager,Mesos master,Spark standalone)來決定哪些應用可以運行以及在哪什麽時候運行,Slave服務(Yarn NodeManger)運行在每個節點上,節點上實際運行著Executor進程,此外還監控著它們的運行狀態以及資源的消耗 Spark On Yarn的優勢
1. Spark支持資源動態共享,運行於Yarn的框架都共享一個集中配置好的資源池 2. 可以很方便的利用Yarn的資源調度特性來做分類·,隔離以及優先級控制負載,擁有更靈活的調度策略 3.Yarn可以自由地選擇executor數量 4.Yarn是唯一支持Spark安全的集群管理器,使用Yarn,Spark可以運行於Kerberized Hadoop之上,在它們進程之間進行安全認證 Yarn-cluster VS Yarn-client 當在Spark On Yarn模式下,每個Spark Executor作為一個Yarn container在運行,同時支持多個任務在同一個container中運行,極大地節省了任務的啟動時間 Appliaction Master
為了更好的理解這兩種模式的區別先了解下Yarn的Application Master概念,在Yarn中,每個application都有一個Application Master進程,它是Appliaction啟動的第一個容器,它負責從ResourceManager中申請資源,分配資源,同時通知NodeManager來為Application啟動container,Application Master避免了需要一個活動的client來維持,啟動Applicatin的client可以隨時退出,而由Yarn管理的進程繼續在集群中運行 Yarn-cluster 在Yarn-cluster模式下,driver運行在Appliaction Master上,Appliaction Master進程同時負責驅動Application和從Yarn中申請資源,該進程運行在Yarn container內,所以啟動Application Master的client可以立即關閉而不必持續到Application的生命周期,下圖是yarn-cluster模式 技術分享圖片
Yarn-cluster模式下作業執行流程: 1. 客戶端生成作業信息提交給ResourceManager(RM) 2. RM在某一個NodeManager(由Yarn決定)啟動container並將Application Master(AM)分配給該NodeManager(NM) 3. NM接收到RM的分配,啟動Application Master並初始化作業,此時這個NM就稱為Driver 4. Application向RM申請資源,分配資源同時通知其他NodeManager啟動相應的Executor 5. Executor向NM上的Application Master註冊匯報並完成相應的任務
Yarn-client 在Yarn-client中,Application Master僅僅從Yarn中申請資源給Executor,之後client會跟container通信進行作業的調度,下圖是Yarn-client模式 技術分享圖片 Yarn-client模式下作業執行流程: 1. 客戶端生成作業信息提交給ResourceManager(RM) 2. RM在本地NodeManager啟動container並將Application Master(AM)分配給該NodeManager(NM) 3. NM接收到RM的分配,啟動Application Master並初始化作業,此時這個NM就稱為Driver 4. Application向RM申請資源,分配資源同時通知其他NodeManager啟動相應的Executor 5. Executor向本地啟動的Application Master註冊匯報並完成相應的任務 下表是Spark Standalone與Spark On Yarn模式下的比較
技術分享圖片技術分享圖片 經過測試:scala和java打JAR包的形式通過spark-submit提交spark應用,在yarn-client和yarn-cluster均可以正常調用JAR包裏的類和方法, 但是python通過這二種方式進行提交spark任務時會不一樣,要在yarn-client模式中使用Spark,您需要將任何依賴項安裝到機器上,以啟動執行器。 這是唯一確定的方法。也就是通過類似jar包的形式用--py-files是不行的;用yarn-cluster的模式用--py-files加載的zip/egg/py文件是可以正常調用的。 這裏難道還區別對待python嗎?? 參考資料:Apache Spark Resource Management and YARN App Models https://stackoverflow.com/questions/35214231/importerror-no-module-named-numpy-on-spark-workers

Spark Yarn-cluster與Yarn-client