您好,登錄后才能下訂單哦!
本期內容:
解密Spark Streaming 運行機制
解密Spark Streaming 框架
Spark Streaming是Spark的一個子框架,但是它更像是運行在Spark Core上的一個應用程序。Spark Streaming在啟動時運行了很多的job,并且job之間相互配合。
Job圍繞了兩個方面:
1. 對輸入數據流進行計算的Job
2. 框架自身運行需要的Job,例如Receiver啟動。
Spark Streaming本身就是一個非常復雜的應用程序,如果你對SparkStreaming了如指掌,那么你將非常輕松的編寫任意的應用程序。
我們看一下Spark的架構圖:
Spark core上面有4個流行的框架:SparkSQL、流計算、機器學習、圖計算
除了流計算,其他的框架大多都是在SparkCore上對一些算法或者接口進行了高層的封裝。例如SparkSQL 封裝了SQL語法,主要功能就是將SQL語法解析成SparkCore的底層API。而機器學習則是封裝了很多的數學向量及算法。GraphX目前也沒有太大的更新。
只有對SparkStreaming徹底了解,才能對提升我們寫應用程序有很大的幫助。
基于Spark Core的時候,都是基于RDD編程,而基于SparkStreaming則是基于DStream編程。DStream就是在RDD的基礎上,加上了時間維度:
private[streaming] var generatedRDDs = new HashMap[Time, RDD[T]] ()
DStream的compute需要傳入一個時間參數,通過時間獲取相應的RDD,然后再對RDD進行計算
/** Method that generates a RDD for the given time */ def compute(validTime: Time): Option[RDD[T]]
我們查看SparkStreaming的運行日志,就可以看出和RDD的運行幾乎是一致的:
SparkStreaming Job在運行的時候,首先會生成DStream的Graph,在特定的時間將DStream Graph轉換成RDD Graph。然后再去運行RDD的job 。如下圖:
如果我們把RDD看成一個空間上的維度,那么DStream就是在RDD上加入了時間維度的時空維度。
我們可以想象一下,在一個二維空間中,X軸是時間,Y軸是對RDD的操作,也就是所謂的RDD的依賴關系構成的整個job的邏輯。隨著時間的進行,會生成一個個的job實例。
所以SparkStreaming需要提供如下的功能:
需要RDD Graph生成的模板DStreamGraph
需要基于時間的job控制器
需要InputStream和OutputStream代表數據的輸入和輸出
將具體的job提交到Spark Cluster上,因為SparkStreaming是不斷的在運行job,更容易出現問題,所以容錯就至關重要(單個job的容錯是基于Sparkcore的,SparkStreaming還要提供自己框架的容錯功能)。
事務處理,數據一定會被處理,并且只會被處理一次。也就是說每次處理數據的時候,要知道數據的邊界。特別是出現崩潰的情況下。
備注:
1、DT大數據夢工廠微信公眾號DT_Spark
2、IMF晚8點大數據實戰YY直播頻道號:68917580
3、新浪微博: http://www.weibo.com/ilovepains
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。