第84課:StreamingContext、DStream、Receiver深度剖析

來源:互聯網
上載者:User

標籤: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深度剖析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.