windows环境下跑通spark streaming wordcount,先了解windows下的nc用法

spark streaming官方教程有个NetworkWordCount例子,通过 TCP 套接字连接,从流数据中创建了一个 DStream,然后进行处理,时间窗口大小为10s 。
其中需要使用netcat作为数据数据服务器,window下执行:

nc -lk 9999

结果报“’nc’ 不是内部或外部命令,也不是可运行的程序或批处理文件。”
哦,没有安装netcat,于是

再次执行:nc -lk 9999,结果报“ nc: invalid option – k”
然后 nc -h 了一下,确实没有-k参数。我又在unix系统上nc -h了一下,确认是有-k参数的。
好吧,改成:

nc -l 9999

结果报“local listen fuxored: INVAL”
看样子windows和unix环境下nc的用法也不一样,查了下,改成 :

nc -l -p 9999

好吧,开始监听了。

这时,你尝试输入一些内容,你的输入并不会显示出来,你都不知道你有没有输入了。

将读取sock的程序启动后,之前输入的未显示的数据就显示出来了。(是不是有点坑爹)
后面再输入内容,也都实时显示了。

spark-streaming 的wordcount:

// env
SparkConf conf = new SparkConf().setMaster("local[2]").setAppName("NetworkWordCount");
JavaStreamingContext jssc = new JavaStreamingContext(conf, Durations.seconds(10));

// input
// Create a DStream that will connect to hostname:port, like localhost:9999
JavaReceiverInputDStream<String> lines = jssc.socketTextStream("localhost", 9999);

// Split each line into words
JavaDStream<String> words = lines.flatMap(x -> Arrays.asList(x.split(" ")).iterator());
// Count each word in each batch
JavaPairDStream<String, Integer> pairs = words.mapToPair(s -> new Tuple2<>(s, 1));
JavaPairDStream<String, Integer> wordCounts = pairs.reduceByKey((i1, i2) -> i1 + i2);

// output
wordCounts.print();

// execute
jssc.start();
jssc.awaitTermination();

我在窗口输入了:

my test is a test

spark-streaming 的wordcount输出了:

-------------------------------------------
Time: 1526885630000 ms
-------------------------------------------
(is,1)
(my,1)
(test,2)
(a,1)

猜你喜欢

转载自blog.csdn.net/weitry/article/details/80392529
今日推荐