1. 程式人生 > >Spark on Yarn解密及執行流程

Spark on Yarn解密及執行流程

一、Hadoop Yarn解析

1,Yarn是Hadoop推出整個分散式(大資料)叢集的資源管理器,負責資源的管理和分配,基於Yarn我們可以在同一個大資料叢集上同時執行多個計算框架,例如Spark、MapReduce、Storm等;
2,Yarn基本工作流程如下圖所示:
這裡寫圖片描述

注意:Container要向NodeManager彙報資源資訊,Container(程式設計師)要向App Mstr(專案經理)彙報計算資訊;

3,客戶端Client向ResourceManager(老總,管理整個叢集的資源)提交Application,ResourceManager接受應用並根據叢集資源狀況決定在某個具體Node上來啟動當前提交的應用程式的任務排程器Driver(ApplicationMaster),決定後ResourceManager會命令具體的某個Node上的資源管理器NodeManager(管理當前機器的記憶體,cpu等資源的)來啟動一個新的JVM程序執行程式的Driver部分,當ApplicationMaster啟動的時候(會首先向ResourceManager註冊來說明自己負責當前程式的執行)會下載當前Application相關的Jar等各種資源並基於此決定具體向ResourceManager申請資源的具體內容,ResourceManager接受到ApplicationMaster的資源分配的請求之後會最大化的滿足資源分配的請求併發送資源的元資料資訊給ApplicationMaster,ApplicationMaster收到資源的元資料資訊後會根據元資料資訊發指令給具體機器上的NodeManager讓NodeManager來啟動具體的Container,Container在啟動後必須向AppplicationMaster註冊,當ApplicationMaster獲得了用於計算的Containers後,開始進行任務的排程和計算,直到作業的完成。需要補充說的是,如果ResourceManager第一次沒有能夠完全完成ApplicationMaster分配的資源的請求,後續ResourceManager發現叢集中有新的可用資源時候,會主動向ApplicationMaster傳送新的可用資源的元資料資訊以提供更多的資源用於當前程式的執行!
補充說明:
1、container如果是Hadoop的MapReduce,不可複用,Spark on Yarn 可以複用
2.Container的銷燬由具體的ApplicationManager銷燬,ApplicationManager發指令給NodeManager來銷燬Container

擴充套件:新舊 Hadoop MapReduce 框架比對

讓我們來對新舊 MapReduce 框架做詳細的分析和對比,可以看到有以下幾點顯著變化:

首先客戶端不變,其呼叫 API 及介面大部分保持相容,這也是為了對開發使用者透明化,使其不必對原有程式碼做大的改變 ,但是原框架中核心的 JobTracker 和 TaskTracker 不見了,取而代之的是 ResourceManager, ApplicationMaster 與 NodeManager 三個部分。

我們來詳細解釋這三個部分,首先 ResourceManager 是一箇中心的服務,它做的事情是排程、啟動每一個 Job 所屬的 ApplicationMaster、另外監控 ApplicationMaster 的存在情況。細心的讀者會發現:Job 裡面所在的 task 的監控、重啟等等內容不見了。這就是 AppMst 存在的原因。ResourceManager 負責作業與資源的排程。接收 JobSubmitter 提交的作業,按照作業的上下文 (Context) 資訊,以及從 NodeManager 收集來的狀態資訊,啟動排程過程,分配一個 Container 作為 App Mstr

NodeManager 功能比較專一,就是負責 Container 狀態的維護,並向 RM 保持心跳。

ApplicationMaster 負責一個 Job 生命週期內的所有工作,類似老的框架中 JobTracker。但注意每一個 Job(不是每一種)都有一個 ApplicationMaster,它可以執行在 ResourceManager 以外的機器上。

Yarn 框架相對於老的 MapReduce 框架什麼優勢呢?我們可以看到:

這個設計大大減小了 JobTracker(也就是現在的 ResourceManager)的資源消耗,並且讓監測每一個 Job 子任務 (tasks) 狀態的程式分散式化了,更安全、更優美。

在新的 Yarn 中,ApplicationMaster 是一個可變更的部分,使用者可以對不同的程式設計模型寫自己的 AppMst,讓更多型別的程式設計模型能夠跑在 Hadoop 叢集中,可以參考 hadoop Yarn 官方配置模板中的 mapred-site.xml 配置。

對於資源的表示以記憶體為單位 ( 在目前版本的 Yarn 中,沒有考慮 cpu 的佔用 ),比之前以剩餘 slot 數目更合理。

老的框架中,JobTracker 一個很大的負擔就是監控 job 下的 tasks 的執行狀況,現在,這個部分就扔給 ApplicationMaster 做了,而 ResourceManager 中有一個模組叫做 ApplicationsMasters( 注意不是 ApplicationMaster),它是監測 ApplicationMaster 的執行狀況,如果出問題,會將其在其他機器上重啟。

Container 是 Yarn 為了將來作資源隔離而提出的一個框架。這一點應該借鑑了 Mesos 的工作,目前是一個框架,僅僅提供 Java 虛擬機器記憶體的隔離 ,hadoop 團隊的設計思路應該後續能支援更多的資源排程和控制 , 既然資源表示成記憶體量,那就沒有

二、Spark on Yarn 兩種執行模式
Spark on yarn的兩種執行模式實戰:此時不需要啟動spark叢集,只需啟動yarn即可!yarn的ResourceManager相當於spark standalone模式下的master!

1.spark on yarn的兩種執行模式:唯一的決定因素是當前application從任務排程器driver執行在什麼地方!

a) Cluster:driver執行的yarn叢集下的某臺機器上的jvm程序中!!!

b) Client:driver執行在當前提交程式的客戶機器上,需要說明的是:無論是什麼模式,只要當前機器運行了spark程式碼,就必須安裝spark!

2.Spark on yarn的執行實戰:

a) 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

這裡寫圖片描述
這裡寫圖片描述

並行度變成50000,相當於50000臺機器(1000-》50000)

Spark天機解密:Standalone模式下啟動Spark叢集(也就是啟動Master和Worker)其實啟動的是資源管理器,真正作業計算的時候和叢集資源管理器沒有任何關係,所以Spark的Job真正執行作業的時候不是執行在你啟動的Spark叢集中的,而是執行在一個個JVM中的,只要在JVM所在的機器上安裝配置了Spark即可!!!

3.Spark on yarn 模式下Driver和application的關係:
這裡寫圖片描述

a) cluster:driver位於ApplicationMaster程序中,我們需要通過hadoop預設指定的8088埠來通過web控制檯檢視當前的spark程式執行的資訊,例如進度,資源的使用;

b) client:driver為提交程式碼的機器上,此時applicationmaster依舊位於叢集中且只負責資源的申請和launchExecutor,此時啟動後的executor並不會向applicationmaster程序註冊,而是向driver註冊!

三 最佳實踐

1. Spark on yarn 模式下hadoop yarn的配置yarn.nodemanager.local-dir會覆蓋spark.local.dir!!!

2. 在實際生產環境下一版是採用cluster,我們會通過history server來獲取最終全部的執行資訊;

3. 如果想直接看執行的日誌資訊,可以使用一下命令:

Yarn  logs –applicationId <app ID>

相關推薦

Spark on Yarn解密執行流程

一、Hadoop Yarn解析 1,Yarn是Hadoop推出整個分散式(大資料)叢集的資源管理器,負責資源的管理和分配,基於Yarn我們可以在同一個大資料叢集上同時執行多個計算框架,例如Spark、MapReduce、Storm等; 2,Yarn基本工作

記2018最後一次問題診斷-Spark on Yarn所有任務執行失敗

  2018的最後一個工作日,是在調式和診斷問題的過程中度過,原本可以按時下班,畢竟最後一天了,然鵝,確是一直苦苦掙扎。   廢話不多說,先描述一下問題:有一套大資料環境,是CDH版本的,總共4臺機子,我們的應用程式與大資料叢集之前已經整合完畢,除錯沒有問題,可以執行Spark任務。而與這個叢集整合是17年

Spark on YARN簡介與執行wordcount(master、slave1和slave2)(博主推薦)

前期部落格 Spark On YARN模式   這是一種很有前景的部署模式。但限於YARN自身的發展,目前僅支援粗粒度模式(Coarse-grained Mode)。這是由於YARN上的Container資源是不可以動態伸縮的,一旦Container啟動之後,可使用

spark on yarn作業執行流程

Spark是一個分散式資料快速分析專案。它的核心技術是彈性分散式資料集(Resilient Distributed Datasets),提供了比MapReduce豐富的模型,可以快速在記憶體中對資料集進行多次迭代,來支援複雜的資料探勘演算法和圖形計算演算法。 Spark

Spark面試:Spark on yarn 執行流程

一: Spark on YARN能讓Spark計算模型在雲梯YARN叢集上執行,直接讀取雲梯上的資料,並充分享受雲梯YARN叢集豐富的計算資源。 二: 基於YARN的Spark作業首先由客戶端生成作業資訊,提交給ResourceManager, ResourceManager在某一 Node

spark on yarn執行產生缺jar包錯誤解決辦法

1、本地執行出錯及解決辦法 當執行如下命令時: ./bin/spark-submit \ --class org.apache.spark.examples.mllib.JavaALS \ --master local[*] \ /opt/cloudera/p

Spark的分散式執行模式 Local,Standalone, Spark on Mesos, Spark on Yarn, Kubernetes

Spark的分散式執行模式 Local,Standalone, Spark on Mesos, Spark on Yarn, Kubernetes Local模式 Standalone模式 Spark on Mesos模式 Spark on Yarn

spark學習-執行spark on yarn 例子和檢視日誌.

要通過web頁面檢視執行日誌,需要啟動兩個東西 hadoop啟動jobhistoryserver和spark的history-server. 相關配置檔案: etc/hadoop/mapred-site.xml <!--配置jobh

Spark on Yarn 檢視日誌狀態的命令

1、檢視某個job的日誌 yarn logs -applicationId application_1515118561637_0439 2、檢視某個job的狀態 yarn application -

Spark on Yarn任務執行的日誌收集

Spark on yarn 環境:基於CDH的大資料元件平臺。 yarn服務有resource manager和node manager組成,在yarn上執行的任務,由一個ApplicationMaster和多個container組成。 Spark 執行由一個drive

spark on yarn圖形化任務監控利器:History-server幫你理解spark的任務執行過程

在spark on yarn任務進行時,大家都指導用4040埠監控(預設是,設定其他或者多個任務同時會遞增等例外); 辣麼,任務結束了,還要看圖形化介面,那就要開history-server了。CDH安裝spark on yarn的時候,就自動安裝了history的例項。

Spark on YARN cluster & client 模式作業執行全過程分析

原文連結列表如下,致謝: https://www.iteblog.com/archives/1223.html https://www.iteblog.com/archives/1189.html https://www.iteblog.com/archives/1191.html

Spark on YARN client模式作業執行全過程分析

      在前篇文章中我介紹了Spark on YARN叢集模式(yarn-cluster)作業從提交到執行整個過程的情況(詳情見《Spark on YARN叢集模式作業執行全過程分析》),我們知道Spark on yarn有兩種模式:yarn-cluster和yarn-client。這兩種模式作業雖然都是

Hadoop 分散式配置Spark on yarn部署

配置Hadoop Hadoop的叢集部署模式需要修改Hadoop資料夾中/etc/hadoop/中的配置檔案,更多設定項可見官方說明,這裡只設置了常見的設定項:hadoop-env.sh,yarn-env.sh、core-site.xml、hdfs-site.xml、mapred-site.

spark on yarn執行產生jar包衝突問題

1.1 問題描述 Spark Streaming程式解析protobuf序列化的資料時,--jars 來新增依賴的protobuf-java-3.0.0.jar包,使用local模式程式正常,使用yarn模式時會報找不到方法的錯誤,如下所示: 1.2 解決方法 分析local模式能執行,yarn模式不能執行

Spark on yarn Intellij ide 安裝,編譯,打包,叢集執行 詳解

說明:已經安裝好hadoop2.2.0 完全分佈,scala,spark已安裝好,環境配置完畢;主機為hadoop-master,hadoop-slave 一.intellij 安裝(centos6.5系統) 步驟一。 1.將上述兩個安裝

Spark on yarn--幾種提交叢集執行spark程式的方式

今天看了spark的yarn配置,本來想著spark在hadoop叢集上啟動之後,還需要配置spark才能讓yarn來管理和排程spark的資源,原來啟動master和worker之後就會讓yarn來

Spark On Yarn 詳細配置流程

1、系統與軟體準備 系統:centos7軟體:  hadoop-2.7.2.tar.gz,請勿選擇src版本,否則需要自行編譯 jdk-7u79-linux-x64.tar.gz  scala-2.10.3.tgz  spark-1.6.1-bin-hadoop2.6.t

Spark -6:執行Spark on YARN

翻譯:http://spark.apache.org/docs/latest/running-on-yarn.html 支援在YARN上執行(Hadoop NextGen)在Spark0.6.0版本,並在以後的版本中得到改進。 在YARN上啟動Spark 確保HADOO

Mark :Hive使用Spark on Yarn作為執行引擎

原文:http://lxw1234.com/archives/2016/05/673.htmHive從1.1之後,支援使用Spark作為執行引擎,配置使用Spark On Yarn作為Hive的執行引擎,首先需要注意以下兩個問題:Hive的版本和Spark的版本要匹配;具體來