paulwong

          SPARK架構(gòu)與流程

          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í)行。

          Spark架構(gòu)采用了分布式計算中的Master-Slave模型。Master是對應(yīng)集群中的含有Master進程的節(jié)點(ClusterManager),Slave是集群中含有Worker進程的節(jié)點。Master作為整個集群的控制器,負責整個集群的正常運行;Worker相當于是計算節(jié)點,接收主節(jié)點命令與進行狀態(tài)匯報;Executor負責任務(wù)的執(zhí)行;Client作為用戶的客戶端負責提交應(yīng)用,Driver負責控制一個應(yīng)用的執(zhí)行,如圖下圖:



                                                                                           Spark 框架圖

           

          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的架構(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:實現(xiàn)將Spark作業(yè)分解成一到多個Stage,每個Stage根據(jù)RDD的Partition個數(shù)決定Task的個數(shù),然后生成相應(yīng)的Task set放到TaskScheduler中。

          TaskScheduler:將任務(wù)(Task)分發(fā)給Executor執(zhí)行。

          Stage:一個Spark作業(yè)一般包含一到多個Stage。

          Task:一個Stage包含一到多個Task,通過多個Task實現(xiàn)并行運行的功能。

          Transformations:轉(zhuǎn)換(Transformations) (如:map, filter, groupBy, join等),Transformations操作是Lazy的,也就是說從一個RDD轉(zhuǎn)換生成另一個RDD的操作不是馬上執(zhí)行,Spark在遇到Transformations操作時只會記錄需要這樣的操作,并不會去執(zhí)行,需要等到有Actions操作的時候才會真正啟動計算過程進行計算。

          Actions:操作(Actions) (如:count, collect, save等),Actions操作會返回結(jié)果或把RDD數(shù)據(jù)寫到存儲系統(tǒng)中。Actions是觸發(fā)Spark啟動計算的動因。

          SparkEnv:線程級別的上下文,存儲運行時的重要組件的引用。

          SparkEnv內(nèi)創(chuàng)建并包含如下一些重要組件的引用。

          MapOutPutTracker:負責Shuffle元信息的存儲。

          BroadcastManager:負責廣播變量的控制與元信息的存儲。

          BlockManager:負責存儲管理、創(chuàng)建和查找塊。

          MetricsSystem:監(jiān)控運行時性能指標信息。

          SparkConf:負責存儲配置信息。

           



                                                                                 Spark運行邏輯圖

           

          在Spark應(yīng)用中,整個執(zhí)行流程在邏輯上會形成有向無環(huán)圖(DAG)。Action算子觸發(fā)之后,將所有累積的算子形成一個有向無環(huán)圖,然后由調(diào)度器調(diào)度該圖上的任務(wù)進行運算。Spark的調(diào)度方式與MapReduce有所不同。Spark根據(jù)RDD之間不同的依賴關(guān)系切分形成不同的階段(Stage),一個階段包含一系列函數(shù)執(zhí)行流水線。圖中的A、B、C、D、E、F分別代表不同的RDD,RDD內(nèi)的方框代表分區(qū)。數(shù)據(jù)從HDFS輸入Spark,形成RDD A和RDD C,RDD C上執(zhí)行map操作,轉(zhuǎn)換為RDD D, RDD B和 RDD E執(zhí)行join操作,轉(zhuǎn)換為F,而在B和E連接轉(zhuǎn)化為F的過程中又會執(zhí)行Shuffle,最后RDD F 通過函數(shù)saveAsSequenceFile輸出并保存到HDFS或 Hbase中

          posted on 2015-06-18 13:17 paulwong 閱讀(515) 評論(0)  編輯  收藏 所屬分類: SPARK


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 浮山县| 金华市| 岫岩| 宁都县| 亳州市| 兴义市| 新丰县| 吕梁市| 内乡县| 英德市| 攀枝花市| 苏尼特左旗| 四川省| 深泽县| 阿拉善左旗| 泌阳县| 绥宁县| 喀喇| 施秉县| 赤壁市| 乌兰察布市| 梓潼县| 津市市| 论坛| 乃东县| 乐清市| 榆中县| 龙海市| 云龙县| 武陟县| 长武县| 金华市| 万宁市| 成安县| 获嘉县| 三台县| 都江堰市| 香河县| 密山市| 南昌市| 灵璧县|