大數(shù)據(jù)處理框架Spark簡介

Spark是一個基于內(nèi)存的用于處理灼捂、分析大數(shù)據(jù)的集群計算框架末购。Spark最初由美國加州大學(xué)伯克利分校(UC Berkelely)的AMP(Algorithm,Machines and People)實驗室與2009年開發(fā),是基于內(nèi)存計算的大數(shù)據(jù)并行計算框架戳鹅,可以用于構(gòu)建大型的、低延遲的數(shù)據(jù)分析應(yīng)用程序昏兆。

image.png

1.Spark概述

Spark是一個基于內(nèi)存的用于處理枫虏、分析大數(shù)據(jù)的集群計算框架。它提供了一套簡單的編程接口爬虱,從而使得應(yīng)用程序開發(fā)者方便使用集群節(jié)點的CPU隶债、內(nèi)存、存儲資源來處理大數(shù)據(jù)跑筝。以下是伯克利分校的Spark數(shù)據(jù)分析架構(gòu)圖:

5E61445330B6ED0DBFB0388D3C62360C.jpg

可以看出Spark是專注于數(shù)據(jù)的處理分析死讹,而數(shù)據(jù)的存儲還是要借助于Hadoop分布式文件系統(tǒng)HDFS、Amazon S3等實現(xiàn)曲梗,Spark生態(tài)系統(tǒng)可以與Hadoop生態(tài)系統(tǒng)有著很好的兼容赞警。

2.Spark調(diào)度管理基本概念

2.1 Application

基于Spark的應(yīng)用程序,由一個或多個作業(yè)組成虏两。每個應(yīng)用程序的執(zhí)行涉及Driver Program和集群上的Executors兩部分愧旦。

Spark application execution involves runtime concepts such as driver, executor, task, job, and stage. Understanding these concepts is vital for writing fast and resource efficient Spark programs.

2.2 Driver Program

Driver Program中包含了啟動運行函數(shù)main函數(shù)和一個SparkContext類型的實例SparkContext實例是Application與Spark集群進行交互的唯一通道定罢,是每一個Application的入口笤虫。Driver Program可以運行在任何可以提交作業(yè)的節(jié)點上(WorkMaster)引颈,并不是必須運行在Master節(jié)點上耕皮。在實際生產(chǎn)環(huán)境中為了減少Master的負擔(dān),盡量避免在Master上提交Driver Program蝙场。(Spark2.0之后將SparkContext改為SparkSession

spark driver.png

Spark applications run as independent sets of processes on a cluster, coordinated by the SparkContext object in your main program (called the driver program).

2.3 Worker

Worker是Spark集群中任何可以運行Application相關(guān)代碼的節(jié)點凌停。

2.4 Executor

ExecutorWorker上某個Application啟動的一個進程,該進程負責(zé)執(zhí)行Task任務(wù)并且負責(zé)將數(shù)據(jù)存儲在內(nèi)存或者磁盤中售滤。Executor擁有CPU和內(nèi)存資源罚拟,它是資源管理系統(tǒng)能夠給予的最小單位台诗。一個Worker節(jié)點上可能有多個Executor,但是每個Executor中僅執(zhí)行一個Application對應(yīng)的任務(wù)赐俗。也就是說拉队,不同的Application通過Executor無法共享數(shù)據(jù)。

A process launched for an application on a worker node, that runs tasks and keeps data in memory or disk storage across them. Each application has its own executors.

2.5 Task

Task即任務(wù)阻逮,是被送到Executor上執(zhí)行的工作單元粱快。RDD中的每個分區(qū)都對應(yīng)相應(yīng)的Task,而每個Task對應(yīng)于Executor中的一個線程叔扼,這使得系統(tǒng)更加輕量級事哭,Task之間切換時間延遲更短。

A unit of work that will be sent to one executor

2.6 Job

Job即作業(yè)瓜富,是包含多個Task的并行計算鳍咱,其與Application中的執(zhí)行操作一一對應(yīng),也就是說Application每提交一個執(zhí)行操作Spark對應(yīng)生成一個Job与柑。

A parallel computation consisting of multiple tasks that gets spawned in response to a Spark action (e.g. save, collect); you'll see this term used in the driver's logs.

2.7 Stage

通常執(zhí)行操作之前會有若干轉(zhuǎn)換操作谤辜,而每個轉(zhuǎn)換操作意味著父RDD到子RDD的轉(zhuǎn)換,因此一個Job中通常涉及多個RDD价捧。將Job中涉及的RDD進行分組丑念,每組稱為一個Stage

Each job gets divided into smaller sets of tasks called stages that depend on each other (similar to the map and reduce stages in MapReduce); you'll see this term used in the driver's logs.

2.8 DAG

DAGDirected Acyclic Graph(有向無環(huán)圖)的簡稱结蟋,反映RDD之間的依賴關(guān)系渠欺。

2.9 Cluster Manager

是在集群上獲取資源的外部服務(wù)。若是Standalone模式的Spark集群椎眯,Cluster Manager即為Master;若是基于YARN模式Spark集群胳岂,Cluster Manager即為Resource Manager编整。

3.Spark架構(gòu)設(shè)計

Spark運行架構(gòu)包括集群資源管理器(Cluster Manager)、運行作業(yè)任務(wù)的工作節(jié)點(Worker Node)乳丰、每個應(yīng)用的任務(wù)控制節(jié)點(Driver)和每個工作節(jié)點上負責(zé)具體任務(wù)的執(zhí)行進程(Executor)掌测,資源管理器可以自帶或MesosYARN。與Hadoop MapReduce計算框架相比产园,Spark所采用的Executor有兩個優(yōu)點:

  • 1汞斧、是利用多線程來執(zhí)行具體的任務(wù),減少任務(wù)的啟動開銷
  • 2什燕、是Executor中有一個BlockManager存儲模塊粘勒,會將內(nèi)存和磁盤共同作為存儲設(shè)備,有效減少IO開銷
driver sparkcontext clustermanager workers executors.png

一個Application由一個Driver和若干個Job構(gòu)成屎即,一個Job由多個Stage構(gòu)成庙睡,一個Stage由多個沒有Shuffle關(guān)系的Task組成事富。

當(dāng)執(zhí)行一個Application時,Driver會向集群管理器申請資源乘陪,啟動Executor统台,并向Executor發(fā)送應(yīng)用程序代碼和文件,然后在Executor上執(zhí)行Task啡邑,運行結(jié)束后贱勃,執(zhí)行結(jié)果會返回給Driver,或者寫到HDFS或者其他數(shù)據(jù)庫中谤逼。

sparkapp sparkcontext master slaves.png

4.Spark運行基本流程

Spark運行的基本流程如下所示:

  • 1贵扰、當(dāng)一個Spark應(yīng)用被提交時,首先需要為這個應(yīng)用構(gòu)建起基本的運行環(huán)境森缠,即由任務(wù)控制節(jié)點(Driver)創(chuàng)建一個SparkContext拔鹰,由SparkContext負責(zé)和資源管理器(Cluster Manager)的通信以及進行資源的申請、任務(wù)的分配和監(jiān)控等贵涵。SparkContext會向資源管理器注冊并申請運行Executor的資源列肢。
  • 2、資源管理器為Executor分配資源宾茂,并啟動Executor進程瓷马,Executor運行情況將隨著“心跳”發(fā)送到資源管理器上。
  • 3跨晴、SparkContext根據(jù)RDD的依賴關(guān)系構(gòu)建DAG圖欧聘,DAG圖提交給DAG調(diào)度器(DAGScheduler)進行解析,將DAG圖分解為多個“階段”(每個階段都是一個任務(wù)集)端盆,并且計算出各個階段之間的依賴關(guān)系怀骤,然后把一個個“任務(wù)集”提交給底層的任務(wù)調(diào)度器(TaskScheduler)進行處理;ExecutorSparkContext申請任務(wù)焕妙,任務(wù)調(diào)度器將任務(wù)分發(fā)給Executor運行蒋伦,同時SparkContext將應(yīng)用程序代碼發(fā)放給Executor
  • 4焚鹊、任務(wù)在Executor上運行痕届,把執(zhí)行結(jié)果反饋給任務(wù)調(diào)度器(TaskScheduler),然后反饋給DAG調(diào)度器(DAGScheduler)末患,運行完畢后寫入數(shù)據(jù)并釋放所有資源研叫。

具體的運行流程圖如下所示,結(jié)合兩幅圖進行學(xué)習(xí):

An Introduction to Job execution flow in Apache Spark
圖片.png

總體而言璧针,Spark運行架構(gòu)具有以下特點:

  • 1嚷炉、每個Application都有自己專屬的Executor進程,并且該進程在Application運行期間一直駐留陈莽。Executor進程以多線程的方式運行Task
  • 2渤昌、Spark運行過程與資源管理器無關(guān)虽抄,只要能夠獲取Executor進程并保持通信即可
  • 3、Task采用了數(shù)據(jù)本地性和推測執(zhí)行等優(yōu)化機制

參考資料

http://dblab.xmu.edu.cn/post/bigdataroadmap/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末独柑,一起剝皮案震驚了整個濱河市迈窟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌忌栅,老刑警劉巖车酣,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異索绪,居然都是意外死亡湖员,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門瑞驱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來娘摔,“玉大人,你說我怎么就攤上這事唤反〉仕拢” “怎么了?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵彤侍,是天一觀的道長肠缨。 經(jīng)常有香客問我,道長盏阶,這世上最難降的妖魔是什么晒奕? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮名斟,結(jié)果婚禮上脑慧,老公的妹妹穿的比我還像新娘。我一直安慰自己砰盐,他們只是感情好漾橙,可當(dāng)我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著楞卡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪脾歇。 梳的紋絲不亂的頭發(fā)上蒋腮,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天,我揣著相機與錄音藕各,去河邊找鬼池摧。 笑死,一個胖子當(dāng)著我的面吹牛激况,可吹牛的內(nèi)容都是我干的作彤。 我是一名探鬼主播膘魄,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼竭讳!你這毒婦竟也來了创葡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤绢慢,失蹤者是張志新(化名)和其女友劉穎灿渴,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體胰舆,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡骚露,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了缚窿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片棘幸。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖倦零,靈堂內(nèi)的尸體忽然破棺而出误续,到底是詐尸還是另有隱情,我是刑警寧澤光绕,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布女嘲,位于F島的核電站,受9級特大地震影響诞帐,放射性物質(zhì)發(fā)生泄漏欣尼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一停蕉、第九天 我趴在偏房一處隱蔽的房頂上張望愕鼓。 院中可真熱鬧,春花似錦慧起、人聲如沸菇晃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽磺送。三九已至,卻和暖如春灿意,著一層夾襖步出監(jiān)牢的瞬間估灿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工缤剧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留馅袁,地道東北人。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓荒辕,卻偏偏與公主長得像汗销,于是被迫代替她去往敵國和親犹褒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,728評論 2 351

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