https://zhuanlan.zhihu.com/p/34436165
https://zhuanlan.zhihu.com/p/70424613
1.介紹
Spark 是專為大規(guī)模數(shù)據(jù)處理而設(shè)計(jì)的快速通用的計(jì)算引擎烙无。是Hadoop MapReduce的通用并行框架羊壹,Spark,擁有Hadoop MapReduce所具有的優(yōu)點(diǎn)赤屋;但不同于MapReduce的是——Job中間輸出結(jié)果可以保存在內(nèi)存中罢缸,從而不再需要讀寫HDFS漱竖,因此Spark能更好地適用于數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)等需要迭代的MapReduce的算法随静。
2.Spark 系統(tǒng)架構(gòu)
3.Spark基本概念
1.RDD:是彈性分布式數(shù)據(jù)集(Resilient Distributed Dataset)的簡稱蹈垢,是分布式內(nèi)存的一個(gè)抽象概念慷吊,提供了一種高度受限的共享內(nèi)存模型。
2.DAG:是Directed Acyclic Graph(有向無環(huán)圖)的簡稱曹抬,反映RDD之間的依賴關(guān)系罢浇。如果一個(gè)有向圖無法從某個(gè)頂點(diǎn)出發(fā)經(jīng)過若干條邊回到該點(diǎn),則這個(gè)圖是一個(gè)有向無環(huán)圖(DAG圖)沐祷。
3.Driver Program:控制程序嚷闭,負(fù)責(zé)為Application構(gòu)建DAG圖。
4.Cluster Manager:集群資源管理中心赖临,負(fù)責(zé)分配計(jì)算資源胞锰。
5.Worker Node:工作節(jié)點(diǎn),負(fù)責(zé)完成具體計(jì)算兢榨。
6.Executor:是運(yùn)行在工作節(jié)點(diǎn)(Worker Node)上的一個(gè)進(jìn)程嗅榕,負(fù)責(zé)運(yùn)行Task,并為應(yīng)用程序存儲數(shù)據(jù)吵聪。
7.Application:用戶編寫的Spark應(yīng)用程序凌那,一個(gè)Application包含多個(gè)Job。
8.Job:作業(yè)吟逝,一個(gè)Job包含多個(gè)RDD及作用于相應(yīng)RDD上的各種操作帽蝶。
9.Stage:階段,是作業(yè)的基本調(diào)度單位块攒,一個(gè)作業(yè)會分為多組任務(wù)励稳,每組任務(wù)被稱為“階段”佃乘。
10.Task:任務(wù),運(yùn)行在Executor上的工作單元驹尼,是Executor中的一個(gè)線程趣避。
總結(jié):
- Cluster Manager在standalone模式中即為Master主節(jié)點(diǎn),控制整個(gè)集群新翎,監(jiān)控worker程帕。
- Worker Node從節(jié)點(diǎn),負(fù)責(zé)控制計(jì)算節(jié)點(diǎn)地啰,啟動Executor或者Driver
- Executor是在WorkerNode上起的一個(gè)進(jìn)程
- Task骆捧,負(fù)責(zé)內(nèi)存和磁盤的使用。
- Driver是統(tǒng)管Task的產(chǎn)生與發(fā)送給Executor的髓绽,運(yùn)行Application 的main()函數(shù)
- Application由多個(gè)Job組成怔昨,Job由多個(gè)Stage組成捕儒,Stage由多個(gè)Task組成裆熙。Stage是作業(yè)調(diào)度的基本單位必指。
4.Spark 運(yùn)行原理
1.構(gòu)建Spark Application的運(yùn)行環(huán)境,啟動SparkContext
2.SparkContext向資源管理器(可以是Standalone株茶,Mesos来涨,Yarn)申請運(yùn)行Executor資源,并啟動StandaloneExecutorbackend启盛,
3.Executor向SparkContext申請Task
4.SparkContext將應(yīng)用程序分發(fā)給Executor
5.SparkContext構(gòu)建成DAG圖蹦掐,將DAG圖分解成Stage、將Taskset發(fā)送給Task Scheduler僵闯,最后由Task Scheduler將Task發(fā)送給Executor運(yùn)行
6.Task在Executor上運(yùn)行卧抗,運(yùn)行完釋放所有資源