關於運行官方Spark Streaming 實例代碼的坑


在運行實例代碼時候,在命令行中log4j的日志中,有時會出現這樣的日志,沒有warning也沒有error,但就是出現不了結果。

    18/06/17 21:12:09 INFO scheduler.JobScheduler: Added jobs for time 1420953009000 ms
    18/06/17 21:12:10 INFO scheduler.JobScheduler: Added jobs for time 1420953010000 ms
    18/06/17 21:12:11 INFO scheduler.JobScheduler: Added jobs for time 1420953011000 ms
    18/06/17 21:12:12 INFO scheduler.JobScheduler: Added jobs for time 1420953012000 ms
    18/06/17 21:12:13 INFO scheduler.JobScheduler: Added jobs for time 1420953013000 ms
    18/06/17 21:12:14 INFO scheduler.JobScheduler: Added jobs for time 1420953014000 ms
    18/06/17 21:12:15 INFO scheduler.JobScheduler: Added jobs for time 1420953015000 ms
    18/06/17 21:12:16 INFO scheduler.JobScheduler: Added jobs for time 1420953016000 ms
    18/06/17 21:12:17 INFO scheduler.JobScheduler: Added jobs for time 1420953017000 ms
    18/06/17 21:12:18 INFO scheduler.JobScheduler: Added jobs for time 1420953018000 ms
    18/06/17 21:12:19 INFO scheduler.JobScheduler: Added jobs for time 1420953019000 ms
    18/06/17 21:12:20 INFO scheduler.JobScheduler: Added jobs for time 1420953020000 ms
    18/06/17 21:12:21 INFO scheduler.JobScheduler: Added jobs for time 1420953021000 ms
    18/06/17 21:12:22 INFO scheduler.JobScheduler: Added jobs for time 1420953022000 ms
    18/06/17 21:12:23 INFO scheduler.JobScheduler: Added jobs for time 1420953023000 ms
    18/06/17 21:12:24 INFO scheduler.JobScheduler: Added jobs for time 1420953024000 ms
    18/06/17 21:12:25 INFO scheduler.JobScheduler: Added jobs for time 1420953025000 ms
    18/06/17 21:12:26 INFO scheduler.JobScheduler: Added jobs for time 1420953026000 ms
    18/06/17 21:12:27 INFO scheduler.JobScheduler: Added jobs for time 1420953027000 ms
    18/06/17 002112:28 INFO scheduler.JobScheduler: Added jobs for time 1420953028000 ms 

 

 

 

由日志中可以看到,一直在執行add job的過程,也就是說一直在執行receiver的過程,但我們接收到的數據實際上是沒有執行的,再看官方文檔   傳送門

 

翻譯過來的意思是:

在本地運行Spark Streaming程序時,不要使用“local”或“local[1]”作為主節點URL。這兩種方法都意味着只能使用一個線程在本地運行任務。如果你用基於receiver 的輸入dStream(例如套接字、Kafka、Flume等),然后使用單個線程來運行receiver ,不留下任何線程來處理接收到的數據。因此,當你在本地跑程序時,始終使用“local[n]”作為主節點URL,其中n>接收器要運行的數量(有關如何設置主機的信息,請參見Spark Properties)。

將邏輯擴展到集群上運行,分配給Spark Streaming應用程序的核心數量必須大於接收者的數量。否則,系統將只接收數據,但不會處理它。

所以我們只要將代碼中

val sparkConf = new SparkConf().setAppName("NetworkWordCount") 

 

改為

val sparkConf = new SparkConf().setAppName("NetworkWordCount").setMaster("local[2]")

 

 

即可。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM