Spark技術(shù)內(nèi)幕++深入解析Spark內(nèi)核架構(gòu)設(shè)計與實現(xiàn)原理(一)

spark技術(shù)背景

大多數(shù)現(xiàn)有的集群計算系統(tǒng)都是基于非循環(huán)的數(shù)據(jù)流模型锌云。即從穩(wěn)定的物理存儲(如分布式文件系統(tǒng))中加載記錄,記錄被傳入由一組確定性操作構(gòu)成的DAG(有向無環(huán)圖)逐样,然后寫回穩(wěn)定存儲相速。DAG數(shù)據(jù)流圖能夠在運行時自動實現(xiàn)任務(wù)調(diào)度和故障恢復(fù)。
盡管非循環(huán)數(shù)據(jù)流是種很強大的抽象方法透典,但仍然有些應(yīng)用無法使用這種方式描述滤奈。包括1.機器學(xué)習(xí)和圖應(yīng)用中常用的迭代算法 2.交互式數(shù)據(jù)挖掘工具(用戶反復(fù)查詢一個數(shù)據(jù)子集)摆昧,基于數(shù)據(jù)流的框架并不明確支持工作集,所以需要將數(shù)據(jù)輸出到磁盤蜒程,然后每次查詢時重新加載绅你,會帶來極大開銷。針對上述問題昭躺。Spark實現(xiàn)了一種分布式內(nèi)存抽象忌锯,稱為彈性分布式數(shù)據(jù)集(RDD)。它支持基于工作集的應(yīng)用领炫,同時具有數(shù)據(jù)流模型的特點:自動容錯偶垮、位置感知性調(diào)度和可伸縮行。RDD允許用戶在執(zhí)行多個查詢時驹吮,顯示地將工作集緩存在內(nèi)存中针史,后續(xù)查詢能夠重用工作集,極大地提升了查詢速度碟狞。
RDD提供了一種高度受限內(nèi)存模型,即RDD是只讀記錄分區(qū)的集合婚陪,只能通過其他RDD執(zhí)行確定的轉(zhuǎn)換操作(如map族沃、join)而創(chuàng)建,這些限制使得實現(xiàn)容錯的開銷很低泌参。與分布式共享內(nèi)存系統(tǒng)需要付出高昂代價的檢查點和回滾機制不同脆淹,RDD通過Lineage來重建丟失的分區(qū):一個RDD中包含了如何從其他RDD衍生所必須的相關(guān)信息,而不需要檢查點操作就可以重建丟失的數(shù)據(jù)分區(qū)沽一。盡管RDD不是一個通用的共享內(nèi)存抽象盖溺,但他具備了良好的描述能力、可伸縮性和可靠性铣缠,能夠廣泛適用于數(shù)據(jù)并行類應(yīng)用烘嘱。

Hadoop 的MapReduce是基于數(shù)據(jù)集的
基于數(shù)據(jù)集的處理:從物理存儲上加載數(shù)據(jù)昆禽,然后操作數(shù)據(jù),然后寫入物理存儲設(shè)備蝇庭;
基于數(shù)據(jù)集的操作不適應(yīng)的場景:
1醉鳖,不適合于大量的迭代
2,交互式查詢
重點是:基于數(shù)據(jù)流的方式 不能夠復(fù)用曾經(jīng)的結(jié)果或者中間計算結(jié)果;

Spark RDD是基于工作集的
工作流和工作集的共同特點:位置感知哮内,自動容錯盗棵,負載均衡等。
Spark的位置感知比Hadoop的好很多北发,具體如下:

  1. Hadoop位置感知:Hadoop進行partition之后就不管Reducer在哪里了纹因。
  2. Spark的位置感知:Spark進行partition后再進行下一步Stage時會確定其位置,是更精致化的琳拨。
spark架構(gòu)綜述
架構(gòu)

Driver是用戶編寫的數(shù)據(jù)處理邏輯瞭恰,這個邏輯中包含用戶創(chuàng)建的SparkContext。SparkContext是用戶邏輯與Spark集群主要的交互接口从绘,它會和Cluster Manager交互寄疏,包括向他申請計算資源等。Cluster Manager負責(zé)集群的資源管理和調(diào)度僵井,現(xiàn)在支持Standalone陕截、Apache Mesos和Hadoop的YARN。Worker Node是集群中可以執(zhí)行計算任務(wù)的節(jié)點批什。Executor是在一個Worker Node上為某應(yīng)用啟動的一個進程农曲,該進程負責(zé)運行任務(wù),并且負責(zé)將數(shù)據(jù)存在內(nèi)存或者磁盤上驻债。Task是被送到某個Executor上的計算單元乳规。每個應(yīng)用都有各自獨立的Executor,計算最終在計算節(jié)點的Executor中執(zhí)行合呐。

用戶程序從最開始的提交到最終的計算執(zhí)行暮的,需要經(jīng)歷以下幾個階段:

  1. 用戶程序創(chuàng)建SparkContext時,新建的SparkContext實例會連接到Cluster Manager淌实。Cluster Manager會根據(jù)用戶提交時設(shè)置的CPU和內(nèi)存等信息為本地提交分配計算資源冻辩,啟動Executor。
  2. Driver會將用戶程序劃分為不同的執(zhí)行階段拆祈,每個執(zhí)行階段由一組完全相同的Task組成恨闪,這些Task分別作用于待處理數(shù)據(jù)的不同分區(qū)。在階段劃分完成和Task創(chuàng)建后放坏,Driver會向Executor發(fā)送Task咙咽。
  3. Executor在接收到Task后,會下載Task的運行依賴淤年,在準備好Task的執(zhí)行環(huán)境后钧敞,會開始執(zhí)行Task蜡豹,并且將Task的運行狀態(tài)回報給Driver。
  4. Driver會根據(jù)收到的Task的運行狀態(tài)來處理不同的狀態(tài)更新犁享。Task分為兩種:一種是Shuffle Map Task余素,它實現(xiàn)數(shù)據(jù)的重新洗牌,洗牌的結(jié)果保存到Executor所在節(jié)點的文件系統(tǒng)中炊昆;另一種是Result Task桨吊,它負責(zé)生成結(jié)果數(shù)據(jù)。
  5. Driver會不斷的調(diào)用Task凤巨,將Task發(fā)送到Executor執(zhí)行视乐,在所有的Task都正確執(zhí)行或者超過執(zhí)行次數(shù)的限制仍然沒成功時停止。
RDD實現(xiàn)詳解

Spark的目標是為了基于工作集的應(yīng)用(即多個并行操作重用中間結(jié)果的應(yīng)用)提供抽象敢茁,同時保持MapReduce及其相關(guān)模型的優(yōu)勢特性佑淀,即自動容錯、位置感知性協(xié)調(diào)和可伸縮性彰檬。RDD比數(shù)據(jù)流模型更易于編程伸刃,同時基于工作集的計算也具有良好的描述能力。
分布式數(shù)據(jù)集的容錯性有兩種方式:數(shù)據(jù)檢查點和記錄數(shù)據(jù)更新逢倍。我們面向大規(guī)模的數(shù)據(jù)分析捧颅,數(shù)據(jù)檢查點成本很高:需要數(shù)據(jù)中心網(wǎng)絡(luò)連接機器之間復(fù)制龐大的數(shù)據(jù)集,網(wǎng)絡(luò)帶寬往往比內(nèi)存帶寬低很多较雕,同時還要消耗更多的存儲資源(存儲到磁盤會降低應(yīng)用程序速度)碉哑。所以我們選擇記錄更新方式,但如果更新太多記錄更新的成本也很高亮蒋。因此RDD只支持粗顆粒度轉(zhuǎn)換扣典,即大量記錄上執(zhí)行的單個操作。將創(chuàng)建RDD的一系列轉(zhuǎn)換記錄下來(即Lineage)慎玖,以便恢復(fù)丟失的分區(qū)贮尖。

什么是RDD?RDD是只讀的趁怔、分區(qū)記錄的集合远舅。RDD只能基于在穩(wěn)定物理存儲中的數(shù)據(jù)集和其他已有的RDD上執(zhí)行確定性操作來創(chuàng)建。這些確定性操作成為轉(zhuǎn)換痕钢,如map、filter序六、groupBy任连、join等。RDD不需要物化(落盤)例诀,RDD含有如何從其他RDD衍生(即計算)出本RDD的相關(guān)信息(Lineage)随抠,因此在RDD部分分區(qū)數(shù)據(jù)丟失的時候可以從物理存儲的數(shù)據(jù)計算出相應(yīng)的RDD分區(qū)裁着。

RDD的彈性表現(xiàn):

  1. 彈性之一:自動的進行內(nèi)存和磁盤數(shù)據(jù)存儲的切換;
  2. 彈性之二:基于Lineage的高效容錯(第n個節(jié)點出錯拱她,會從第n-1個節(jié)點恢復(fù)二驰,血統(tǒng)容錯);
  3. 彈性之三:Task如果失敗會自動進行特定次數(shù)的重試(默認4次)秉沼;
  4. 彈性之四:Stage如果失敗會自動進行特定次數(shù)的重試(可以只運行計算失敗的階段)桶雀;只計算失敗的數(shù)據(jù)分片;
  5. checkpoint和persist
  6. 數(shù)據(jù)調(diào)度彈性:DAG TASK 和資源 管理無關(guān)
  7. 數(shù)據(jù)分片的高度彈性(人工自由設(shè)置分片函數(shù)),repartition

每個RDD有5個主要屬性

  1. 一組分片(Partition)唬复,即數(shù)據(jù)集的基本組成單元矗积。對于RDD來說,每個分片都會被
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末敞咧,一起剝皮案震驚了整個濱河市棘捣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌休建,老刑警劉巖乍恐,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異测砂,居然都是意外死亡茵烈,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門邑彪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瞧毙,“玉大人,你說我怎么就攤上這事寄症≈姹耄” “怎么了?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵有巧,是天一觀的道長释漆。 經(jīng)常有香客問我,道長篮迎,這世上最難降的妖魔是什么男图? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮甜橱,結(jié)果婚禮上逊笆,老公的妹妹穿的比我還像新娘。我一直安慰自己岂傲,他們只是感情好难裆,可當我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般乃戈。 火紅的嫁衣襯著肌膚如雪褂痰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天症虑,我揣著相機與錄音缩歪,去河邊找鬼。 笑死谍憔,一個胖子當著我的面吹牛匪蝙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播韵卤,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼骗污,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了沈条?” 一聲冷哼從身側(cè)響起需忿,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蜡歹,沒想到半個月后屋厘,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡月而,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年汗洒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片父款。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡溢谤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出憨攒,到底是詐尸還是另有隱情世杀,我是刑警寧澤,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布肝集,位于F島的核電站瞻坝,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏杏瞻。R本人自食惡果不足惜所刀,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望捞挥。 院中可真熱鬧浮创,春花似錦、人聲如沸砌函。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至雏掠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間劣像,已是汗流浹背乡话。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留耳奕,地道東北人绑青。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像屋群,于是被迫代替她去往敵國和親闸婴。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,066評論 2 355

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