第1章 Spark Streaming概述
Spark Streaming 使得构建可扩展的容错流应用程序变得更加容易。
1.1 Spark Streaming 是什么
Spark Streaming 用于流式数据的处理。Spark Streaming 支持的数据输入源很多,例如:Kafka 、Flume 、Twitter 、ZeroMQ 和简单的 TCP 套接字等等。数据输入后可以用 Spark 的高度抽象原语如:map 、reduce 、join 、window 等进行运算。而结果也能保存在很多地方,如 HDFS ,数据库等。- 和 Spark 基于 RDD 的概念很相似,
Spark Streaming 使用离散化流(discretized stream)作为抽象表示,叫作 DStream 。DStream 是随时间推移而收到的数据的序列。在内部,每个时间区间收到的数据都作为 RDD 存在,而 DStream 是由这些 RDD 所组成的序列(因此得名“离散化”)。所以简单来将,DStream 就是对 RDD 在实时数据处理场景的一种封装。
1.2 Spark Streaming架构
1.2.1 架构图
Spark Streaming架构图:
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.spark</groupId>
<artifactId>spark-streaming_2.12</artifactId>
<version>3.0.0</version>
</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 = {
val sparkConf = new SparkConf().setMaster("local[*]").setAppName ("SparkStreaming")
val ssc = new StreamingContext(sparkConf, Seconds(3))
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()
ssc.start()
ssc.awaitTermination()
}
}
2.1.3 启动程序并通过 netcat 发送数据
- 启动程序之前,要先在
Windows 命令行工具上输入下列命令:
nc -lp 9999
hello spark
注 :执行之前首先需要在 Windows主机 上安装 netcat ,详情可参考: Windows环境下安装netcat。
2.2 WordCount 解析
声明:本文是学习时记录的笔记,如有侵权请告知删除! 原视频地址:https://www.bilibili.com/video/BV11A411L7CK
|