深入理解Spark——準(zhǔn)備篇

跟蹤源碼

spark-shell -> spark-submit -> spark-class

spark-shell
spark-submit
spark-class

SparkSubmit -> repl.Main -> ILoop ( SparkILoop ).process -> loadFiles ( initializeSpark ( createSparkSession ) ) -> printWelcome

repl.Main
ILoop.process
SparkILoop.loadFiles
SparkILoop.initializeSpark

Spark設(shè)計(jì)理念與基本架構(gòu)

Hadoop MRv1

MRv1 示意圖

組成部分

1.運(yùn)行環(huán)境:JobTracker 和 TaskTracker

2.編程模型:MapReduce

3.數(shù)據(jù)處理引擎:Map Task 和 Reduce Task

缺點(diǎn)

1.JobTracker 既負(fù)責(zé) 資源管理 又負(fù)責(zé) 任務(wù)調(diào)度,容易成為瓶頸。

2.單 Master,容易down。

3.TaskTracker 采用 slot 等量劃分本節(jié)點(diǎn)上的資源量( CPU、內(nèi)存 )。slot 分為 Map slot 和 Reduce slot , MapTask 只能用 Map slot,ReduceTask 只能用 Reduce slot。有時(shí)會(huì) MapTask 較多時(shí),而 Reduce Task 還沒有被調(diào)度,這時(shí) Reduce slot 會(huì)被閑置。

Hadoop MRv2

MRv2 示意圖

改進(jìn)

1.JobTracker被拆分成了通用的資源調(diào)度平臺(tái)(ResourceManager RM)和負(fù)責(zé)各個(gè)計(jì)算框架的任務(wù)調(diào)度模塊(ApplicationMaster AM)。

2.MRv2 中核心不再是 MapReduce,而是Yarn,MapReduce 框架時(shí)可插拔的,可以用 Spark、Storm 替代。

缺點(diǎn)

對(duì)HDFS的頻繁操作(包括計(jì)算結(jié)果持久化、數(shù)據(jù)備份以及 shuffle )導(dǎo)致磁盤 I/O 成為系統(tǒng)性能的瓶頸。只適合離線的數(shù)據(jù)處理,不具備實(shí)時(shí)處理的能力。


Spark

基本概念

RDD:彈性分布式數(shù)據(jù)集

Task:具體執(zhí)行的任務(wù)。分為 ShuffleMapTask 和 ResultTask兩種,兩者分別對(duì)應(yīng)與 Hadoop 中的 Map 和 Reduce。

Job:用戶提交的作業(yè)。

Stage:Job分成的階段。根據(jù)依賴劃分 Stage 。

Partition:數(shù)據(jù)分區(qū)。一個(gè)RDD數(shù)據(jù)可以被劃分成多個(gè) Partition。

NarrowDependency:窄依賴,即子 RDD 依賴于 RDD 中固定的 Partition。分為OneToOneDependency 和 RangeDependency 兩種。

ShuffleDependency:shuffle依賴,寬依賴。子 RDD 對(duì)父 RDD 中的所有 Partition 都有依賴。

DAG:有向無環(huán)圖。反映各 RDD 之間的依賴關(guān)系。

核心功能

SparkContext

Driver Application 的執(zhí)行與輸出都是通過 SparkContext 來完成的。

①內(nèi)置的 DAGScheduler 負(fù)責(zé)創(chuàng)建 Job,將 DAG 中的 RDD 劃分到不同的 Stage,提交 Stage 等功能。

②內(nèi)置的 TaskScheduler 負(fù)責(zé)資源的申請(qǐng)、任務(wù)的提交以及請(qǐng)求集群對(duì)任務(wù)的調(diào)度等工作。

存儲(chǔ)體系

優(yōu)先考慮使用各個(gè)節(jié)點(diǎn)的內(nèi)存作為存儲(chǔ)。Spark 還提供了以內(nèi)存為中心的高容錯(cuò)的分布式文件系統(tǒng) Tachyon 供用戶進(jìn)行選擇。Tachyon 能夠?yàn)?Spark 提供可靠的內(nèi)存級(jí)的文件共享服務(wù)。

計(jì)算引擎

由 SparkContext 中的 DAGScheduler、RDD以及具體節(jié)點(diǎn)上的 Executor 負(fù)責(zé)執(zhí)行的 Map 和 Reduce 任務(wù)組成。DAGScheduler 和 RDD 雖然位于 SparkContext 內(nèi)部,但是在任務(wù)正式提交與執(zhí)行之前會(huì)將 Job 中的 RDD 組成DAG,決定了執(zhí)行階段任務(wù)的數(shù)量、迭代計(jì)算、shuffle 等過程。

部署模式

SparkContext 的 TaskScheduler 組件中提供了對(duì) Standalone 部署模式的實(shí)現(xiàn)和 Yarn、Mesos 等分布式資源管理系統(tǒng)的支持。除此之外,還提供了 Local 模式便于開發(fā)和調(diào)試。

編程模型

代碼執(zhí)行過程

1.使用 SparkContext 提供的API 編寫 Driver application程序。

2.使用 SparkContext 提交用戶編寫的 Driver application程序。具體:

①使用 BlockManager 和 BroadcastManager 將任務(wù)的 Hadoop 配置進(jìn)行廣播。

② DAGSchduler 將任務(wù)轉(zhuǎn)換為 RDD 并組織成 DAG,DAG還將被劃分為不同的Stage。

③ TaskSchduler 通過 ActorSystem將任務(wù)提交給集群管理器(Cluster Manager)。

3.集群管理器(Cluster Manager)給任務(wù)分配資源,即將具體任務(wù)分配到 Worker上,Worker 創(chuàng)建 Executor 來處理任務(wù)的運(yùn)行。Standalone、YARN、Mesos、EC2 等都可以作為 Spark 的集群管理器。

RDD計(jì)算模型

每個(gè)分區(qū)的數(shù)據(jù)只會(huì)在一個(gè)Task中計(jì)算。

基本架構(gòu)

Spark 基本架構(gòu)

1.Cluster Manager

Spark 的集群管理器,主要負(fù)責(zé)資源的分配與管理。集群管理器分配的資源屬于一級(jí)分配,它將各個(gè) Worker 上的內(nèi)存、CPU 等資源分配給應(yīng)用程序(Driver application),但是并不負(fù)責(zé)對(duì) Executor 的資源分配。Standalone、YARN、Mesos、EC2 等都可以作為 Spark 的集群管理器。

2.Worker

Spark的工作節(jié)點(diǎn)。其獲得由集群資源(Cluster Manager)分配的資源,負(fù)責(zé)創(chuàng)建 Executor,將資源和任務(wù)進(jìn)一步分配給 Executor,同步資源信息給 Cluster Manager。

3.Executor

執(zhí)行計(jì)算任務(wù)的單元(線程 or 進(jìn)程?),主要負(fù)責(zé)任務(wù)的執(zhí)行以及與 Worker、Driver App的信息同步。

4.Driver App

客戶端應(yīng)用程序。用于將任務(wù)程序轉(zhuǎn)換為 RDD 和 DAG,并與 Cluster Manager 進(jìn)行通信與調(diào)度。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容