原创 Spark編程入口 — SparkContext及其初始化

在之前我們分析了Spark的內核架構運行機制,其中有一個很重要的組件SparkContext,這裏我們就分析SparkContext的相關源碼。 我們知道所有的Spark程序,在運行之前都需要創建一個非常重要的組件,那就是SparkCon

原创 SparkCore — Master資源調度機制 schedule()分析

Driver向Master進行Application註冊的時候,Master註冊完之後,會調用schedule()方法,進行資源調度。下面我們對schedule()源碼進行分析,schedule()源碼如下: private def

原创 SparkCore — Executor註冊

Executor註冊   註冊的機制流程如下,CoarseGrainedExecutorBackend進程啓動之後,會立即向Driver發送消息註冊RegisterExecutor消息,Driver註冊成功之後,會返回Regis

原创 SparkCore — Master資源調度,啓動Executor

 上一篇文章講解了Master的資源調度算法,對每個可用worker分配完資源之後,下面就需要在每個worker上啓動相應的executor了,下面對源碼進行分析: // 給每個worker分配完資源給application之後

原创 Spark編程入口 — AppClient接收Master註冊信息補充

在之前SparkContext初始化流程圖最後,AppClient通過ClientEndPoint發送註冊消息給Master,Master在接收到消息之後,首先調用registerApplication,提取Application的相關信

原创 SparkStreaming — 數據接收原理

SparkStreaming的數據接收原理   Spark Streaming數據接收主要是發生在Receiver啓動之後,啓動的一個組件BlockGenerator,通過這個組件來進行數據的接收和存儲。具體的流程如下:  

原创 Spark Streaming — StreamingCongtext初始化及Receiver啓動

StreamingContext初始化   StreamingContext在初始化的時候,會創建兩個重要的組件DStreamGraph和JobScheduler,如下所示: // 這裏初始化的一個重要的組件DStreamG

原创 SparkCore — ShuffleReader過程

Shuffle Reader   在之前的博客中,分析了shuffle map端的操作,map最終會將輸出文件信息封裝爲一個MapStatus發送給Driver,然後ResultTask或ShuffleMapTask在拉取數據的

原创 SparkCore — Task執行源碼分析之TaskRunner.run()

Task原理與源碼分析   在Executor註冊完成之後,接收到Driver發送的LaunchTask消息之後,會調用executor執行句柄的launchTask()方法,裏面封裝了TaskRunner線程,然後將其放入線程

原创 SparkCore — Task執行源碼分析之Task.run()源碼分析

Task.run()源碼分析   上一篇博客分析了TaskRunner.run()源碼,它裏面有兩個比較重要的方法一個是Task.run() — task的執行,還有就是task執行結束後將執行結果發送給Driver的Statu

原创 SparkCore — SortShuffle源碼分析下

SortShuffle 源碼分析下   接着上一篇博客,我們分析到了maybeSpill()它會分析是否需要進行溢寫到磁盤操作,假如需要溢寫那麼會調用 spill()方法,這個方法是在Spillable中定義的,它是一個trai

原创 Scala閉包和Java閉包

Scala 閉包   函數在變量不處於其有效作用域時,還能對變量進行訪問。下面舉例說明: // 定義函數,它的返回值是一個匿名函數 def getFunc(msg : String) = (name : String) => p

原创 SparkCore — Executor底層數據管理組件BlockManager

BlockManager的運行過程   爲了方便的講解運行過程,如下圖所示:   上圖中將BlockManager運行過程中比較重要的組件畫出來了,其中每個BlockManager中有比較重要的四個組件,DiskStore負責

原创 SparkCore — Task最佳位置

Task最佳位置   上一篇博客中stage劃分完之後,就對stage進行提交,使用的是submitMissingTasks()這個方法對每個stage創建一個TaskSet,然後將其提交到對應的worker的executor上運

原创 SparkCore — Master主備切換

Master實際上是可以配置兩個的,Standalone模式下也支持主備切換,也就是說當Active Master節點掛掉的時候,standby Master就會切換爲Active Master。 Spark Master主備切換一般常用