运行spark streamig 出错!
当运行一个spark 2.2.0 官方文档的实例时,sparkstreaing 出现如下错误:
2019-04-10 19:40:00 WARN RandomBlockReplicationPolicy:66 - Expecting 1 replicas with only 0 peer/s.
2019-04-10 19:40:00 WARN BlockManager:66 - Block input-0-1554950400000 replicated to only 0 peer(s) instead of 1 peers
2019-04-10 19:40:00 INFO BlockGenerator:54 - Pushed block input-0-1554950400000
2019-04-10 19:40:00 INFO MemoryStore:54 - Block input-0-1554950400200 stored as values in memory (estimated size 7.0 B, free 366.2 MB)
2019-04-10 19:40:00 INFO BlockManagerInfo:54 - Added input-0-1554950400200 in memory on 172.16.0.84:39028 (size: 7.0 B, free: 366.3 MB)
2019-04-10 19:40:00 WARN RandomBlockReplicationPolicy:66 - Expecting 1 replicas with only 0 peer/s.
2019-04-10 19:40:00 WARN BlockManager:66 - Block input-0-1554950400200 replicated to only 0 peer(s) instead of 1 peers
2019-04-10 19:40:00 INFO BlockGenerator:54 - Pushed block input-0-1554950400200
提交的时候用的 ./bin/spark-submit test.py localhost 9999 , 当然,首先需要运行 Netcat(一个在大多数类 Unix 系统中的小工具)作为我们使用的数据服务器(用来模拟数据流)。
一直出现如上的错误,后来修改了虚拟机的内核为2,问题解决。
继续修改提交方式 ./bin/spark-submit --master local[1] test.py localhost 9999 ,结果又出现如上的错误。
去看官方文档发现了这个严重的问题,sparkstreaming不能少于2个线程,至少要一个接收一个处理:
当在本地运行一个 Spark Streaming 程序的时候,不要使用 “local” 或者 “local[1]” 作为 master 的 URL。这两种方法中的任何一个都意味着只有一个线程将用于运行本地任务。如果你正在使用一个基于接收器(receiver)的输入离散流(input DStream)(例如,sockets,Kafka,Flume 等),则该单独的线程将用于运行接收器(receiver),而没有留下任何的线程用于处理接收到的数据。因此,在本地运行时,总是用 “local[n]” 作为 master URL,其中的 n > 运行接收器的数量(查看 Spark 属性 来了解怎样去设置 master 的信息)。
将逻辑扩展到集群上去运行,分配给 Spark Streaming 应用程序的内核(core)的内核数必须大于接收器(receiver)的数量。否则系统将接收数据,但是无法处理它。
网友评论