1. 程式人生 > >Spark學習筆記:輸入DStream和Receiver詳解

Spark學習筆記:輸入DStream和Receiver詳解

輸入DStream和Receiver詳解

輸入DStream代表了來自資料來源的輸入資料流,除了檔案資料流之外,所有的輸入DStream都會繫結一個Receiver物件,Receiver用於接收資料,然後將資料儲存在Spark的記憶體中,以供後續的操作使用。

SparkStreaming提供的資料來源支援

  • 基礎資料來源:StreamingContext API中直接提供了對這些資料來源的支援,比如檔案、Socket、Akka Actor等
  • 高階資料來源:諸如Kafka、Flume、Kinesis、Twitter等資料來源,通過第三方工具類提供支援,這些資料來源的使用需要引用其依賴

注意事項

  • 如果要在實時計算應用中並行接收多條資料流,可以建立多個輸入DStream,這樣就會建立多個Receiver,從而並行地接收多個數據流。這裡有一個問題,一個Spark Streaming應用程式的executor是一個長期執行的任務,所以它會獨佔分配給Spark Streaming應用程式的CPU core,所以只要Spark Streaming執行起來之後,這個節點上的CPU core數就沒有辦法給其他的應用所使用了,因為會被Receiver所獨佔
  • 使用本地模式執行程式時,必須使用local[n],n>=2絕對不能用local和local[1],因為就會給執行輸入DStream的executor分配一個執行緒,Spark Streaming底層的原理需要至少有兩個執行緒,一個執行緒分配給Receiver接收資料,另一個執行緒用來處理接收到的資料。如果執行緒小於2的話,那麼程式只會接收資料,不會處理資料
  • 如果直接將Spark Streaming應用提交到叢集上執行,需要保證有足夠資源