Livy Session 詳解(中)

本文基于 incubator-livy 0.4.0-incubating

Livy Session 詳解(上) - 簡書 一文主要介紹了 session 整體的啟動(dòng)流程并詳細(xì)分析了 client 端(livy server 端)是如何啟動(dòng) driver 以及建立連接的睛竣。本文將進(jìn)一步分析 session server 端(即 driver 內(nèi)部)是如何啟動(dòng)淫痰、初始化的以及執(zhí)行代碼片段的凶伙。

注:如果對(duì) livy 的整體架構(gòu)以及 session client 端不了解直焙,請(qǐng)先閱讀以下兩篇相關(guān)文章:

一、整體啟動(dòng)撞反、初始化流程

如上圖所示宰睡,driver 內(nèi)部的啟動(dòng)流程可以分為以下五個(gè)步驟:

  1. 創(chuàng)建 ReplDriver 實(shí)例
  2. 初始化 server
  3. 初始化 SparkContext
  4. 創(chuàng)建 JobContextImpl 實(shí)例并執(zhí)行 jobs
  5. 等待退出

1.1、創(chuàng)建 ReplDriver 實(shí)例

ReplDriver 是 InteractiveSession 對(duì)應(yīng)的 Spark App driver熟妓,用來接收 livy server 的各種請(qǐng)求并進(jìn)行處理。也是 RSCDriver 的子類栏尚,RSCDriver:

  • 持有等待 RSCClient 進(jìn)行連接的 RpcServer server
  • 初始化 SparkContext
  • 處理各種請(qǐng)求:CancelJob起愈、EndSession、JobRequest译仗、BypassJobRequest抬虽、SyncJobRequest、GetBypassJobStatus
  • 處理 add file 請(qǐng)求

除了能處理 RSCDriver 支持的請(qǐng)求外纵菌,ReplDriver 還能處理:BaseProtocol.ReplJobRequest阐污、BaseProtocol.CancelReplJobRequest、BaseProtocol.GetReplJobResults 請(qǐng)求咱圆,這些請(qǐng)求對(duì)應(yīng)的是序列化的 job (GitHub - cloudera/livy: Livy is an open source REST interface for interacting with Apache Spark from anywhere)相關(guān)的請(qǐng)求笛辟。

1.2、初始化 server

這一步在 RSCDriver#initializeServer() 中調(diào)用序苏,用于連接 client 并告知 server 端 rpc 地址隘膘,client 獲知 server rpc 地址后會(huì)進(jìn)行連接并發(fā)送請(qǐng)求。

1.3杠览、初始化 SparkContext

1.3.1、創(chuàng)建解釋器

會(huì)根據(jù)不同的 kind 創(chuàng)建不同類型的解釋器纵势,kind 在創(chuàng)建 session 的 request body 中指定踱阿。這些解釋器有繼承共同的 treat Interpreter,其類圖如下:


其中的 execute 方法用來執(zhí)行代碼片段:

  • pyspark 類型的解釋器用于執(zhí)行 python钦铁、pyspark 代碼片段
  • pyspark3類型的解釋器用于執(zhí)行 python3软舌、 python3 spark 代碼片段
  • spark 類型的解釋器用于執(zhí)行 scala、scala spark 代碼片段
  • sparks 類型的解釋器用于執(zhí)行 r牛曹、r spark 代碼片段

1.3.2佛点、創(chuàng)建 repl/Session

repl/Session(用于和 sessions/Session 進(jìn)行區(qū)分,后文簡稱 Session)是 server 端中至關(guān)重要的類黎比。主要職責(zé)是:

  1. 啟動(dòng) interpreter超营,并獲取 SparkContext
  2. 持有線程池來異步執(zhí)行 statements(通過 interpreter 來執(zhí)行)
  3. 持有線程池來異步取消 statements
  4. 管理一個(gè) session 下所有的 statements

在構(gòu)造 Session 的過程中,會(huì)初始化用于執(zhí)行 statement 的 interpreterExecutor阅虫,如下:

private val interpreterExecutor = ExecutionContext.fromExecutorService(
    Executors.newSingleThreadExecutor())

可以看到演闭,這個(gè)線程只有一個(gè)線程,也就是說在一個(gè) Session 中的 statement 是串行的颓帝,一個(gè) statement 執(zhí)行完才會(huì)執(zhí)行下一個(gè)米碰。這種串行的方式有明顯的弊端窝革,即當(dāng) Session 的資源足以執(zhí)行多個(gè) statement 時(shí),也只能一個(gè)接著一個(gè)執(zhí)行吕座,這既浪費(fèi)了資源虐译,有延長了任務(wù)運(yùn)行的整體時(shí)間。那為什么還要這么做呢吴趴?主要是因?yàn)槟壳?livy 中的一個(gè) Session 僅包含一個(gè) interpreter漆诽,如果一個(gè) interpreter 同時(shí)執(zhí)行多段代碼片段,很容易會(huì)出現(xiàn)穿插執(zhí)行的錯(cuò)誤史侣。要解決這一困境的思路主要有兩個(gè):

  • 不使用 interpreter 來執(zhí)行代碼片段
  • 一個(gè) Session 包含多個(gè) interpreter拴泌,每個(gè) interpreter 同一時(shí)間也只執(zhí)行一個(gè) statement
    目前,我們正在做這方面的工作惊橱,等完工之后可以再進(jìn)一步說明下蚪腐。

1.3.3、啟動(dòng) Session

主要是調(diào)用 interpreter#start税朴,該啟動(dòng)也是提交到 interpreterExecutor 中執(zhí)行的回季,在啟動(dòng)后就會(huì)將 Session 的 state 修改為 idle。我們來看看 Spark 類型的 Session 的 interpreter 啟動(dòng)過程:

SparkInterpreter#start()

以上正林,就是 Session server 端的詳細(xì)的啟動(dòng)過程泡一,下一篇我們將看看代碼片段是怎么執(zhí)行的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末觅廓,一起剝皮案震驚了整個(gè)濱河市鼻忠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌杈绸,老刑警劉巖帖蔓,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異瞳脓,居然都是意外死亡塑娇,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門劫侧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來埋酬,“玉大人,你說我怎么就攤上這事烧栋⌒赐祝” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵劲弦,是天一觀的道長耳标。 經(jīng)常有香客問我,道長邑跪,這世上最難降的妖魔是什么次坡? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任呼猪,我火速辦了婚禮,結(jié)果婚禮上砸琅,老公的妹妹穿的比我還像新娘宋距。我一直安慰自己,他們只是感情好症脂,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布谚赎。 她就那樣靜靜地躺著,像睡著了一般诱篷。 火紅的嫁衣襯著肌膚如雪壶唤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天棕所,我揣著相機(jī)與錄音闸盔,去河邊找鬼。 笑死琳省,一個(gè)胖子當(dāng)著我的面吹牛迎吵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播针贬,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼击费,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了桦他?” 一聲冷哼從身側(cè)響起蔫巩,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎快压,沒想到半個(gè)月后批幌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嗓节,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了皆警。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拦宣。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖信姓,靈堂內(nèi)的尸體忽然破棺而出鸵隧,到底是詐尸還是另有隱情,我是刑警寧澤意推,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布豆瘫,位于F島的核電站,受9級(jí)特大地震影響菊值,放射性物質(zhì)發(fā)生泄漏外驱。R本人自食惡果不足惜育灸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望昵宇。 院中可真熱鬧磅崭,春花似錦、人聲如沸瓦哎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蒋譬。三九已至割岛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間犯助,已是汗流浹背癣漆。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留也切,地道東北人扑媚。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像雷恃,于是被迫代替她去往敵國和親疆股。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

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

  • 本文基于 incubator-livy 0.4.0-incubating 從Livy Rest Api[https...
    牛肉圓粉不加蔥閱讀 7,420評(píng)論 4 17
  • 本文基于 incubator-livy 0.4.0-incubating 關(guān)于Apache Livy(下文簡稱 l...
    牛肉圓粉不加蔥閱讀 8,477評(píng)論 1 14
  • Python語言特性 1 Python的函數(shù)參數(shù)傳遞 看兩個(gè)如下例子倒槐,分析運(yùn)行結(jié)果: 代碼一: a = 1 def...
    時(shí)光清淺03閱讀 490評(píng)論 0 0
  • 久違的晴天旬痹,家長會(huì)。 家長大會(huì)開好到教室時(shí)讨越,離放學(xué)已經(jīng)沒多少時(shí)間了两残。班主任說已經(jīng)安排了三個(gè)家長分享經(jīng)驗(yàn)。 放學(xué)鈴聲...
    飄雪兒5閱讀 7,523評(píng)論 16 22
  • 今天感恩節(jié)哎把跨,感謝一直在我身邊的親朋好友人弓。感恩相遇!感恩不離不棄着逐。 中午開了第一次的黨會(huì)崔赌,身份的轉(zhuǎn)變要...
    迷月閃星情閱讀 10,567評(píng)論 0 11