运行SparkStreaming的NetworkWordCount实例出错:Error connecting to localhost:9999 java.net.ConnectException: Connection refused 解决办法
一、背景
首先按照Spark的官方文档来运行此实例,具体方法参见这里,当运行命令 $ nc -lk 9999
开启端口后,再运行命令$ ./bin/run-example streaming.NetworkWordCount localhost 9999
,却出现错误“Error connecting to localhost:9999 java.net.ConnectException: Connection refused ”,也就是9999端口无法连接。
二、解决办法
(1)首先代码要没有问题,比如在定义SparkConf时要使用val sparkConf = new SparkConf().setAppName("SparkStreamingExample").setMaster("local[2]")
,而不是val sparkConf = new SparkConf().setAppName("SparkStreamingExample").setMaster("local")
(2)然后要保证先使用命令 $ nc -lk 9999
开启端口,然后再运行命令./bin/run-example streaming.NetworkWordCount localhost 9999
,命令的先后顺序不能错;
(3)如果代码没有问题,命令的先后顺序也没有错,但还是出现上述错误,则将开启端口的命令改为$ nc -l -p 9999
后运行程序。
我使用方法(3)成功解决了此问题。
三、总结
由于9999端口无法连接,可以先使用命令$ netstat -ntpl | grep 9999
来查看9999端口是否已经被监听了,我使用命令$ nc -lk 9999
后端口9999未被监听,所以出现无法连接的错误,使用命令$ nc -l -p 9999
后,9999端口已被监听,进而成功连接。