Spark:Yarn-client與Yarn-cluster
摘要
Spark有Yarn-Client和Yarn-Cluster兩種模式可以執行在Yarn上,通常Yarn-Cluster適用於生產環境,而Yarn-Client更適用於互動,除錯模式。以下是它們的區別。
Spark插撥式資源管理
Spark支援Yarn,Mesos,Standalone三種叢集部署模式,它們的共同點:
Master服務(Yarn ResourceManager,Mesos Master,Spark Driver)來決定哪些應用可以執行以及在哪什麼時候執行。
Slave服務(Yarn NodeManger)執行在每個節點上,節點上實際執行著Executor程式,此外還監控著它們的執行狀態以及資源的消耗。
Spark On Yarn的優勢
- Spark支援資源動態共享,執行於Yarn的框架都共享一個集中配置好的資源池;
- 可以很方便的利用Yarn的資源排程特性來做分類·,隔離以及優先順序控制負載,擁有更靈活的排程策略。
- Yarn可以自由地選擇executor數量。
- 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模式下作業執行流程:
- 客戶端生成作業資訊提交給ResourceManager(RM)
- RM在某一個NodeManager(由Yarn決定)啟動container並將Application Master(AM)分配給該NodeManager(NM)
- NM接收到RM的分配,啟動Application Master並初始化作業,此時這個NM就稱為Driver
- Application向RM申請資源,分配資源同時通知其他NodeManager啟動相應的Executor
- Executor向NM上的Application Master註冊彙報並完成相應的任務
Yarn-client模式
在Yarn-client中,Application Master僅僅從Yarn中申請資源給Executor,之後client會跟container通訊進行作業的排程,下圖是Yarn-client模式
Yarn-client模式下作業執行流程:
- Spark Driver在啟動在本地,通過AM與Yarn互動
- 客戶端生成作業資訊提交給ResourceManager(RM)
- RM在叢集中選擇一個NodeManager啟動container並將Application Master(AM)分配給該NodeManager(NM)
- NM接收到RM的分配,啟動Application Master並初始化作業
- Application向RM申請資源,分配資源同時通知其他NodeManager啟動相應的Executor
- Executor向本地啟動的Application Master註冊彙報並完成相應的任務
下表是Spark Standalone與Spark On Yarn模式下的比較
相關文章
- spark與hbaseSpark
- spark 與flume 1.6.0Spark
- spark與kafaka整合workcount示例 spark-stream-kafkaSparkKafka
- Hadoop與Spark關係HadoopSpark
- spark 與 yarn 結合SparkYarn
- Spark安裝與配置Spark
- spark學習筆記--Spark調優與除錯Spark筆記除錯
- Spark Streaming的PIDRateEstimator與backpressureSpark
- Spark GraphX簡介與教程Spark
- Spark 安裝部署與快速上手Spark
- Spark Connector Reader 原理與實踐Spark
- Spark Streaming(六):快取與持久化Spark快取持久化
- Spark SQL / Catalyst 內部原理 與 RBOSparkSQL
- Spark與MapReduce的對比(區別)Spark
- Spark SQL知識點與實戰SparkSQL
- spark:自定義分割槽,自定義排序,spark與jdbc,廣播變數等Spark排序JDBC變數
- Spark之spark shellSpark
- Spark SQL中的RDD與DataFrame轉換SparkSQL
- Spark SQL知識點大全與實戰SparkSQL
- Spark UI (基於Yarn) 分析與定製SparkUIYarn
- 簡要MR與Spark在Shuffle區別Spark
- 本地windows搭建spark環境,安裝與詳細配置(jdk安裝與配置,scala安裝與配置,hadoop安裝與配置,spark安裝與配置)WindowsSparkJDKHadoop
- Spark on Yarn 和Spark on MesosSparkYarn
- Spark系列 - (3) Spark SQLSparkSQL
- spark的計算器與廣播變數Spark變數
- Spark2.4.5叢集安裝與本地開發Spark
- spark task與stage數量過多調優Spark
- pycharm下與spark的互動 詳細配置說明以及spark 執行簡單例子PyCharmSpark單例
- Spark學習進度-Spark環境搭建&Spark shellSpark
- spark sql與mysql 資料載入與匯出資料到mysqlSparkMySql
- [譯] Python 與大資料:Airflow、 Jupyter Notebook 與 Hadoop 3、Spark、PrestoPython大資料AIHadoopSparkREST
- 【Spark】Spark容錯機制Spark
- centos7 (阿里雲、linux) 單機spark的安裝與配置詳解(jdk安裝與配置,scala安裝與配置,hadoop安裝與配置,spark安裝與配置)CentOS阿里LinuxSparkJDKHadoop
- sparkSpark
- 在 mac 上建立 Python 的 Kafka 與 Spark 環境MacPythonKafkaSpark
- Spark學習(一)——執行模式與執行流程Spark模式
- Spark原始碼編譯與匯入IDEA除錯Spark原始碼編譯Idea除錯
- 深入淺出理解 Spark:環境部署與工作原理Spark