Spark架構(gòu)基本介紹

簡介

  • Apache Spark 是專為大規(guī)模數(shù)據(jù)處理而設(shè)計的快速通用的計算引擎。
  • Spark是UC Berkeley AMP lab (加州大學(xué)伯克利分校的AMP實驗室)所開源的類Hadoop MapReduce的通用并行框架

優(yōu)點

  • 快速:spark有先進(jìn)的DAG執(zhí)行引擎接箫,支持循環(huán)數(shù)據(jù)流和內(nèi)存計算伪煤;spark在內(nèi)存中的執(zhí)行速度是MR的100倍,在磁盤上的運(yùn)行速度是MR的10倍
  • 易用:SPARK支持使用Java/Scala/Python/Sql語言快速編寫應(yīng)用盯蝴,提供統(tǒng)一API毅哗,使得 編寫應(yīng)用程序更容易。編寫應(yīng)用程序更容易
  • 通用:Spark提供了完整而強(qiáng)大的技術(shù)棧捧挺,包括SQL查詢虑绵、流式計算、機(jī)器學(xué)習(xí)和圖算法組件
  • 運(yùn)行模式多樣:可運(yùn)行于獨立的集群模式中闽烙,可運(yùn)行于Hadoop中翅睛,也可運(yùn)行于Amazon EC2等云環(huán)境中,并且可以訪問HDFS/Cassandra/HBase/Hive等多種數(shù)據(jù)源

生態(tài)系統(tǒng)

imgTemp.png
  • 第一層:各種文件存儲系統(tǒng)
  • 第二層:部署模式(詳細(xì)信息下面介紹)
  • 第三層:spark core是spark的核心組件黑竞,其操作對象是RDD(彈性分布式數(shù)據(jù)集)捕发,可以說是spark中的離線計算框架
  • 第四層:處理流式數(shù)據(jù)的spark streaming;執(zhí)行sql的sparksql摊溶;用于機(jī)器學(xué)習(xí)的MLlib爬骤;用于圖計算的GraphX

術(shù)語介紹

  • Application: Spark Application指的是用戶編寫的Spark應(yīng)用程序,包含了一個Driver功能的代碼和分布在集群中多個節(jié)點上運(yùn)行的Executor代碼
  • Master:主控節(jié)點莫换,負(fù)責(zé)接收Client提交的作業(yè)霞玄,管理worker,并命令worker啟動Driver和Executor
  • Worker:集群中任何可以運(yùn)行Application代碼的節(jié)點拉岁,類似于YARN中的NodeManager節(jié)點坷剧。在Standalone模式中指的就是通過Slave文件配置的Worker節(jié)點
  • Driver:一個spark作業(yè)運(yùn)行時包括一個driver進(jìn)程,負(fù)責(zé)DAG圖的構(gòu)成喊暖,Stage的劃分惫企、Task的管理
  • Executor: Application運(yùn)行在Worker節(jié)點上的一個進(jìn)程,該進(jìn)程負(fù)責(zé)運(yùn)行Task,并且負(fù)責(zé)將數(shù)據(jù)存在 內(nèi)存或者磁盤上狞尔,每個Apptication都有各自獨立的一批 Executor
  • Job: 包含多個Task組成的并行計算丛版,往往由Spark Action觸發(fā)生成, 一個Application中往往會產(chǎn)生多個Job
  • Stage: 每個Job會被拆分成多組Task偏序, 作為一個TaskSet页畦, 其名稱為Stage,Stage的劃分和調(diào)度是有DAGScheduler來負(fù)責(zé)的研儒,Stage有非最終的Stage(Shuffle Map Stage)和最終的Stage(Result Stage)兩種豫缨,Stage的邊界就是發(fā)生shuffle的地方
  • Task: 被送到某個Executor上的工作單元,但hadoopMR中的MapTask和ReduceTask概念一樣端朵,是運(yùn)行Application的基本單位好芭,多個Task組成一個Stage,而Task的調(diào)度和管理等是由TaskScheduler負(fù)責(zé)
  • Local模式:本地模式部署在單機(jī)冲呢,主要用于測試或?qū)嶒炆岚埽蛔詈唵蔚倪\(yùn)行模式,所有進(jìn)程都運(yùn)行在一臺機(jī)器的 JVM 中碗硬;本地模式用單機(jī)的多個線程來模擬Spark分布式計算瓤湘,通常用來驗證開發(fā)出來的應(yīng)用程序邏輯上有沒有問題
  • cluster模式:
    • standalone:Spark可以通過部署與Yarn的架構(gòu)類似的框架來提供自己的集群模式。該集群模式的架構(gòu)設(shè)計與HDFS和Yarn大致相同恩尾,都是由一個主節(jié)點多個從節(jié)點組成弛说;主:master,從:worker
    • spark on yarn:yarn-cluster是基于yarn集群進(jìn)行調(diào)度管理的翰意,yarn集群上有ResourceManager(RM)和NodeManager(NM)兩個角色木人。在YARN中,每個Application實例都有一個Application Master進(jìn)程冀偶,它是Application啟動的第一個容器醒第。它負(fù)責(zé)和ResourceManager打交道,并請求資源进鸠。獲取資源之后告訴NodeManager為其啟動container
    • yarn-client與yarn-cluster的區(qū)別:其實就是Application Master(AM)進(jìn)程的區(qū)別(即Driver運(yùn)行在哪)
      • yarn-client模式下稠曼,driver運(yùn)行在客戶端,也就是提交作業(yè)的機(jī)器上客年;ApplicationMaster僅僅向YARN請求executor霞幅,client會和請求的container通信來調(diào)度他們工作,也就是說Client不能離開
      • yarn-cluster模式下量瓜,driver運(yùn)行在集群的AM中司恳,它負(fù)責(zé)向YARN申請資源,并監(jiān)督作業(yè)的運(yùn)行狀況绍傲;作業(yè)提交完就可以關(guān)掉Client扔傅,作業(yè)會繼續(xù)在YARN上運(yùn)行

任務(wù)提交流程

  • standlone模式(http://spark.apache.org/docs/latest/spark-standalone.html):

    • 6264117-7e695db53e63fa44.png
    • 1.spark-submit 提交任務(wù)給 Master

    • 2.Master 收到任務(wù)請求后通過 LaunchDriver 向 Worker 請求啟動 Driver

    • 3.Worker 收到請求后啟動 Driver

    • 4.Driver 啟動后向 Master 注冊(用戶App信息)。

    • 5.Master 收到 App 信息后根據(jù)資源的情況向 Worker 發(fā)送 launchExecutor 啟動 Excutor

    • 6.Worker 收到 Master 的請求后啟動相應(yīng)的 Excutor

    • 7.Excutor 啟動后負(fù)責(zé)與 Driver 通信, 執(zhí)行相關(guān)任務(wù)

  • yarn-cluster模式(http://spark.apache.org/docs/latest/running-on-yarn.html):

    • 6264117-9773993abf0e2521.png
    • 1.由client向RM提交請求猎塞,并上傳jar到HDFS上试读,這期間包括四個步驟:
      • a).連接到RM
      • b).從 RM ASM(Applications Manager)中獲得metric、queue和resource等信息
      • c).上傳 app jar and spark-assembly jar
      • d).設(shè)置運(yùn)行環(huán)境和container上下文(launch-container.sh等腳本)
    • 2.ASM 向 Scheduler 申請空閑 container
    • 3.Scheduler 向 ASM 返回空閑 container 信息(NM 等)
    • 4.RM(ASM)根據(jù)返回信息向 NM 申請資源
    • 5.NM 分配創(chuàng)建一個container 并創(chuàng)建Spark Application Master(AM),此時 AM 上運(yùn)行的是 Spark Driver(每個SparkContext都有一個 AM)
    • 6.AM啟動后邢享,和RM(ASM)通訊鹏往,請求根據(jù)任務(wù)信息向RM(ASM)申請 container 來啟動 executor
    • 7.RM(ASM)將申請到的資源信息返回給AM
    • 8.AM 根據(jù)返回的資源信息區(qū)請求對應(yīng)的 NM 分配 container 來啟動 executor
    • 9.NM 收到請求會啟動相應(yīng)的 container 并啟動 executor
    • 10.executor 啟動成后 反向向 AM 注冊
    • 11.executor 和 AM(Driver) 交互 完成任務(wù)
    • 12.后續(xù)的DAGScheduler、TaskScheduler骇塘、Shuffle等操作都是和standaloe一樣
    • 13.等到所有的任務(wù)執(zhí)行完畢后,AM 向 ASM 取消注冊并釋放資源
  • yarn-client模式(http://spark.apache.org/docs/latest/running-on-yarn.html):
    • 6264117-8a0b34d10b5b7ae0.png
    • 在yarn-client模式下韩容,Driver運(yùn)行在Client上款违,通過ApplicationMaster向RM獲取資源。本地Driver負(fù)責(zé)與所有的executor container進(jìn)行交互群凶,并將最后的結(jié)果匯總插爹。整體的過程與yarn-cluster類似。
    • 不同點在于 Driver 是運(yùn)行在本地客戶端请梢,它的 AM 只是作為一個 Executor 啟動器赠尾,并沒有 Driver 進(jìn)程。
    • 而且 Executor啟動后是與 Client 端的 Driver 進(jìn)行交互的毅弧,所以 Client 如果掛了 任務(wù)也就掛了气嫁。

高可用性(High Available)

  • Spark同樣存在單點故障問題,官方說明中的兩種HA方式:
    • Standby Masters with ZooKeeper:


      4797877-affe70f7ded9c18b.png
      • 在集群中啟動多個Master節(jié)點够坐,連接到ZK的實例中寸宵,利用ZK來存儲狀態(tài)和進(jìn)行Leader選舉
      • 只有一個Master節(jié)點處于Active狀態(tài),其他都是Standby狀態(tài)
      • 一旦ZK監(jiān)聽不到當(dāng)前的Leader的心跳元咙,另一個Standby Master就會被選舉為Leader梯影,然后恢復(fù)調(diào)度,繼續(xù)任務(wù)
      • 整個恢復(fù)過程(從主節(jié)點第一次down掉開始)應(yīng)在1到2分鐘之間完成
      • 請注意庶香,此延遲僅影響對新應(yīng)用程序的調(diào)度甲棍,主節(jié)點故障切換期間已經(jīng)運(yùn)行的應(yīng)用程序不受影響
    • Single-Node Recovery with Local File System:
      • ZooKeeper is the best way to go for production-level high availability, but if you just want to be able to restart the Master if it goes down, FILESYSTEM mode can take care of it
      • In order to enable this recovery mode, you can set SPARK_DAEMON_JAVA_OPTS in spark-env using this configuration:
System property Meaning Since Version
spark.deploy.recoveryMode Set to FILESYSTEM to enable single-node recovery mode (default: NONE). 0.8.1
spark.deploy.recoveryDirectory The directory in which Spark will store recovery state, accessible from the Master's perspective. 0.8.1

后記

  • 在yarn-client、yarn-cluster提交模式中赶掖,可以不啟動Spark集群感猛,因為相關(guān)的jvm環(huán)境有yarn管理(啟動、結(jié)束等)
  • standalone 提交模式中 Spark集群一定要啟動倘零,因為需要依賴worker唱遭、Master進(jìn)行任務(wù)的啟動、調(diào)度等呈驶。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拷泽,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌司致,老刑警劉巖拆吆,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異脂矫,居然都是意外死亡枣耀,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門庭再,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捞奕,“玉大人,你說我怎么就攤上這事拄轻÷В” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵恨搓,是天一觀的道長院促。 經(jīng)常有香客問我,道長斧抱,這世上最難降的妖魔是什么常拓? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮辉浦,結(jié)果婚禮上弄抬,老公的妹妹穿的比我還像新娘。我一直安慰自己盏浙,他們只是感情好眉睹,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著废膘,像睡著了一般竹海。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上丐黄,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天斋配,我揣著相機(jī)與錄音,去河邊找鬼灌闺。 笑死艰争,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的桂对。 我是一名探鬼主播甩卓,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蕉斜!你這毒婦竟也來了逾柿?” 一聲冷哼從身側(cè)響起缀棍,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎机错,沒想到半個月后爬范,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡弱匪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年青瀑,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片萧诫。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡斥难,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出财搁,到底是詐尸還是另有隱情蘸炸,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布尖奔,位于F島的核電站,受9級特大地震影響穷当,放射性物質(zhì)發(fā)生泄漏提茁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一馁菜、第九天 我趴在偏房一處隱蔽的房頂上張望茴扁。 院中可真熱鬧,春花似錦汪疮、人聲如沸峭火。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽卖丸。三九已至,卻和暖如春盏道,著一層夾襖步出監(jiān)牢的瞬間稍浆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工猜嘱, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留衅枫,地道東北人。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓朗伶,卻偏偏與公主長得像弦撩,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子论皆,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354