SparkStreaming 介绍及 wordcount 案例

一、介绍

1、Spark Streaming 是什么?
Spark Streaming 用于流式数据的处理。Spark Streaming 支持的数据输入源很多,例如:Kafka、Flume、Twitter、ZeroMQ 和简单的 TCP 套接字等等。数据输入后可以用 Spark 进行运算,而结果也能保存在很多地方,如 HDFS,数据库等。
SparkStreaming 介绍及 wordcount 案例_第1张图片
2、DStream
和 Spark 基于 RDD 的概念很相似,Spark Streaming 使用离散化流(discretized stream)作为抽象表示,叫作 DStream。DStream 是随时间推移而收到的数据的序列。在内部,每个时间区间收到的数据都作为 RDD 存在,而 DStream 是由这些 RDD 所组成的序列(因此得名“离散化”)。所以简单来讲,DStream 就是对 RDD 在实时数据处理场景的一种封装。

3、Spark Streaming 结构图
SparkStreaming 介绍及 wordcount 案例_第2张图片

SparkStreaming 介绍及 wordcount 案例_第3张图片

二、wordcount 案例

1、介绍
使用 netcat 工具向 9999 端口不断的发送数据,通过 SparkStreaming 读取端口数据并统计不同单词出现的次数。

2、添加 maven 依赖

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-streaming_2.12</artifactId>
    <version>2.4.5</version>
</dependency>

3、编写代码

package spark.sparkstreaming.wordcount

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

/**
 * 需求:使用 netcat 工具向 9999 端口不断的发送数据,通过 SparkStreaming 读取端口数据并统计不同单词出现的次数。
 */
object Spark_Streaming_WordCount {
  def main(args: Array[String]): Unit = {
    // 1、初始化 Spark 配置信息
    val sparkConf: SparkConf = new SparkConf()
      .setMaster("local[*]")
      .set("spark.driver.host", "localhost")
      .setAppName("StreamWordCount")

    // 2、初始化 SparkStreamingContext
    val ssc: StreamingContext = new StreamingContext(sparkConf, Seconds(3))

    // 3、通过监控端口创建 DStream,读进来的数据为一行行
    val lineStreams: ReceiverInputDStream[String] = ssc.socketTextStream("localhost", 9999)

    // 4、将每一行数据切分,形成一个个单词
    val wordStreams: DStream[String] = lineStreams.flatMap(_.split(" "))

    // 5、将单词映射为元组 (word,1)
    val wordAndOneStreams: DStream[(String, Int)] = wordStreams.map((_, 1))

    // 6、将相同的单词次数做统计
    val wordAndCountStreams: DStream[(String, Int)] = wordAndOneStreams.reduceByKey(_ + _)

    // 7、打印
    wordAndCountStreams.print()

    // 8、启动 SparkStreamingContext
    ssc.start()
    ssc.awaitTermination()
  }

}

4、发送数据

nc -lk 9999

5、运行程序查看结果
SparkStreaming 介绍及 wordcount 案例_第4张图片

6、wordcount 解析
1、DStream 是 Spark Streaming 的基础抽象,代表持续性的数据流和经过各种 Spark 操作后的结果数据流。在内部实现上,DStream是一系列连续的 RDD 来表示。每个 RDD 含有一段时间间隔内的数据,所以 Spark Streaming 并不是真正意义上的流,而是微批处理。

2、对数据的操作也是按照 RDD 为单位来进行的。

3、计算过程由 Spark Engine 来完成。
SparkStreaming 介绍及 wordcount 案例_第5张图片

SparkStreaming 介绍及 wordcount 案例_第6张图片

SparkStreaming 介绍及 wordcount 案例_第7张图片

你可能感兴趣的:(spark,spark,大数据,java,spark,streaming,scala)