DStream操作实战(一)

SparkStreaming接受socket数据,实现单词计数WordCount

1、架构图

DStream操作实战(一)_第1张图片

2、实现流程

2.1、安装并启动生产者

首先在linux服务器上用YUM安装nc工具,nc命令是netcat命令的简称,都是用来设置路由器。我们可以利用它向某个端口发送数据。

yum install -y nc

2.2、通过netcat工具向指定的端口发送数据

    nc -lk 9999 

2.3、编写Spark Streaming程序

package cn.cheng.spark

import org.apache.spark.streaming.dstream.{DStream, ReceiverInputDStream}
import org.apache.spark.streaming.{Seconds, StreamingContext}
import org.apache.spark.{SparkConf, SparkContext}

/**
  * sparkStreming流式处理接受socket数据,实现单词统计
  */
object  SparkStreamingTCP {

  def main(args: Array[String]): Unit = {
    //配置sparkConf参数
    val sparkConf: SparkConf = new SparkConf().setAppName("SparkStreamingTCP").setMaster("local[2]")
    //构建sparkContext对象
    val sc: SparkContext = new SparkContext(sparkConf)
    //设置日志输出级别
    sc.setLogLevel("WARN")
    //构建StreamingContext对象,每个批处理的时间间隔
    val scc: StreamingContext = new StreamingContext(sc,Seconds(5))
    //注册一个监听的IP地址和端口  用来收集数据
    val lines: ReceiverInputDStream[String] = scc.socketTextStream("192.168.200.160",9999)
    //切分每一行记录
    val words: DStream[String] = lines.flatMap(_.split(" "))
    //每个单词记为1
    val wordAndOne: DStream[(String, Int)] = words.map((_,1))
    //分组聚合
    val result: DStream[(String, Int)] = wordAndOne.reduceByKey(_+_)
    //打印数据
    result.print()
    scc.start()
    scc.awaitTermination()
  }
}

3、执行查看效果

  • 先执行nc -lk 9999
  • 启动IDEA程序
  • 不断的在linux中输入不同的单词,观察IDEA控制台输出

这里写图片描述

DStream操作实战(一)_第2张图片

现象:sparkStreaming每隔5s计算一次当前5s内的数据,然后将每个批次的数据输出。

喜欢就点赞评论+关注吧

DStream操作实战(一)_第3张图片

感谢阅读,希望能帮助到大家,谢谢大家的支持!

你可能感兴趣的:(Spark,Streaming,spark,socket)