我们正在使用具有8个内核和32GB Ram的Spark Standalone Cluster,其中3个节点群集具有相同的配置。
有时流媒体批量在不到1秒内完成。有时候,在日志下面需要超过10秒的时间才会出现在控制台中。
2016-03-29 11:35:25,044 INFO TaskSchedulerImpl:59 - Removed TaskSet 18.0, whose tasks have all completed, from pool
2016-03-29 11:35:25,044 INFO DAGScheduler:59 - Job 18 finished: foreachRDD at EventProcessor.java:87, took 1.128755 s
2016-03-29 11:35:31,471 INFO JobScheduler:59 - Added jobs for time 1459231530000 ms
2016-03-29 11:35:35,004 INFO JobScheduler:59 - Added jobs for time 1459231535000 ms
2016-03-29 11:35:40,004 INFO JobScheduler:59 - Added jobs for time 1459231540000 ms
2016-03-29 11:35:45,136 INFO JobScheduler:59 - Added jobs for time 1459231545000 ms
2016-03-29 11:35:50,011 INFO JobScheduler:59 - Added jobs for time 1459231550000 ms
2016-03-29 11:35:55,004 INFO JobScheduler:59 - Added jobs for time 1459231555000 ms
2016-03-29 11:36:00,014 INFO JobScheduler:59 - Added jobs for time 1459231560000 ms
2016-03-29 11:36:05,003 INFO JobScheduler:59 - Added jobs for time 1459231565000 ms
2016-03-29 11:36:10,087 INFO JobScheduler:59 - Added jobs for time 1459231570000 ms
2016-03-29 11:36:15,004 INFO JobScheduler:59 - Added jobs for time 1459231575000 ms
2016-03-29 11:36:20,004 INFO JobScheduler:59 - Added jobs for time 1459231580000 ms
2016-03-29 11:36:25,139 INFO JobScheduler:59 - Added jobs for time 1459231585000 ms
请帮助,如何解决这个问题。
答案 0 :(得分:3)
将spark-submit master从local更改为local [2]
spark-submit --master local[2] --class YOURPROGRAM YOUR.jar
或设置
new SparkConf().setAppName("SparkStreamingExample").setMaster("local[2]")
如果在将数字更改为2后仍然面临同样的问题,也许您应该将其更改为更大的数字。
参考: http://spark.apache.org/docs/latest/streaming-programming-guide.html
在本地运行Spark Streaming程序时,请勿使用“local”或“local [1]”作为主URL。这两种方法都意味着只有一个线程将用于本地运行任务。如果您正在使用基于接收器的输入DStream(例如套接字,Kafka,Flume等),那么将使用单个线程来运行接收器,而不留下用于处理接收数据的线程。因此,当在本地运行时,总是使用“local [n]”作为主URL,其中n>要运行的接收器数量(有关如何设置主站的信息,请参阅Spark属性)。
将逻辑扩展到在群集上运行,分配给Spark Streaming应用程序的核心数必须大于接收者数量。否则,系统将接收数据,但无法处理它们。
归功于bit1129:http://bit1129.iteye.com/blog/2174751
答案 1 :(得分:2)
我通过将master从local设置为local来解决了这个问题[2]。以下相关引用来自spark streaming doc:
但请注意,Spark worker / executor是一个长期运行的任务,因此它占用了分配给Spark Streaming应用程序的其中一个核心。因此,重要的是要记住,Spark Streaming应用程序需要分配足够的内核(或线程,如果在本地运行)来处理接收的数据,以及运行接收器。
答案 2 :(得分:-1)
这确实不是问题,这些INFO
只是日志消息,您可以通过将INFO
中的日志级别更改为WARN
或ERROR
来避免这些消息}}
Spark Streaming会将您的输入数据缓冲到小批量中,并提交一批输入以便定期执行,因此这里没有问题。