1. 程式人生 > >Spark Streaming連線Flume的兩種方式

Spark Streaming連線Flume的兩種方式

Spark提供了兩種不同的接收器來接受Flume端傳送的資料。
   推式接收器該接收器以 Avro 資料池的方式工作,由 Flume 向其中推資料。設定起來非常簡單,我們只需要將Fluem簡單配置下,將資料傳送到Avro資料池中,然後scala提供的FlumeUtils代理物件會把接收器配置在一個特定的工作節點的主機名和埠上。當然,這些配置需要和Flume保持一致。
   雖然這種方式很簡潔,但缺點是沒有事務支援。這會增加執行接收器的工作節點發生錯誤 時丟失少量資料的機率。不僅如此,如果執行接收器的工作節點發生故障,系統會嘗試從 另一個位置啟動接收器,這時需要重新配置 Flume 才能將資料發給新的工作節點。這樣配 置會比較麻煩。
   拉式接收器

該接收器設定了一個專門的Flume資料池供Spark Streaming拉取資料,並讓接收器主動從資料池中拉取資料。這種方式的優點在於彈性較 好,Spark Streaming通過事務從資料池中讀取並複製資料。在收到事務完成的通知前,這 些資料還保留在資料池中。 當你把自定義 Flume 資料池新增到一個節點上之後,就需要配置 Flume 來把資料推送到這個資料池中,

a1.sinks = spark
a1.sinks.spark.type = org.apache.spark.streaming.flume.sink.SparkSink
a1.sinks.spark.hostname = receiver-hostname
a1.sinks.spark.port = port-used-for-sync-not-spark-port
a1.sinks.spark.channel = memoryChannel

等到資料已經在資料池中快取起來,就可以呼叫 FlumeUtils 來讀取資料了