標籤:streamingcontext、dstream、receiver深度剖析
本課分成四部分講解,第一部分對StreamingContext功能及源碼剖析;第二部分對DStream功能及源碼剖析;第三部分對Receiver功能及源碼剖析;最後一部分將StreamingContext、DStream、Receiver結合起來分析其流程。
一、StreamingContext功能及源碼剖析:
1、 通過Spark Streaming對象jssc,建立應用程式主入口,並連上Driver,接收資料服務連接埠9999寫入來源資料
650) this.width=650;" src="http://images2015.cnblogs.com/blog/860767/201604/860767-20160418230354663-650012573.png" style="margin:0px;padding:0px;border:0px;font-family:Verdana, Arial, Helvetica, sans-serif;font-size:14px;line-height:21px;white-space:normal;background-color:rgb(238,238,238);" />
2、 Spark Streaming的主要功能有:
-
主程式的入口;
-
提供了各種建立DStream的方法接收各種流入的資料來源(例如:Kafka、Flume、Twitter、ZeroMQ和簡單的TCP通訊端等);
-
通過建構函式執行個體化Spark Streaming對象時,可以指定master URL、appName、或者傳入SparkConf設定物件、或者已經建立的SparkContext對象;
-
將接收的資料流傳入DStreams對象中;
-
通過Spark Streaming對象執行個體的start方法來啟動當前應用程式的StreamCompute架構或通過stop方法結束當前應用程式的StreamCompute架構;
650) this.width=650;" src="http://images2015.cnblogs.com/blog/860767/201604/860767-20160418230500585-1891419490.png" style="margin:0px;padding:0px;border:0px;font-family:Verdana, Arial, Helvetica, sans-serif;font-size:14px;line-height:21px;white-space:normal;background-color:rgb(238,238,238);" />
二、DStream功能及源碼剖析:
1、 DStream是RDD的模板,DStream是抽象的,RDD也是抽象
2、 DStream的具體實現子類如所示:
650) this.width=650;" src="http://images2015.cnblogs.com/blog/860767/201604/860767-20160418230622929-120938458.jpg" style="margin:0px;padding:0px;border:0px;" />
3、 以StreamingContext執行個體的socketTextSteam方法為例,其執行完的結果返回DStream對象執行個體,其源碼調用過程如:
650) this.width=650;" src="http://images2015.cnblogs.com/blog/860767/201604/860767-20160418230646616-1180745008.jpg" style="margin:0px;padding:0px;border:0px;" />
650) this.width=650;" src="http://images2015.cnblogs.com/blog/860767/201604/860767-20160418230709882-825127800.jpg" style="margin:0px;padding:0px;border:0px;" />
650) this.width=650;" src="http://images2015.cnblogs.com/blog/860767/201604/860767-20160418230813648-491197390.jpg" style="margin:0px;padding:0px;border:0px;" />
650) this.width=650;" src="http://images2015.cnblogs.com/blog/860767/201604/860767-20160418231013632-1574150730.jpg" style="margin:0px;padding:0px;border:0px;" />
650) this.width=650;" src="http://images2015.cnblogs.com/blog/860767/201604/860767-20160418231124991-2045884614.jpg" style="margin:0px;padding:0px;border:0px;" />
650) this.width=650;" src="http://images2015.cnblogs.com/blog/860767/201604/860767-20160418231133413-1499371881.jpg" style="margin:0px;padding:0px;border:0px;" />
socket.getInputStream擷取資料,while迴圈來儲存資料(記憶體、磁碟)
三、Receiver功能及源碼剖析:
1、Receiver代表資料的輸入,接收外部輸入的資料,如從Kafka上抓取資料;
2、Receiver運行在Worker節點上;
3、Receiver在Worker節點上抓取Kafka分布式訊息架構上的資料時,具體實作類別是KafkaReceiver;
4、Receiver是抽象類別,其抓取資料的實現子類如所示:
650) this.width=650;" src="http://images2015.cnblogs.com/blog/860767/201604/860767-20160418231209007-2006587450.jpg" style="margin:0px;padding:0px;border:0px;" />
5、 如果上述實作類別都滿足不了您的要求,您自己可以定義Receiver類,只需要繼承Receiver抽象類別來實現自己子類的業務需求。
四、StreamingContext、DStream、Receiver結合流程分析:
650) this.width=650;" src="http://images2015.cnblogs.com/blog/860767/201604/860767-20160418231314976-2119033916.gif" style="margin:0px;padding:0px;border:0px;" />
(1)inputStream代表了資料輸入流(如:Socket、Kafka、Flume等)
(2)Transformation代表了對資料的一系列操作,如flatMap、map等
(3)outputStream代表了資料的輸出,例如wordCount中的println方法:
650) this.width=650;" src="http://images2015.cnblogs.com/blog/860767/201604/860767-20160418231337445-1187874082.jpg" style="margin:0px;padding:0px;border:0px;" />
650) this.width=650;" src="http://images2015.cnblogs.com/blog/860767/201604/860767-20160418231353507-364905443.jpg" style="margin:0px;padding:0px;border:0px;" />
650) this.width=650;" src="http://images2015.cnblogs.com/blog/860767/201604/860767-20160418231402241-1242795445.jpg" style="margin:0px;padding:0px;border:0px;" />
資料在流進來之後,最終還是基於RDD進行執行,在處理流進來的資料時是DStream進行Transformation,StreamingContext會根據Transformation產生DStreamGraph,而DStreamGraph就是DAG的模板,這個模板是被架構託管的。當我們指定時間間隔的時候,Spark Streaming架構會自動觸發Job,所以在開發人員編寫好的Spark代碼時(如:flatMap、collect、print),不會導致job的運行,job運行是
Spark Streaming架構自動產生的。
總結:
使用Spark Streaming可以處理各種資料來源類型,如:資料庫、HDFS,伺服器log日誌、網路流,其強大超越了你想象不到的情境,只是很多時候大家不會用,其真正原因是對Spark、spark streaming本身不瞭解。
備忘:
資料來源於:DT_大資料夢工廠(IMF傳奇行動絕密課程)
更多私密內容,請關注公眾號:DT_Spark
如果您對大資料Spark感興趣,可以免費聽由王家林老師每天晚上20:00開設的Spark永久免費公開課,地址YY房間號:68917580
本文出自 “DT_Spark大資料夢工廠” 部落格,請務必保留此出處http://18610086859.blog.51cto.com/11484530/1768458
第84課:StreamingContext、DStream、Receiver深度剖析