Spark on Yarn 部分一原理及使用

Spark on Yarn

首先這部分分為源碼部分以及實(shí)例部分钞楼,例子中包括最基本的通過spark-submit提交以及程序中提交yarn
這里僅僅說明Spark on Yarn的第一部分匀归,分為三塊:

  • 原理
  • spark-submit提交yarn程序
  • IDEA代碼提交yarn程序

1 原理

Spark yarn 模式有兩種衡未, yarn-client, yarn-cluster, 其中yarn-client適合測(cè)試環(huán)境歇式, yarn-cluster適合生產(chǎn)環(huán)境。
在詳細(xì)說明Yarn模式之前孩等, 需要先了解幾個(gè)名詞
ResourceManager: 整個(gè)集群只有一個(gè), 負(fù)責(zé)集群資源的統(tǒng)一管理和調(diào)度璃哟, 因?yàn)檎麄€(gè)集群只有一個(gè),所以也有單點(diǎn)問題喊递,
NodeManager: 它可以理解為集群中的每一臺(tái)slave
AM: application master, 對(duì)于每一個(gè)應(yīng)用程序都有一個(gè)AM, AM主要是向RM申請(qǐng)資源(資源其實(shí)就是Container随闪, 目前這個(gè)Container就是cpu cores, memory), 然后在每個(gè)NodeManager上啟動(dòng)Executors(進(jìn)一步分布資源給內(nèi)部任務(wù)), 監(jiān)控跟蹤應(yīng)用程序的進(jìn)程等骚勘。
這里就引入了YARN的調(diào)度框架問題: 雙層調(diào)度框架
(1)RM統(tǒng)一管理集群資源铐伴,分配資源給AM
(2)AM將資源進(jìn)一步分配給Tasks

1.1 Yarn-cluster模式

Yarn-cluster

下面來具體說說Spark Yarn Cluster的流程:
(1) Client端啟動(dòng)應(yīng)用程序,提交APP到Y(jié)ARN RM
(2)RM收到請(qǐng)求之后俏讹, 就會(huì)在集群中隨機(jī)選擇一個(gè)NM盛杰, 為該應(yīng)用程序分配第一個(gè)Container, 然后在這個(gè)Contaiiner上啟動(dòng)AM藐石,AM則實(shí)現(xiàn)了SC等的初始化
(3)AM啟動(dòng)時(shí)會(huì)向RM注冊(cè)即供,并向RM申請(qǐng)資源
(4)AM一旦申請(qǐng)到資源也就是Container之后, 會(huì)在對(duì)應(yīng)的Container(Container信息里面會(huì)包含NM節(jié)點(diǎn)信息)啟動(dòng)Executor
(5)AM的SC會(huì)分配任務(wù)及給Executor進(jìn)行執(zhí)行(之前Executor會(huì)去向AM中的SC注冊(cè))于微, 同時(shí)EXecutor會(huì)向AM匯報(bào)運(yùn)行的狀態(tài)和進(jìn)度逗嫡,也就是上面綠色的通信
(6)AM向RM注冊(cè)之后, AM會(huì)定時(shí)向RM匯報(bào)程序的運(yùn)行狀態(tài)等信息株依,也就是上面紅色部分的通信驱证。

1.2 Yarn-client

Yarn-Client

其具體流程和上面的yarn-cluster很類似
(1) Client端啟動(dòng)應(yīng)用程序,提交APP到Y(jié)ARN RM恋腕, 這個(gè)過程則涉及到SC的初始化抹锄,SC啟動(dòng)時(shí)會(huì)去初始化DAGScheduler調(diào)度器, 使用反射方法去初始化YarnScheduler 和 YarnClientSchedulerBackend荠藤,最終Client會(huì)去向RM申請(qǐng)啟動(dòng)AM
(2)RM收到請(qǐng)求之后伙单, 就會(huì)在集群中隨機(jī)選擇一個(gè)NM, 為該應(yīng)用程序分配第一個(gè)Container哈肖, 然后在這個(gè)Contaiiner上啟動(dòng)AM吻育,AM則實(shí)現(xiàn)了SC等的初始化, 此處與yarn-cluster不同的是淤井,SC的初始化驅(qū)動(dòng)程序的啟動(dòng)并不在AM中布疼, 也就是AM并不是Driver端,但是AM會(huì)和SC通信來獲取其需要的資源情況(多少cpu, 多少memory)
(3)當(dāng)客戶端的SC與AM啟動(dòng)完畢币狠,會(huì)通信游两, AM可知道SC需要的資源情況, 然后AM會(huì)向RM注冊(cè)漩绵, 并向RM申請(qǐng)資源Container
(4)AM申請(qǐng)到資源Container之后贱案, 會(huì)與COntainer對(duì)應(yīng)的NodeManager通信, 要求他在其Container里面啟動(dòng)Executor渐行, 然后去向客戶端的SparkContext注冊(cè)轰坊, 并申請(qǐng)任務(wù)集Tasks
(5)客戶端的SC分配任務(wù)集給Executor铸董,
(6)應(yīng)用程序運(yùn)行結(jié)束之后,客戶端的SC會(huì)向RM申請(qǐng)資源釋放并去關(guān)閉自己肴沫,kill進(jìn)程等

上面的流程介紹完之后粟害, 來對(duì)比一下YARN-CLUSTER 與 yarn-client的區(qū)別:
其主要區(qū)別的是AM的作用不大一樣,
yarn-client模式下:AM僅僅向RM請(qǐng)求資源颤芬, 然后AM會(huì)在對(duì)應(yīng)的Container中要求其所屬NodeManager去啟動(dòng)Executor悲幅, Client會(huì)去與此Container Executor通信, 也就是整個(gè)程序運(yùn)行過程中站蝠, Client不能離開
yarn-cluster模式: Driver運(yùn)行在AM中汰具,也就是SC與Executor的所有通信操作都與Client無關(guān)了, 在提交完應(yīng)用程序之后菱魔,Client就可以離開了留荔。

2 spark-submit提交到y(tǒng)arn

首先安裝好Hadoop 并配置好Yarn, 之后啟動(dòng)sbin/start-yarn.sh

其次針對(duì)Spark的spark-env.sh里面增加:

export HADOOP_CONF_DIR=/home/kason/bigdata/hadoop-2.7.4/etc/hadoop
export YARN_CONF_DIR=/home/kason/bigdata/hadoop-2.7.4/etc/hadoop

下面說明一個(gè)最基本的應(yīng)用程序

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object SparkDemo {

  def main(args: Array[String]): Unit = {

    val conf: SparkConf = new SparkConf().setAppName("SparkDEMO")
    val sc: SparkContext = new SparkContext(conf)

    val dataRDD: RDD[Int] = sc.parallelize(Array(1,2,3,4))

    dataRDD.foreach(print)
    print(dataRDD.count())
  }
}

通過maven編譯成jar包澜倦, 然后通過spark-shell去提交此jar包到y(tǒng)arn上

./bin/spark-submit --class SparkDemo --master yarn --deploy-mode cluster --driver-memory 1G --executor-memory 1G --executor-cores 1 /home/kason/workspace/BigdataComponents/SparkLearn/target/SparkLearn-1.0-SNAPSHOT.jar

提交之后顯示:

image.png
image.png

根據(jù)Yarn上的application id找到對(duì)應(yīng)日志:

image.png

3 IDEA代碼提交到y(tǒng)arn

通過IDEA實(shí)現(xiàn)代碼提交其實(shí)很簡單聚蝶, 主要是設(shè)置Master, Yarn模式不像mesos以及standalone模式通過傳輸url來實(shí)現(xiàn)資源管理藻治, yarn模式實(shí)際上是Hadoop Yarn接管資源管理碘勉,具體代碼如下:

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object SparkDemo {

  def main(args: Array[String]): Unit = {

    val conf: SparkConf = new SparkConf().setAppName("SparkDEMO")
        .setMaster("yarn")
      //.setMaster("spark://kason-pc:7077")
      .set("spark.yarn.jars","hdfs://kason-pc:9000/system/spark/yarn/jars/*")
        .setJars(List("/home/kason/workspace/BigdataComponents/out/artifacts/SparkLearn_jar/SparkLearn.jar"))
      //.setJars(GETJars.getJars("/home/kason/workspace/BigdataComponents/spark-main/target/spark-main/WEB-INF/lib"))
    val sc: SparkContext = new SparkContext(conf)


    val dataRDD: RDD[Int] = sc.parallelize(Array(1,2,3,4))

    val result = dataRDD.map(res => res * 2)
    result.collect().foreach(println(_))
    print(result.count())
  }
}

運(yùn)行spark之后, 去8088yarn頁面去查看一下:

image.png

注意IDEA代碼提交到y(tǒng)arn只能使用yarn-client模式

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末桩卵,一起剝皮案震驚了整個(gè)濱河市验靡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌雏节,老刑警劉巖胜嗓,帶你破解...
    沈念sama閱讀 212,294評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異矾屯,居然都是意外死亡兼蕊,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,493評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門件蚕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人产禾,你說我怎么就攤上這事排作。” “怎么了亚情?”我有些...
    開封第一講書人閱讀 157,790評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵妄痪,是天一觀的道長。 經(jīng)常有香客問我楞件,道長衫生,這世上最難降的妖魔是什么裳瘪? 我笑而不...
    開封第一講書人閱讀 56,595評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮罪针,結(jié)果婚禮上彭羹,老公的妹妹穿的比我還像新娘。我一直安慰自己泪酱,他們只是感情好派殷,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,718評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著墓阀,像睡著了一般毡惜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上斯撮,一...
    開封第一講書人閱讀 49,906評(píng)論 1 290
  • 那天经伙,我揣著相機(jī)與錄音,去河邊找鬼勿锅。 笑死橱乱,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的粱甫。 我是一名探鬼主播泳叠,決...
    沈念sama閱讀 39,053評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼茶宵!你這毒婦竟也來了危纫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,797評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤乌庶,失蹤者是張志新(化名)和其女友劉穎种蝶,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瞒大,經(jīng)...
    沈念sama閱讀 44,250評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡螃征,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,570評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了透敌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盯滚。...
    茶點(diǎn)故事閱讀 38,711評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖酗电,靈堂內(nèi)的尸體忽然破棺而出魄藕,到底是詐尸還是另有隱情,我是刑警寧澤撵术,帶...
    沈念sama閱讀 34,388評(píng)論 4 332
  • 正文 年R本政府宣布背率,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏寝姿。R本人自食惡果不足惜交排,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,018評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望饵筑。 院中可真熱鬧埃篓,春花似錦、人聲如沸翻翩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,796評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嫂冻。三九已至胶征,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間桨仿,已是汗流浹背睛低。 一陣腳步聲響...
    開封第一講書人閱讀 32,023評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留服傍,地道東北人钱雷。 一個(gè)月前我還...
    沈念sama閱讀 46,461評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像吹零,于是被迫代替她去往敵國和親罩抗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,595評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容