Spark 架構(gòu)與角色介紹
角色介紹
Spark架構(gòu)使用了分布式計算中master-slave模型刷后,master是集群中含有master進程的節(jié)點刽锤,slave是集群中含有worker進程的節(jié)點拜姿。
- Driver Program :運?main函數(shù)并且新建SparkContext的程序殉了。
- Application:基于Spark的應(yīng)用程序互躬,包含了driver程序和集群上的executor播赁。
- Cluster Manager:指的是在集群上獲取資源的外部服務(wù)。目前有三種類型
- (1)Standalone: spark原生的資源管理吼渡,由Master負責(zé)資源的分配
- (2)Apache Mesos:與hadoop MR兼容性良好的一種資源調(diào)度框架
- (3)Hadoop Yarn: 主要是指Yarn中的ResourceManager
- Worker Node: 集群中任何可以運行Application代碼的節(jié)點容为,在Standalone模式中指的是通過slaves文件配置的Worker節(jié)點,在Spark on Yarn模式下就是NodeManager節(jié)點
- Executor:是在一個worker node上為某應(yīng)?啟動的?個進程,該進程負責(zé)運?行任務(wù)坎背,并且負責(zé)將數(shù)據(jù)存在內(nèi)存或者磁盤上替劈。每個應(yīng)?都有各自獨立的executor。
- Task :被送到某個executor上的工作單元得滤。
spark 常見端口及功能
- namenode的webUI端口:50070
- yarn的web端口:8088
- spark集群的web端口:8080
- spark-job監(jiān)控端口:4040
- job history 端口:18080
Spark Driver功能
- Driver運行應(yīng)用程序的時候陨献,具有main方法,且創(chuàng)建了SparkContext懂更,是整個程序運行的調(diào)度的核心眨业。內(nèi)部會有高層調(diào)度器(DAGScheduler)和底層調(diào)度器(TaskScheduler),高層調(diào)度器把整個作業(yè)(Job)劃分成幾個小的階段(Stage)沮协,底層調(diào)度器負責(zé)每個階段內(nèi)的任務(wù)(Task)該怎么去執(zhí)行龄捡。由SchedulerBackend管理整個集群中為當前運行的應(yīng)用程序分配的計算資源,分配的計算資源其實就是Executors皂股,同時向Master注冊當前的應(yīng)用程序墅茉,如果注冊成功,Master會向其分配資源呜呐。下一步根據(jù)action級別的操作出發(fā)job就斤,job中會有一系列的RDD,從后往前推蘑辑,如果是寬依賴的話就劃分為不同的Stage洋机,劃分完成后提交給底層調(diào)度器TaskScheduler,TaskScheduler拿到具體的任務(wù)的集合洋魂,然后根據(jù)數(shù)據(jù)的本地性原則绷旗,把任務(wù)發(fā)放到對應(yīng)的Executor上去執(zhí)行,當Executor運行成功或者出現(xiàn)狀況的話都會向Driver進行匯報副砍,最后運行完成之后關(guān)閉SparkContext衔肢,所創(chuàng)建的對象也會隨之關(guān)閉。
Spark worker功能
- 主要功能:管理當前節(jié)點內(nèi)存豁翎,CPU的使用狀況角骤,接收master分配過來的資源指令,通過ExecutorRunner啟動程序分配任務(wù)心剥,worker就類似于包工頭邦尊,管理分配新進程,做計算的服務(wù)优烧,相當于process服務(wù)蝉揍。
- 需要注意的是:
- 1)worker不會匯報當前信息給master,worker心跳給master主要只有workid畦娄,它不會發(fā)送資源信息以心跳的方式給mater又沾,master分配的時候就知道worker弊仪,只有出現(xiàn)故障的時候才會發(fā)送資源。
- 2)worker不會運行代碼捍掺,具體運行的是Executor是可以運行具體appliaction寫的業(yè)務(wù)邏輯代碼撼短,操作代碼的節(jié)點,它不會運行程序的代碼的挺勿。
Spark executor功能
- Executor是運行在Worker所在的節(jié)點上為當前應(yīng)用程序而開啟的進程里面的一個對象曲横,這個對象負責(zé)了具體task的運行,具體是通過線程池并發(fā)執(zhí)行和復(fù)用的方式實現(xiàn)的不瓶。
- 這里要補充一點:Hadoop的MR是運行在一個又一個JVM上禾嫉,而JVM比較重量級且不能被復(fù)用,而Spark中是通過線程池并發(fā)執(zhí)行和復(fù)用的方式執(zhí)行tasks蚊丐,極大的方便了迭代式計算熙参,所以Spark的性能大大提高。每個task的計算邏輯一樣麦备,只是處理的數(shù)據(jù)不同而已孽椰。
- Spark應(yīng)用程序的運行并不依賴于Cluster Manager,如果應(yīng)用程序注冊成功凛篙,Master就已經(jīng)提前分配好了計算資源黍匾,運行的過程中跟本就不需要Cluster Manager的參與(可插拔的),這種資源分配的方式是粗粒度的呛梆。
- 關(guān)于數(shù)據(jù)本地性锐涯,是在DAGScheduler劃分Stage的時候確定的,TaskScheduler會把每個Stage內(nèi)部的一系列Task發(fā)送給Executor填物,而具體發(fā)給哪個Executor就是根據(jù)數(shù)據(jù)本地性原則確定的纹腌,有關(guān)數(shù)據(jù)本地性的詳細內(nèi)容也會在后面的文章中進行說明。
Attention Please--文章來自互聯(lián)網(wǎng)資料整理滞磺,如有雷同升薯,純屬李小李抄襲,如有侵權(quán)請聯(lián)系刪除 From 李小李