1.Spark Streaming基础—Spark Streaming架构图、背压机制、WordCount 案例实操、WordCount 解析

本文目录如下:

  • 第1章 Spark Streaming概述
    • 1.1 Spark Streaming 是什么
    • 1.2 Spark Streaming架构
      • 1.2.1 架构图
      • 1.2.2 背压机制
  • 第2章 Dstream 入门
    • 2.1 WordCount 案例实操
      • 2.1.1 添加依赖
      • 2.1.2 编写代码
      • 2.1.3 启动程序并通过 netcat 发送数据
    • 2.2 WordCount 解析

第1章 Spark Streaming概述

Spark Streaming 使得构建可扩展的容错流应用程序变得更加容易。

1.1 Spark Streaming 是什么

  • Spark Streaming 用于流式数据的处理。Spark Streaming 支持的数据输入源很多,例如:KafkaFlumeTwitterZeroMQ 和简单的 TCP 套接字等等。数据输入后可以用 Spark高度抽象原语如:mapreducejoinwindow 等进行运算。而结果也能保存在很多地方,如 HDFS,数据库等。
  • 和 Spark 基于 RDD 的概念很相似,Spark Streaming 使用离散化流(discretized stream)作为抽象表示,叫作 DStreamDStream 是随时间推移而收到的数据的序列。在内部,每个时间区间收到的数据都作为 RDD 存在,而 DStream 是由这些 RDD 所组成的序列(因此得名“离散化”)。所以简单来将,DStream 就是对 RDD 在实时数据处理场景的一种封装。

1.2 Spark Streaming架构

1.2.1 架构图

Spark Streaming架构图:
1.Spark Streaming基础—Spark Streaming架构图、背压机制、WordCount 案例实操、WordCount 解析_第1张图片

1.2.2 背压机制

  • Spark Streaming 可以动态控制数据接收速率来适配集群数据处理能力。背压机制(即 Spark Streaming Backpressure): 根据 JobScheduler 反馈作业的执行信息来动态调整 Receiver 数据接收率
  • 通过属性“spark.streaming.backpressure.enabled”来控制是否启用 backpressure 机制,默认值 false,即不启用。

第2章 Dstream 入门

2.1 WordCount 案例实操

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

2.1.1 添加依赖

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

2.1.2 编写代码

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

object SparkStreaming01_WordCount {

  def main(args: Array[String]): Unit = {
    // TODO 创建环境对象
    // StreamingContext创建时, 需要传递两个参数第一个参数表示环境配置
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName ("SparkStreaming")
    // 第二个参数表示批量处理的周期(采集周期)
    val ssc = new StreamingContext(sparkConf, Seconds(3))

    // TODO 逻辑处理
    // 获取端口数排
    val lines: ReceiverInputDStream[String] = ssc.socketTextStream("localhost", 9999)

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

    val wordToOne = words.map((_, 1))

    val wordToCount: DStream[(String, Int)] = wordToOne.reduceByKey(_+_)

    wordToCount.print()

    // TODO 关闭环境
    // 由于SparkStreaming采集器是长期执行的任务, 所以不能直接关闭
    // 如果main方法执行完毕, 应用程序也会自动结束。所以不能让main执行完毕
    // ssc.stop()
    //1.后动采货鹦
    ssc.start()
    // 2.等待采集器的关闭
    ssc.awaitTermination()
  }
}

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

  • 启动程序之前,要先在 Windows 命令行工具上输入下列命令:
nc -lp 9999
# 启动程序后输入下面的字符串
hello spark

:执行之前首先需要在 Windows主机 上安装 netcat,详情可参考: Windows环境下安装netcat

2.2 WordCount 解析

  • Discretized StreamSpark Streaming基础抽象,代表持续性的数据流和经过各种 Spark 原语操作后的结果数据流。在内部实现上,DStream 是一系列连续的 RDD 来表示。每个 RDD 含有一段时间间隔内的数据。
    1.Spark Streaming基础—Spark Streaming架构图、背压机制、WordCount 案例实操、WordCount 解析_第2张图片

  • 对数据的操作也是按照 RDD单位来进行的。
    1.Spark Streaming基础—Spark Streaming架构图、背压机制、WordCount 案例实操、WordCount 解析_第3张图片

  • 计算过程由 Spark Engine 来完成。
    1.Spark Streaming基础—Spark Streaming架构图、背压机制、WordCount 案例实操、WordCount 解析_第4张图片


声明:本文是学习时记录的笔记,如有侵权请告知删除!
原视频地址:https://www.bilibili.com/video/BV11A411L7CK

你可能感兴趣的:(Spark,Streaming学习笔记,spark,big,data,scala)