我使用SparkStream:
val stream = ssc.socketTextStream("192.168.206.184", 8888)
创建Socket服务器使用NC:
[root@master ~]# nc -lk 192.168.206.184 8888
如果我手动将一些消息输入NC终端,则saprkstream可以接收消息。
但是,如果我使用NC命令发送消息由另一个终端使用以下代码,NC服务器终端可以接收消息,但是火花流无法接收消息echo "message content"|nc 192.168.206.184 8888
答案 0 :(得分:1)
TL; DR 使用-lk
为案例添加echo
个选项。
我对nc
的有限经验告诉我,问题在于缺少-lk
选项。
-k 强制nc在其符号之后继续侦听另一个连接 租金连接完成。使用此选项是错误的 没有-l选项。
-l </ strong>用于指定nc应侦听传入连接 而不是启动与远程主机的连接。它是一个 将此选项与-p,-s或-z一起使用时出错 选项。此外,使用-w选项指定的任何超时 被忽略了。
幸运的是,非常相似的Spark Streaming应用程序包含在Spark的示例中,因此很容易重现。
// start sc.socketTextStream in one terminal
$ ./bin/run-example streaming.NetworkWordCount 127.0.0.1 9999
当我使用nc
并且没有echo
选项执行-lk
时,我在NetworkWordCount
示例的终端中什么也得不到,否则输入会被解析。
// terminal 2
$ echo "message content"|nc -lk 127.0.0.1 9999
// terminal 1
$ ./bin/run-example streaming.NetworkWordCount 127.0.0.1 9999
...
-------------------------------------------
Time: 1496230563000 ms
-------------------------------------------
(content,1)
(message,1)