在運行實例代碼時候,在命令行中log4j的日志中,有時會出現這樣的日志,沒有warning也沒有error,但就是出現不了結果。
由日志中可以看到,一直在執行add job的過程,也就是說一直在執行receiver的過程,但我們接收到的數據實際上是沒有執行的,再看官方文檔 傳送門
翻譯過來的意思是:
在本地運行Spark Streaming程序時,不要使用“local”或“local[1]”作為主節點URL。這兩種方法都意味着只能使用一個線程在本地運行任務。如果你用基於receiver 的輸入dStream(例如套接字、Kafka、Flume等),然后使用單個線程來運行receiver ,不留下任何線程來處理接收到的數據。因此,當你在本地跑程序時,始終使用“local[n]”作為主節點URL,其中n>接收器要運行的數量(有關如何設置主機的信息,請參見Spark Properties)。
將邏輯擴展到集群上運行,分配給Spark Streaming應用程序的核心數量必須大於接收者的數量。否則,系統將只接收數據,但不會處理它。
所以我們只要將代碼中
改為
即可。