一.Spark架構(gòu)
1.Spark架構(gòu)中的組件
(1)Client:提交應(yīng)用的客戶端
(2)Driver:執(zhí)行Application中的main函數(shù)并創(chuàng)建SparkContext
(3)ClusterManager:在YARN模式中為資源管理器忆嗜。在Standalone模式中為Master(主節(jié)點)昧旨,控制整個集群囚聚。
(4)worker:從節(jié)點,負責(zé)控制計算節(jié)點弛说。啟動Executor或Driver,在YARN模式中為NodeManager
(5)Executor:在計算節(jié)點上執(zhí)行任務(wù)的組件
(6)SparkContext:應(yīng)用的上下文肠虽,控制應(yīng)用的生命周期
(7)RDD:彈性分布式數(shù)據(jù)集醉者,spark的基本計算單元,一組RDD可形成有向無環(huán)圖窥岩。
(8)DAG Scheduler:根據(jù)應(yīng)用構(gòu)建基于stage的DAG舶赔,并將Stage提交給Task Scheduler
(9)Task ScheduIer:將Task分發(fā)給Executor執(zhí)行
(10)SparkEnv:線程級別的上下文,存儲運行時重要組件的應(yīng)用谦秧,具體如下:
* SparkConf:存儲配置信息竟纳。
* BroadcastManager:負責(zé)廣播變量的控制及元信息的存儲
* BlockManager:負責(zé)Block的管理、創(chuàng)建和查找
* MetricsSystem:監(jiān)控運行時的性能指標疚鲤。
* MapOutputTracker:負責(zé)shuffle元信息的存儲
2.spark架構(gòu)揭示了spark的具體流程如下:
(1)用戶在Client提交了應(yīng)用
(2)Master找到Worker锥累,并啟動Driver
(3)Driver向資源管理器(YARN模式)或者Master(standalone模式)申請資源,并將應(yīng)用轉(zhuǎn)化為RDD Graph
(4)DAG Scheduler將RDD Graph轉(zhuǎn)化為Stage的有向無環(huán)圖提交給Task Scheduler
(5)Task ScheduIer提交任務(wù)給Executor執(zhí)行
二.RDD
1.Spark彈性數(shù)據(jù)集RDD有兩種創(chuàng)建方式:
(1)從文件系統(tǒng)輸入(如HDFS)
(2)從已存在的RDD轉(zhuǎn)換得到新的RDD
2.RDD的兩種操作算子
(1)Transformation(變換)
* Transformation類型的算子不是立刻執(zhí)行集歇,而是延遲執(zhí)行桶略。也就是說從一個RDD變換為另一個RDD的操作需要等到Action操作觸發(fā)時,才會真正執(zhí)行诲宇。
(2)Action(行動)
* Action類型的算子會觸發(fā)spark提交作業(yè)际歼,并將數(shù)據(jù)輸出到spark系統(tǒng)。
3.RDD依賴
(1)窄依賴:
如果RDD的每個分區(qū)最多只能被一個Child RDD的一個分區(qū)使用姑蓝,則稱之為窄依賴(narrowdependency)鹅心;
(2)寬依賴:
若多個Child RDD分區(qū)都可以依賴,則稱之為寬依賴(widedependency)纺荧。
4.RDD特性總結(jié)
(1)RDD是不變的數(shù)據(jù)結(jié)構(gòu)存儲
(2)RDD將數(shù)據(jù)存儲在內(nèi)存中旭愧,從而提供了低延遲性
(3)RDD是支持跨集群的分布式數(shù)據(jù)結(jié)構(gòu)
(4)RDD可以根據(jù)記錄的Key對結(jié)構(gòu)分區(qū)
(5)RDD提供了粗粒度的操作颅筋,并且都支持分區(qū)
5.算子分類
根據(jù)所處理的數(shù)據(jù)類型及處理階段的不同,算子大致可以分為如下三類:
(1)處理value數(shù)據(jù)類型的Transformation算子输枯;這種變換并不觸發(fā)提交作業(yè)议泵,處理的數(shù)據(jù)項是value型的數(shù)據(jù)
(2)處理Key-Value數(shù)據(jù)類型的Transfromation算子;這種變換并不觸發(fā)提交作業(yè)桃熄,處理的數(shù)據(jù)項是Key-Value型的數(shù)據(jù)對先口。
(3)Action算子:這類算子觸發(fā)SparkContext提交作業(yè)
三.Spark機制原理
1.Spark運行模式
(1)Spark運行模式分為:Local,Standalone,Yarn,Mesos
(2)根據(jù)Spark Application的Driver Program是否在集群中運行,Spark應(yīng)用的運行方式又可以分為Cluster模式和Client模式
2.Spark應(yīng)用的基本概念
(1)SparkContext:spark應(yīng)用程序的入口瞳收,負責(zé)調(diào)度各個運算資源池充,協(xié)調(diào)各個Worker Node上的Executor
(2)DriverProgram:運行Application的main()函數(shù)并創(chuàng)建SparkContext
(3)RDD:RDD是Spark的核心數(shù)據(jù)結(jié)構(gòu),可以通過一系列算子進行操作缎讼。當(dāng)RDD遇到Action算子時收夸,將之前的所有算子形成一個有向無環(huán)圖(DAG)。再在Spark中轉(zhuǎn)化為Job血崭,提交到集群執(zhí)行卧惜。一個App中可以包含多個Job。
(4)Worker Node:集群中任何可以運行Application代碼的節(jié)點夹纫,運行一個或多個Executor進程
(5)Executor:為Application運行在Worker Node上的一個進程咽瓷,該進程負責(zé)運行Task,并且負責(zé)將數(shù)據(jù)存在內(nèi)存或者磁盤上舰讹。每個Application都會申請各自的Executor來處理任務(wù)茅姜。
3.Spark應(yīng)用(Application)執(zhí)行過程中各個組件的概念:
(1)Task(任務(wù)):RDD中的一個分區(qū)對應(yīng)一個Task,Task是單個分區(qū)上最小的處理流程單元月匣。
(2)TaskSet(任務(wù)集):一組關(guān)聯(lián)的钻洒,但相互之間沒有Shuffle依賴關(guān)系的Task集合。
(3)Stage(調(diào)度階段):一個TaskSet對應(yīng)的調(diào)度階段锄开。每個Job會根據(jù)RDD的寬依賴關(guān)系被切分很多stage素标,每個stage都包含一個TaskSet。
(4)Job(作業(yè)):由Action算子觸發(fā)生成的由一個或多個stage組成的計算作業(yè)
(5)Application:用戶編寫的Spark的應(yīng)用程序萍悴,由一個或多個Job組成头遭。提交到Spark之后,Spark為Application分配資源癣诱,將程序轉(zhuǎn)換并執(zhí)行计维。
(6)DAGScheduler:根據(jù)Job構(gòu)建基于Stage的DAG,并提交Stage給TaskScheduler撕予。
(7)TaskScheduler:將Taskset提交給Worker Node集群運行并返回結(jié)果鲫惶。
4.Spark應(yīng)用執(zhí)行機制概要
四.Spark內(nèi)核
1.Spark Core內(nèi)模塊概述
(1)Api:Java、Python及R語言API的實現(xiàn)
(2)BroadCast:包含廣播變量的實現(xiàn)
(3)Deploy:spark部署與啟動運行的實現(xiàn)
(4)Executor:worker節(jié)點負責(zé)計算部分的實現(xiàn)
(5)Metrics:運行時狀態(tài)監(jiān)控的實現(xiàn)
(6)Network:集群通信實現(xiàn)
(7)Partial:近似評估代碼嗅蔬。
(8)Serializer:序列化模塊
(9)Storage:存儲模塊
(10)UI:監(jiān)控界面的代碼邏輯實現(xiàn)剑按。
2.Spark Core外模塊概述
(1)Begal:Pregel是Google的圖計算框架疾就,Begal是基于Spark的輕量級Pregel實現(xiàn)澜术。
(2)MLlib:機器學(xué)習(xí)算法庫艺蝴。
(3)SQL:SQL on Spark,提供大數(shù)據(jù)上的查詢功能。
(4)GraphX:圖計算模塊的實現(xiàn)
(5)Streaming:流處理框架Spark Streaming的實現(xiàn)
(6)YARN:Spark on YARN的部分實現(xiàn)
五.Spark SQL