一行Spark代碼的誕生記(深度剖析Spark架構)

大家好,我是一行Spark代碼趣些,我叫小小小蕉金顿,不知道為毛臊泌,我爸爸大蕉和我媽媽大大蕉把我生的又瘦又長。長這樣揍拆。

valsssjiao =newSparkContext(newSparkConf().setAppName("sssjiao").setMaster("yarn-cluster")).parallelize(Array(""));

我真的渠概,不知道怎么說,好長好長啊。播揪≈總有小伙伴對著我說:

問君何不乘風起 ????扶搖直上九萬里。

說出來不怕嚇著你猪狈,其實我一個字都看不懂箱沦。

作為一行普通的代碼,我也開始思考碼生的三大問題雇庙,我是誰谓形,我從哪里來,要到哪里去疆前。

我從我從哪里來寒跳,開始講我的故事吧。

我從哪里來竹椒?

這有什么好說的童太,出自我爸爸大大蕉之手,就醬胸完。

本文終书释。

當當當,你以為就這樣結束了嗎赊窥?不可能的爆惧。我長得這么細這么長,其實我是由三個部分組成的誓琼。分別是SparkConf检激,SparkContext,RDD[String]腹侣,從代碼層面來說叔收,就是定義了一個SparkConf的配置,來生成一個SparkContext上下文傲隶,然后用這個SparkContext來對數組進行序列化饺律,我就被產生出來啦。

但是我今天不僅僅是想介紹這么淺層的來源跺株,畢竟爸比媽咪生得我那么辛苦是吧复濒?

(要開始Spark on yarn的深度剖析了)

大大蕉:yarn兄,我要生一個兒子乒省,oh不我要產生一個Spark任務了巧颈,能幫忙撥???????????????? ??點行政資源不?

yarn????:啥玩意袖扛,你想干啥砸泛?要尊貴的cluster模式還是平民的client模式十籍?

大大蕉:這兩個有啥差別?我頭胎唇礁。

yarn????:client就你用你自己粗糙的Driver勾栗,cluster模式就我給你分配一個高配置又漂亮的Driver。

大大蕉:那行盏筐,給我來個尊貴的cluster吧围俘。

yarn????:等著。

yarn????:歪琢融,ResourceManager嗎(管資源的界牡,下面簡稱RM)?你那邊不是在管資源嗎吏奸?咱這有貨嗎欢揖?趕緊給我空運一個高配的機器陶耍,嗯對奋蔚,用來跑Driver和ApplicationMaster的,嗯對對對烈钞,我們這邊有人快生了泊碑。對,急急急毯欣,這輩子就這要一次最急馒过。

RM????:知道了(一臉嫌棄懶洋洋)。

過了0.00001ms酗钞,對于CPU來說過了好久了

RM????:NodeManage(每臺機器的管家腹忽,下面簡稱NM),歪砚作,根據記錄你那里的配置恰好夠用窘奏,你那里的Container1容器我征用了,就這樣葫录。

NM????:我R着裹。。米同。

RM????:yarn老哥骇扇,給你那個名字為container-1的容器吧,他的地址和配置信息(CPU面粮,內存)在這少孝,你收好了匾七。

yarn的最小分配單位為Container

yarn????:好的占业,非常感謝但绕,后面有事情還麻煩你。

yarn????:大大蕉嗎旬蟋?Container拿到了,就是Container1式撼,自己去看看怎么生吧宪潮。

大大蕉:好的。掰盖淡。

大大蕉:(自言自語)根據說明書年柠,先啟動一個ApplicationMaster,名字叫做sssjiao褪迟,用來管理這個Job和Container冗恨。再先啟動一個Driver,來管理DAGScheduler(有向無環(huán)圖管理)和TaskScheduler(任務調度管理),BlockManagerMaster(數據塊管理的Master)味赃。咦掀抹,那我去哪跑任務呢?還差一些Worker工作站啊心俗。

Spark將一個大的任務拆成一個有向無環(huán)圖傲武,來表示依賴關系。

大大蕉:歪城榛。yarn嗎揪利?嗯是我。我這好像還差點東西啊狠持。疟位。我還需要一些Container來做我的Worker啊,不然我兒子生完往哪放按埂甜刻?

yarn????:知道了知道了,不會一次說完嗎正勒?真討厭得院。

大大蕉:我。昭齐。尿招。我?也不知道需要這個啊。

yarn????:歪阱驾。RM嗎就谜?嗯又是我。我需要一批Container里覆。嗯對高配那種丧荐。對,急急急喧枷,這輩子就這一次最急虹统。

RM???? ?:知道了弓坞。(不耐煩)

RM????? :NM-A,NM-B车荔,NM-C渡冻,NM-D,你們幾個的資源我都征用了忧便。

NM界一臉懵逼族吻,都感覺自己被搶劫了。珠增。

RM???? ?:歪超歌,yarn老哥嗎?資源都ok了蒂教。ContainerA巍举,ContainerB,ContainerC凝垛,ContainerD懊悯。

yarn????:好嘞。

yarn????:大大蕉苔严。資源拿到了定枷,信息我裝在信封里了孤澎,你拿好吧届氢。

大大蕉:嗯,我還想問一下覆旭,后面的(電話那頭傳來嘟嘟嘟掛斷的聲音)退子。步、驟型将、要寂祥、怎、么七兜、走丸凭。算了還是自己看說明書吧。

首先在Container里面啟動一個或者多個Executor腕铸,然后啟動一些jvm和BlockManager惜犀。好了現在Driver、Master和Worker都有了狠裹,完事具備虽界,只欠東西南北風了。

到這里涛菠,SparkContext算是初始化完了莉御。

大大蕉抓著頭發(fā)撇吞,一臉茫然地看著面前這堆玩意,要怎么玩礁叔。牍颈。。

誒琅关,再看看說明書吧颂砸,看看有沒有說怎么玩。(大蕉自言自語道)

突然空氣中響起了旁白:切分死姚、分配人乓、切分、分配都毒。

對色罚!這個job可以先用DAGScheduler進行stage切分。

切分完然后用TaskScheduler進行任務調度分配账劲。所以一個Job就被切分成很多個stage戳护,封裝成很多個TaskSet,然后每次Executor來請求任務的時候瀑焦,就給他們分配一個腌且,所有的Executor執(zhí)行完成后又向TaskScheduler報告進度。

Task失敗了榛瓮?報告TaskScheduler铺董。從頭開始重新跑。

Task太慢了禀晓?TaskSchduler找多一個Executor并行跑精续,誰先跑完就用誰(好殘忍)

Stage掛了?TaskScheduler報告DAGScheduler重新進行Stage拆分粹懒,看看是從當前開始重跑還是要用從父stage重跑重付。

好了到現在,小小小蕉我凫乖,還沒有被產生出來确垫。。

然后SparkContext就我的前輩Array("")進行序列化帽芽,然后根據key删掀,也就是每個字符串進行分區(qū),分區(qū)完之后把分區(qū)信息和對應的Executor保存起來嚣镜。然后呢根據分區(qū)信息把數據發(fā)送到Executor那邊去爬迟。所以我的本體RDD是在Driver的,但是我被分成很多份很小份很小份放在Exector里面的菊匿。

我是誰付呕?

我是一個RDD计福。全名RDD(Reilient Distributed DataSets)彈性分布式數據集。RDD的具體描述在這里邊徽职。

小飛象小飛象飛吖飛No.6

我要到哪里去象颖?

我后面的任務就是進行具體程序的執(zhí)行,一個job一個job姆钉,一個stage一個stage说订。

這里再深入,就是從編譯完的.class文件潮瓶,用JVM的ClassLoader類加載器陶冷,加載完變成一個真正的類,然后再又JVM編譯成機器碼毯辅,在堆里開辟一點內存初始化一個String對象埂伦,在棧里開辟一點內存初始化一個指針。

然而跑完之后呢思恐,我又將何去何從呢沾谜?

然后10M以下的就直接放在結果返回給TaskScheduler啦。

如果在10M以上的胀莹,就放到某個BlockManage基跑,只返回BlockId了。

通知TaskScheduler說跑完啦描焰。

然后TaskScheduler就通知DAGScheduler說跑完啦媳否。

然后DAGScheduler就通知SparkContext說跑完啦。

然后SparkContext就通知Driver跑完啦栈顷。

然后SparkContext就準備要stop了逆日。

大大蕉????:歪,yarn嗎萄凤?我兒子生完了,資源都還給你把搪哪。

yarn????????:好靡努。

yarn????????:歪。RM嗎晓折?剛剛申請的資源用完了惑朦,你把它們標記為可用把。

虛擬機????:這行又瘦又長的叫sssjiao的代碼是誰啊漓概。漾月。好像被人丟在這了,誒當垃圾回收了吧胃珍,然后就給小小小蕉臉上蓋上了一個待回收的印子??梁肿。

過了不久蜓陌,小小小蕉就被GC(Garbage Collection)回收了,但是它臉上洋溢著笑容吩蔑,它钮热,是快樂的。

這就是小小小蕉快快樂樂的一生烛芬。

附上之前的好幾篇Spark文章哈隧期。

小飛象小飛象飛吖飛No.6

Spark你一定學得會(一)No.7

Spark你一定學得會(二)No.8

Spark你一定學得會(三)No.10

如果覺得還不錯呢,就幫忙點贊評論分享一下啦赘娄,是對我最大的支持仆潮,感謝各位讀者小伙伴,哇咔咔(づ ̄3 ̄)づ╭?~遣臼。


微信公眾號:一名叫大蕉的程序員

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末鸵闪,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子暑诸,更是在濱河造成了極大的恐慌蚌讼,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件个榕,死亡現場離奇詭異篡石,居然都是意外死亡,警方通過查閱死者的電腦和手機西采,發(fā)現死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門凰萨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人械馆,你說我怎么就攤上這事胖眷。” “怎么了霹崎?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵珊搀,是天一觀的道長。 經常有香客問我尾菇,道長境析,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任派诬,我火速辦了婚禮劳淆,結果婚禮上,老公的妹妹穿的比我還像新娘默赂。我一直安慰自己沛鸵,他們只是感情好,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布缆八。 她就那樣靜靜地躺著曲掰,像睡著了一般疾捍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蜈缤,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天拾氓,我揣著相機與錄音,去河邊找鬼底哥。 笑死咙鞍,一個胖子當著我的面吹牛,可吹牛的內容都是我干的趾徽。 我是一名探鬼主播续滋,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼孵奶!你這毒婦竟也來了疲酌?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤了袁,失蹤者是張志新(化名)和其女友劉穎朗恳,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體载绿,經...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡粥诫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了崭庸。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怀浆。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖怕享,靈堂內的尸體忽然破棺而出执赡,到底是詐尸還是另有隱情,我是刑警寧澤函筋,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布沙合,位于F島的核電站,受9級特大地震影響驻呐,放射性物質發(fā)生泄漏灌诅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一含末、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧即舌,春花似錦佣盒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盯仪。三九已至,卻和暖如春蜜葱,著一層夾襖步出監(jiān)牢的瞬間全景,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工牵囤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留爸黄,地道東北人。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓揭鳞,卻偏偏與公主長得像炕贵,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子野崇,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內容