spark on yarn 完全分布式_「大数据」(七十一)Spark之架构介绍
【導讀:數(shù)據(jù)是二十一世紀的石油,蘊含巨大價值,這是·情報通·大數(shù)據(jù)技術(shù)系列第[71]篇文章,歡迎閱讀和收藏】
1 基本概念
Spark 架構(gòu)采用了分布式計算中的 Master-Slave 模型。 Master 是對應(yīng)集群中的含有 Master 進程的節(jié)點, Slave 是集群中含有 Worker 進程的節(jié)點。 Master 作為整個集群的控制器,負責整個集群的正常運行; Worker 相當于計算節(jié)點,接收主節(jié)點命令與進行狀態(tài)匯報; Executor 負責任務(wù)的執(zhí)行; Client 作為用戶的客戶端負責提交應(yīng)用, Driver 負責控制一個應(yīng)用的執(zhí)行。
Spark 集群部署后,需要在主節(jié)點和從節(jié)點分別啟動 Master 進程和 Worker 進程,對整個集群進行控制。在一個 Spark 應(yīng)用的執(zhí)行過程中, Driver 和 Worker 是兩個重要角色。 Driver 程序是應(yīng)用邏輯執(zhí)行的起點,負責作業(yè)的調(diào)度,即 Task 任務(wù)的分發(fā),而多個 Worker 用來管理計算節(jié)點和創(chuàng)建 Executor 并行處理任務(wù)。在執(zhí)行階段, Driver 會將 Task 和 Task 所依賴的 file 和 jar 序列化后傳遞給對應(yīng)的 Worker 機器,同時 Executor 對相應(yīng)數(shù)據(jù)分區(qū)的任務(wù)進行處理。
Spark 的整體流程為: Client 提交應(yīng)用, Master 找到一個 Worker 啟動 Driver , Driver 向 Master 或者資源管理器申請資源,之后將應(yīng)用轉(zhuǎn)化為 RDD Graph ,再由 DAGScheduler 將 RDD Graph 轉(zhuǎn)化為 Stage 的有向無環(huán)圖提交給 TaskScheduler ,由 TaskScheduler 提交任務(wù)給 Executor 執(zhí)行。在任務(wù)執(zhí)行的過程中,其他組件協(xié)同工作,確保整個應(yīng)用順利執(zhí)行。
2 術(shù)語解釋
RDD :是 Resillient Distributed Dataset (彈性分布式數(shù)據(jù)集)的簡稱,是分布式內(nèi)存的一個抽象概念,提供了一種高度受限的共享內(nèi)存模型。
DAG :是 Directed Acyclic Graph (有向無環(huán)圖)的簡稱,反映 RDD 之間的依賴關(guān)系。
Application :用戶編寫的 Spark 應(yīng)用程序。
Executor :是運行在工作節(jié)點( WorkerNode )的一個進程,負責運行 Task 。
Task :運行在 Executor 上的工作單元 。
Job :一個 Job 包含多個 RDD 及作用于相應(yīng) RDD 上的各種操作。
Stage :是 Job 的基本調(diào)度單位,一個 Job 會分為多組 Task ,每組 Task 被稱為 Stage , 或者也被稱為 TaskSet ,代表了一組關(guān)聯(lián)的、 相互之間沒有 Shuffle 依賴關(guān)系的任務(wù)組成的任務(wù)集。
3 架構(gòu)原理介紹
3.1 Spark 依賴
( 1 ) Map Reduce 模型
作為一個分布式計算框架, Spark 采用了 MapReduce 模型。在它身上, Google 的 Map Reduce 和 Hadoop 的痕跡很重,很明顯,它并非一個大的創(chuàng)新,而是微創(chuàng)新。在基礎(chǔ)理念不變的前提下,它借鑒,模仿并依賴了先輩,加入了一點改進,極大的提升了 MapReduce 的效率。
使用 MapReduce 模型解決大數(shù)據(jù)并行計算的問題,帶來的最大優(yōu)勢,是它和 Hadoop 的同屬一家人。因為同屬于 MapReduce 并行編程模型,而不是 MPI 和 OpenMP 其它模型,因此,復雜的算法,只要能夠以 Java 算法表達,在 Hadoop 上運行的,就能以 Scala 算法表達,在 Spark 上運行,而速度有倍數(shù)的提升。相比之下,在 MPI 和 Hadoop 算法之間切換,難度就大多了。
( 2 )函數(shù)式編程
Spark 由 Scala 寫就,而支持的語言亦是 Scala 。其原因之一就是 Scala 支持函數(shù)式編程。這一來造就了 Spark 的代碼簡潔,二來使得基于 Spark 開發(fā)的程序,也特別的簡潔。一次完整的 MapReduce , Hadoop 中需要創(chuàng)建一個 Mapper 類和 Reduce 類,而 Spark 只需要創(chuàng)建相應(yīng)的一個 map 函數(shù)和 reduce 函數(shù)即可,代碼量大大降低。
( 3 ) Mesos
Spark 將分布式運行的需要考慮的事情,都交給了 Mesos ,自己不 Care ,這也是它代碼能夠精簡的原因之一。
( 4 ) HDFS 和 S3
Spark 支持 2 種分布式存儲系統(tǒng): HDFS 和 S3 。應(yīng)該算是目前最主流的兩種了。對文件系統(tǒng)的讀取和寫入功能是 Spark 自己提供的,借助 Mesos 分布式實現(xiàn)。如果自己想做集群試驗,又沒有 HDFS 環(huán)境,也沒有 EC2 環(huán)境的話,可以搞個 NFS ,確保所有 MESOS 的 Slave 都可以訪問,也可以模擬一下。
3.2 Spark 架構(gòu)
Spark 架構(gòu)圖如下:
Spark 架構(gòu)中的基本組件
ClusterManager :在 Standalone 模式中即為 Master (主節(jié)點),控制整個集群,監(jiān)控 Worker 。在 YARN 模式中為資源管理器。
Worker :從節(jié)點,負責控制計算節(jié)點,啟動 Executor 或 Driver 。在 YARN 模式中為 NodeManager ,負責計算節(jié)點的控制。
Driver :運行 Application 的 main() 函數(shù)并創(chuàng)建 SparkContext 。
Executor :執(zhí)行器,在 worker node 上執(zhí)行任務(wù)的組件、用于啟動線程池運行任務(wù)。每個 Application 擁有獨立的一組 Executors 。
SparkContext :整個應(yīng)用的上下文,控制應(yīng)用的生命周期。
RDD : Spark 的基本計算單元,一組 RDD 可形成執(zhí)行的有向無環(huán)圖 RDD Graph 。
DAG Scheduler :根據(jù)作業(yè)( Job )構(gòu)建基于 Stage 的 DAG ,并提交 Stage 給 TaskScheduler 。
TaskScheduler :將任務(wù)( Task )分發(fā)給 Executor 執(zhí)行。
SparkEnv :線程級別的上下文,存儲運行時的重要組件的引用。
SparkEnv 內(nèi)創(chuàng)建并包含如下一些重要組件的引用。
MapOutPutTracker :負責 Shuffle 元信息的存儲。
BroadcastManager :負責廣播變量的控制與元信息的存儲。
BlockManager :負責存儲管理、創(chuàng)建和查找塊。
MetricsSystem :監(jiān)控運行時性能指標信息。
SparkConf :負責存儲配置信息。
Spark 結(jié)構(gòu)主要分為四個部分:
1. 用來提交作業(yè)的 Client 程序: client 是什么呢,比如 spark 中提交程序的 shell 窗口,宏觀上講,是一臺提交程序的物理機。負責將打包好的 spark 程序提交到集群中,提交完程序這個客戶端客戶端程序還發(fā)揮什么作用呢? yarn-client 模式下,客戶端提交程序后,在該客戶端上又運行著一個 driver 程序,這個 client 的作用持續(xù)到 spark 程序運行完畢,而 yarn-cluster 模式下,客戶端提交程序后就不再發(fā)揮任何作用,也就是說僅僅發(fā)揮了提交程序包的作用。
2. 用來驅(qū)動程序運行的 Driver 程序: driver 完成的工作主要是創(chuàng)建用戶的上下文,這個上下文中包括很多控件比如 DADScheduler 、 TaskScheduler 等等,這些控件完成的工作也稱為 driver 完成的。 driver 中完成 RDD 的生成,將 RDD 劃分成有向無環(huán)圖,生成 task ,接受 master 的指示將 task 發(fā)送到 worker 節(jié)點上進行執(zhí)行等工作。
3. 用來進行資源調(diào)度的 ClusterManager: 整個集群的 master ,主要完成資源的調(diào)度,涉及一些調(diào)度算法,自帶的資源管理器只支持 FIFO 調(diào)度, yarn 和 mesos 還支持其他方式的調(diào)度算發(fā)。 CM 一邊和 driver 打交道 ,一邊和 worker 打交道, driver 向 CM 申請資源, worker 通過心跳機制向 CM 匯報自己的資源和運行情況, CM 告訴 driver 應(yīng)該向哪些 worker 發(fā)送消息, 然后 driver 把 task 發(fā)送到這些可用的 worker 上
4. 用來執(zhí)行程序的 worker:worker 用多個 executor 來執(zhí)行程序
3.3 Spark 運行模式
總結(jié)
以上是生活随笔為你收集整理的spark on yarn 完全分布式_「大数据」(七十一)Spark之架构介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vs code 插件_[VSCode插件
- 下一篇: python按列读取txt文件_如何使用