Streaming概念注意點,receiver

nc -lk 9999

StreamingContext多種寫法測試

import org.apache.spark.streaming.{Seconds, StreamingContext}
val ssc = new StreamingContext(sc, Seconds(10))
val lines = ssc.socketTextStream("hadoop000",9999)
val results = lines.flatMap(_.split(",")).map((_,1)).reduceByKey(_+_)
results.print()
ssc.start()
ssc.awaitTermination()

關於控制檯沒輸出,需要設置虛擬機核數大於1
在這裏插入圖片描述
conf的方式

import org.apache.spark.streaming.{Seconds, StreamingContext}
val ssc = new StreamingContext(sc.getConf, Seconds(10))
val lines = ssc.socketTextStream("hadoop000",9999)
val results = lines.flatMap(_.split(",")).map((_,1)).reduceByKey(_+_)
results.print()
ssc.start()
ssc.awaitTermination()

報錯,只能創建一個sparkContext在這裏插入圖片描述傳入conf,會創建一個sparkcontext

在這裏插入圖片描述

關於Streaming要注意的點

1.一旦已經啓動了一個context,就沒有新的計算加進來,就是start後寫業務代碼是無效的。
2.一旦一個context被停止了,他就不能被重啓。
3.同一時間只有一個streamingcontext是活的,在一個JVM裏。

receiver佔一個線程。沒有其他線程處理數據。core的數量大於receiver的數量ReceiverInputDStream 一直接受數據
在這裏插入圖片描述

receiver和mv

在這裏插入圖片描述receiver讀socket會要創建副本之類的,hdfs不用receiver讀,因爲hdfs上本就有副本。

假設streaming讀的數據是在/spark/text/下,在streaming啓動後,flume之類的採集數據不是直接採集到這的,而是採集到hdfs的其他地方,再從其他地方mv過來的,不是hdfs put上去的,put慢。之所以沒有直接put到那個目錄,是怕可能在一個批次的時間到了還沒沒put完就開始讀取了,而mv快。

在streaming啓動之前的數據不會被讀取,文件處理後再更新也不會重讀的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章