Spark Streaming 单词计数

Receiver

从数据源接收数据,然后把数据存储在内存中供spark streaming使用,在本地运行spark streaming不能设置master为local或者local[1],此时运行的线程只有一个,因为需要一个线程去运行Receiver接收数据,因此,就没有线程去处理数据了

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def main(args: Array[String]) {
 
    val conf = new SparkConf()
    conf.setAppName("SparkStreamDemo")<br>    // 不能使用local或者local[1],k必须大于1,准确的说是大于Receiver的数量
    conf.setMaster("local[*]")
    val sc = new SparkContext(conf)
    // 创建StreamingContext 第二个参数是多长时间产生一个RDD
    val ssc = new StreamingContext(sc, Seconds(1))
 
    // 创建DStream
    val lines = ssc.socketTextStream("m1", 9050);
 
    val wordCounts = lines.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_+_)
 
    wordCounts.print()
 
    // 启动spark streaming
    ssc.start()
 
    // 等待计算结束
    ssc.awaitTermination()
 
  }

 

使用nc命令向m1 9050端口发送数据

如果nc命令不存在,首先安装nc命令

1、sudo yum list nc,发现nc命令在nc.x86_64中
2、安装nc, sudo yum -y install nc.x86_64

1
nc -lk 9050

然后一直输入数据,就可以看到控制台的数据输出

posted @   天之涯0204  阅读(411)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示