spark運行架構 storm 流數據處理

回顧:spark編程模型幾個要素:driver program,輸入,transformation,action,緩存,共享變量
RDD :特性:分區,依賴,函數,分區策略(K,V),本地性策略

spark運行架構
Job:包含多個Task組成的並行計算,由Spark action催生
Stage:Job的調動單位,對應於TaskSet
TaskSet:
Task:被送到某個executor的工作單元

  DAGScheduler構建Stage
  紀錄哪個RDD或者Stage輸出被物化--物化,計算結果複雜
  重新提交shuffle輸出丟失的stage
  將Taskset 傳給底層調度器
              -spark-cluster taskcheduler
              -yarn-cluster yarnclusetcheduler
              -yarn-client yarnclientclustercheduler

    taskScheduler:
            爲每個taskset構建一個tasksetmanager實例管理這個taskset的生命週期
            數據本地性決定每個task最佳位置(process-local,node-local,rock-local and then any)
            提交taskset(一組task)到集羣運行並監控
            推測執行,碰到straggle任務(卡住的任務)需要放到別的節點上重試
            出現shuffle輸出lost要報告fetch failed錯誤
        driver->executerbackend:
            driver -> (觸發action runjob)sparkcontext->(提交job runjob)DAGScheduler ->(把stage劃分成task submittasks)
            taskscheduler->(把task添加到隊列reviveOffers)schedulerBackend ->(調度task給指定的executer launchtask)executerbackend
        executerbackend->driver:
            1,任務執行成功status update -> schedulerBackend -(2,,任務執行成功status update ) ->taskScheduler    
             -(3,刪除task removeRunningTask)->TaskSet Manager...
    兩種task:shuffleMaptask和resultTask,被執行的task多數都是shuffleMaptask
         resultTask --finalStage 所對應任務,返回給driver的是運算結果本身
                    結果足夠小,則直接放在directorTaskResult對象內
                    超過特定尺寸(默認10MB)則在executor端會將directTaskResult先序列化,再把序列化結果作爲一個block存放在blockManager裏,

而後將blockManager返回的blockID放在indirectaskresult對象中返回給driver
shuffleMaptask,返回給DAGScheduler的是一個MapStatus對象,MapStatus對象管理了shuffleMapTask的運算輸出結果在shuffleblockManager
裏的相關存儲信息,而非結果本身,這些存儲位置信息將作爲下一個Stage的任務的獲取輸入數據的依據
shuffle的結果patition數目有shuffleDependcy 中的partitioner對象來決定
spark內核將提供一個可拔插的shuffle接口

     更多細節:blockManager,AKKA(消息傳遞組件),NETTY(網絡IO組件)。。。

     例子:
     val lines=ssc.textfile(args(1))
     val words=lines.flatMap(x=>[x.split("")])
     wordCounts=words....


    (多組)        
    hadoopRDD->MapperRDD(String)->FlatMapperRDD(String)->PairRDD->MapPartitionRDD-(一對多)-->ShuffleRDD->MapPartitionsRDD->PairRDDFunction     

storm 流數據處理
解決方案:進程常駐運行,數據在內存中
常用流處理系統:storm,trlent,s4,spark streaming

storm 簡介
nimbus 資源分配和任務調度,把任務相關信息寫進zookeeper相應目錄
supervlsor 接受nimbus分配任務,啓動和停止屬於自己管理的worker進程
worker 運行具體處理組件邏輯的進程
executer 運行spout/bolt線程
task work中每個spout/bolt線程稱爲task

    topology storm中運行的實時應用呈現,消息在各個組件間流動形成邏輯上拓撲結構
    spout 在一個topology中產生源數據流的組件,主動
    bolt 在以topology中接受數據然後執行處理的組件,被動

     tuple 消息傳遞的單元
     stream 源源不斷傳遞的tuple
     stream grouping 消息的partition。。。shuffle,fields,hash
 多語言編程:java,ruby,python,增加其他語言支持,增加一個簡單storm通信協議計科
 容錯性,確保一個計算一直運行下棋
 水平拓展:計算是在多個線程,進程和服務器之間並行進行的
 快速
 系統可靠性:建立在zookeeper上大量系統運行狀態的元信息都序列化在zk上
發佈了11 篇原創文章 · 獲贊 11 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章