標籤:
StreamingContext、DStream、Receiver深度剖析
本課分成四部分講解,第一部分對StreamingContext功能及源碼剖析;第二部分對DStream功能及源碼剖析;第三部分對Receiver功能及源碼剖析;最後一部分將StreamingContext、DStream、Receiver結合起來分析其流程。
一、StreamingContext功能及源碼剖析:
1、 通過Spark Streaming對象jssc,建立應用程式主入口,並連上Driver上的接收資料服務連接埠9999寫入來源資料:
2、 Spark Streaming的主要功能有:
- 主程式的入口;
- 提供了各種建立DStream的方法接收各種流入的資料來源(例如:Kafka、Flume、Twitter、ZeroMQ和簡單的TCP通訊端等);
- 通過建構函式執行個體化Spark Streaming對象時,可以指定master URL、appName、或者傳入SparkConf設定物件、或者已經建立的SparkContext對象;
- 將接收的資料流傳入DStreams對象中;
- 通過Spark Streaming對象執行個體的start方法啟動當前應用程式的StreamCompute架構或通過stop方法結束當前應用程式的StreamCompute架構;
二、DStream功能及源碼剖析:
1、 DStream是RDD的模板,DStream是抽象的,RDD也是抽象
2、 DStream的具體實現子類如所示:
3、 以StreamingContext執行個體的socketTextSteam方法為例,其執行完的結果返回DStream對象執行個體,其源碼調用過程如:
socket.getInputStream擷取資料,while迴圈來儲存儲蓄資料(記憶體、磁碟)
三、Receiver功能及源碼剖析:
1、Receiver代表資料的輸入,接收外部輸入的資料,如從Kafka上抓取資料;
2、Receiver運行在Worker節點上;
3、Receiver在Worker節點上抓取Kafka分布式訊息架構上的資料時,具體實作類別是KafkaReceiver;
4、Receiver是抽象類別,其抓取資料的實現子類如所示:
5、 如果上述實作類別都滿足不了您的要求,您自己可以定義Receiver類,只需要繼承Receiver抽象類別來實現自己子類的業務需求。
四、StreamingContext、DStream、Receiver結合流程分析:
(1)inputStream代表了資料輸入流(如:Socket、Kafka、Flume等)
(2)Transformation代表了對資料的一系列操作,如flatMap、map等
(3)outputStream代表了資料的輸出,例如wordCount中的println方法:
資料資料在流進來之後最終會產生Job,最終還是基於Spark Core的RDD進行執行:在處理流進來的資料時是DStream進行Transformation由於是StreamingContext所以根本不會去運行,StreamingContext會根據Transformation產生”DStream的鏈條”及DStreamGraph,而DStreamGraph就是DAG的模板,這個模板是被架構託管的。當我們指定時間間隔的時候,Driver端就會根據這個時間間隔來觸發Job而觸發Job的方法就是根據OutputDStream中指定的具體的function,例如wordcount中print,這個函數一定會傳給ForEachDStream,它會把函數交給最後一個DStream產生的RDD,也就是RDD的print操作,而這個操作就是RDD觸發Action。
總結:
使用Spark Streaming可以處理各種資料來源類型,如:資料庫、HDFS,伺服器log日誌、網路流,其強大超越了你想象不到的情境,只是很多時候大家不會用,其真正原因是對Spark、spark streaming本身不瞭解。
編寫人:IMF-Spark Steaming企業級開發實戰小組
主編輯:王家林
備忘:
資料來源於:DT_大資料夢工廠(IMF傳奇行動絕密課程)
更多私密內容,請關注公眾號:DT_Spark
如果您對大資料Spark感興趣,可以免費聽由王家林老師每天晚上20:00開設的Spark永久免費公開課,地址YY房間號:68917580
84課:StreamingContext、DStream、Receiver深度剖析