Spark API

[SparkContext]
        連接到spark集羣,入口點.

    [HadoopRDD]
        讀取hadoop上的數據,

    [MapPartitionsRDD]
        針對父RDD的每個分區提供了函數構成的新類型RDD.

    [PairRDDFunctions]
        對偶RDD函數類。
        可用於KV類型RDD的附加函數。可以通過隱式轉化得到.

    [ShuffleRDD]
        從Shuffle中計算結果的RDD.

    [RDD]
        是分區的集合.
        彈性分佈式數據集.
        不可變的數據分區集合.
        基本操作(map filter , persist)
        分區列表                    //數據
        應用給每個切片的計算函數    //行爲
        到其他RDD的依賴列表            //依賴關係
        (可選)針對kv類型RDD的分區類
        (可選)首選位置列表
    
    [DAGScheduler]
        高級調度器層面,實現按照階段(stage),shuffle按照.
        對每個JOB的各階段計算有向無環圖(DAG),並且跟蹤RDD和每個階段的輸出。
        找出最小調度運行作業,將Stage對象以TaskSet方式提交給底層的調度器。
        底層調度器實現TaskScheduler,進而在cluster上運行job.
        TaskSet已經包含了全部的單獨的task,這些Task都能夠基於cluster的數據進行
        正確運行。

        Stage通過在需要shuffle的邊界處將RDD打碎來創建Stage對象。
        具有'窄依賴'的RDD操作(比如map /filter)被管道化至一個taskset中.
        而具有shuffle依賴的操作則包含多個Stage(一個進行輸出,另一個進行輸入)
        最會,每個stage都有一個針對其他stage的shuffle依賴,可以計算多個操作。
    
        Dag調度器檢測首選位置來運行rask,通過基於當前的緩存狀態,並傳遞給底層的
        task調度器來實現。根據shuffle的輸出是否丟失處理故障問題。

        不是由stage內因爲丟失文件引發的故障有task調度處理。在取消整個stage之前,
        task會進行少量次數的重試操作。

        爲了容錯,同一stage可能會運行多次,稱之爲"attemp",如果task調度器報告了一個故障(該
        故障是由於上一個stage丟失輸出文件而導致的)DAG調度就會重新提交丟失的stage。這個通過
        具有 FetchFailed的CompletionEvent對象或者ExecutorLost進行檢測的。
        DAG調度器會等待一段時間看其他節點或task是否失敗,然後對丟失的stage重新提交taskset,
        計算丟失的task。

術語介紹

 

[job]
            提交給調度的頂層的工作項目,由ActiveJob表示。
            是Stage集合。

        [Stage]
            是task的集合,計算job中的中間結果。同一RDD的每個分區都會應用相同的計算函數。
            在shuffle的邊界處進行隔離(因此引入了隔斷,需要上一個stage完成後,才能得到output結果)
            有兩種類型的stage:1)ResultStage,用於執行action動作的最終stage。2)ShuffleMapStage,
            對shuffle進行輸出文件的寫操作的。如果job重用了同一個rdd的話,stage通常可以跨越多個
            job實現共享。

            並行任務的集合,都會計算同一函數。所有task有着同樣的shuffle依賴,調度器運行的task DAG
            在shuffle邊界處劃分成不同階段。調度器以拓撲順序執行.

            每個stage可以shuffleMapStage,該階段下輸出是下一個stage的輸入,也可以是resultStage,該階段
            task直接執行spark action。對於shuffleMapStage,需要跟蹤每個輸出分區所在的節點。

            每個stage都有FirstJobId,區分於首次提交的id
            
            [ShuffleMapStage]
                產生輸出數據,在每次shuffle之前發生。內部含有shuffleDep字段,有相關字段記錄產生多少輸出
                以及多少輸出可用。
                DAGScheduler.submitMapStage()方法可以單獨提交ubmitMapStage().

            [ResultStage]
                該階段在RDD的一些分區中應用函數來計算Action的結果。有些stage並不會在所有分區上執行。
                例如first(),lookup();

        [Task]
            單獨的工作單元,每個發送給一臺主機。

        [Cache tracking]
            Dag調度器找出哪些RDD被緩存,避免不必要的重複計算,同時,也會記住哪些shuffleMap已經輸出了
            結果,避免map端shuffle的重複處理。

        [Preferred locations]
            dag調度器根據rdd的中首選位置屬性計算task在哪裏運行。

        [Cleanup]
            運行的job如果完成就會清楚數據結構避免內存泄漏,主要是針對耗時應用。

        
        [ActiveJob]
            在Dag調度器中運行job。作業分爲兩種類型,1)result job,計算ResultStage來執行action.
            2)map-state job,爲shuffleMapState結算計算輸出結果以供下游stage使用。
            主要使用finalStage字段進行類型劃分。

            job只跟蹤客戶端提交的"leaf" stage,通過調用Dag調度器的submitjob或者submitMapStage()方法實現.
            job類型引發之前stage的執行,而且多個job可以共享之前的stage。這些依賴關係由DAG調度器內部管理。

        [LiveListenerBus]
            異步傳輸spark監聽事件到監聽器事件集合中。

        [EventLoop]
            從caller接受事件,在單獨的事件線程中處理所有事件,該類的唯一子類是DAGSchedulerEventProcessLoop。

        [LiveListenerBus]
            監聽器總線,存放Spark監聽器事件的隊列。用於監控。
        
        [OutputCommitCoordinator]
            輸出提交協調器.決定提交的輸出是否進入hdfs。

        
        [TaskScheduler]
            底層的調度器,唯一實現TaskSchedulerImpl。可插拔,同Dag調度器接受task,發送給cluster,
            運行任務,失敗重試,返回事件給DAG調度器。
        
        [TaskSchedulerImpl]
            TaskScheduler調度器的唯一實現,通過BackendScheduler(後臺調度器)實現各種類型集羣的任務調度。
        

        [SchedulerBackend]
            可插拔的後臺調度系統,本地調度,mesos調度,。。。
            在任務調度器下方,
            實現有三種
            1.LocalSchedulerBackend
                本地後臺調度器
                啓動task.
            
            2.StandaloneSchedulerBackend
                獨立後臺調度器

            3.CoarseGrainedSchedulerBackend
                粗粒度後臺調度器

        [Executor]
            spark程序執行者,通過線程池執行任務。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章