大数据之SparkDstream 入门 完整使用 (第十二章)

一、WordCount 案例实操

➢ 需求:使用 netcat 工具向 9999 端口不断的发送数据,通过 SparkStreaming 读取端口数据并
统计不同单词出现的次数

1) 添加依赖

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

2) 编写代码

package com.spack.bigdata.streaming

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

/**
 * SparkStreaming 入门
 * WordCount
 */
object SparkStreaming01_WordCoun {
  def main(args: Array[String]): Unit = {

    //创建环境对象
    //StreamingContext 创建时、需要传递两个参数
    //第一个参数表示环境变量
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("SparkStreaming")

    //第二个参数表示批量处理的周期(采集周期)---Seconds以秒为单位
    val scc = new StreamingContext(sparkConf, Seconds(3))

    //TODO 逻辑处理

    //获取端口数据
    val lines: ReceiverInputDStream[String] = scc.socketTextStream("localhost", 9999)

    val words = lines.flatMap(_.split(" "))

    val wordsToOne = words.map(
      w => {
        (w, 1)
      }
    )

    val wordCount: DStream[(String, Int)] = wordsToOne.reduceByKey(_ + _)

    wordCount.print()

    //TODO 关闭环境

    //由于 SparkStreaming 采集器是长期执行的任务。所以不能直接关闭
    //如果main方法 执行完毕,应用程序也会自动结束。所以不能让main执行完毕
    // scc.stop()

    //1、启动采集器
    scc.start()

    //2、等待采集器的关闭
    scc.awaitTermination()
  }


}

3) 启动程序并通过 netcat 发送数据

nc -lk 9999
hello spark

二、WordCount 解析

Discretized Stream 是 Spark Streaming 的基础抽象,代表持续性的数据流和经过各种 Spark 原语操作后的结果数据流。在内部实现上,DStream 是一系列连续的 RDD 来表示。每个 RDD 含有一段时间间隔内的数据。

在这里插入图片描述

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

在这里插入图片描述

计算过程由 Spark Engine 来完成
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值