SparkStreaming---入门

文章目录

1.SparkStreaming简介

1.1 流处理和批处理

流处理和批处理是两种不同的数据处理方式,它们在处理数据的方式和特点上有所不同。

流处理(Stream Processing)是一种数据处理方式,它实时地处理数据流 ,即将源源不断的数据按照特定的规则进行实时处理。

批处理(Batch Processing)是一种数据处理方式,它将一段时间内的数据收集起来,然后一次性地进行处理。

1.2 实时和离线

实时和离线是数据处理中的两种不同方式,它们在处理速度和数据类型上有所区别。

实时处理是指数据处理的速度能够满足实时要求,通常是指对数据进行的处理能够在相应的时间内产生结果 ,并且结果能够及时反馈给用户或应用系统。实时处理通常用于需要快速响应的应用场景,如实时监控、实时交易等。

离线处理则是指数据处理的速度相对较慢,通常需要较长时间才能完成,而且不需要实时反馈结果。离线处理通常用于处理大规模的数据集,如数据分析、机器学习等。离线处理可以在非实时环境中进行,例如在晚上或者周末等时间进行批量数据处理。

实时一般来说以毫秒为单位,不可与流处理混为一谈,而离线相对来说是以时、天为单位。

1.3 SparkStreaming是什么

Spark Streaming是构建在Spark上的实时计算框架,扩展了Spark处理大规模流式数据的能力。但是SparkStreaming不能做到真正意义上的实时计算,实际上它是一种准实时(秒,分钟),微批次的数据处理框架。 它将连续不断的数据按固定的时间间隔进行切分 ,使其变为一个个连续的批次,进而按顺序对每一个批次进行处理。一般情况下,每一个批次都会很小,这就是微批次。Spark Streaming的目的是为了进行实时数据分析,但因为一批数据量比较小,又达不到离线的范畴,所以称为准实时。

SparkStreaming用于流式数据的处理,Spark Streaming 支持的数据输入源很多,例如:Kafka、Flume、Twitter、ZeroMQ 和简单的 TCP 套接字等等。结果也能保存在很多地方,如 HDFS,数据库等。

1.4 SparkStreaming架构图

和 Spark 基于 RDD 的概念很相似,Spark Streaming 使用离散化流(discretized stream)作为抽象表示,叫作 DStream。 DStream 是随时间推移而收到的数据的序列。在内部,每个时间区间收到的数据都作为 RDD 存在,而 DStream 是由这些 RDD 所组成的序列(因此得名"离散化")。所以简单来讲,DStream 就是对 RDD 在实时数据处理场景的一种封装。

在SparkStreaming中,会有一个专门接收器来接受从数据源输入的数据,并且将这些数据封装成离散化流(DStream)。之后的操作就是对DStream进行处理的。简单来讲,DStream就是对一系列RDD的封装。

2.背压机制

Spark 1.5 以前版本,用户如果要限制 Receiver 的数据接收速率 ,可以通过设置静态配制参数"spark.streaming.receiver.maxRate"的值来实现,此举虽然可以通过限制接收速率,来适配当前的处理能力,防止内存溢出,但也会引入其它问题。比如:producer 数据生产高于 maxRate,当前集群处理能力也高于 maxRate,这就会造成资源利用率下降等问题。为了更好的协调数据接收速率与资源处理能力,1.5 版本开始 Spark Streaming 可以动态控制数据接收速率来适配集群数据处理能力。背压机制(即 Spark Streaming Backpressure): 根据JobScheduler 反馈作业的执行信息来动态调整 Receiver 数据接收率。通过属性"spark.streaming.backpressure.enabled"来控制是否启用 backpressure 机制,默认值false,即不启用。

3.DStream案例实操

需求:实现WordCount 案例

使用 netcat 工具向 9999 端口不断的发送数据,通过 SparkStreaming 读取端口数据并统计不同单词出现的次数
Netcat(简称nc)是一款强大的命令行网络工具,用来在两台机器之间建立TCP/UDP连接,并通过标准的输入输出进行数据的读写。 netcat下载地址https://eternallybored.org/misc/netcat/

  def main(args: Array[String]): Unit = {
    //1.初始化 Spark 配置信息
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("StreamWordCount")
    //2.初始化 SparkStreamingContext
    //处理区间为3s一次
    val ssc = new StreamingContext(sparkConf, Seconds(3))
    //3.通过监控端口创建 DStream,读进来的数据为一行行
    val lines = ssc.socketTextStream("localhost", 9999)
    //将每一行数据做切分,形成一个个单词
    val words = lines.flatMap(_.split(" "))

    val wordMap = words.map(word => (word, 1))

    val resultData = wordMap.reduceByKey(_ + _)

    resultData.print()

    //启动SparkStreamingContext
    ssc.start()
    //等待接收数据
    ssc.awaitTermination()
  }
相关推荐
Json_181790144801 小时前
An In-depth Look into the 1688 Product Details Data API Interface
大数据·json
lzhlizihang2 小时前
【spark的集群模式搭建】Standalone集群模式的搭建(简单明了的安装教程)
spark·standalone模式·spark集群搭建
Frank牛蛙2 小时前
1.每日SQL----2024/11/7
数据库·sql
上海_彭彭2 小时前
【提效工具开发】Python功能模块执行和 SQL 执行 需求整理
开发语言·python·sql·测试工具·element
Qspace丨轻空间3 小时前
气膜场馆:推动体育文化旅游创新发展的关键力量—轻空间
大数据·人工智能·安全·生活·娱乐
Elastic 中国社区官方博客4 小时前
如何将数据从 AWS S3 导入到 Elastic Cloud - 第 3 部分:Elastic S3 连接器
大数据·elasticsearch·搜索引擎·云计算·全文检索·可用性测试·aws
Aloudata6 小时前
从Apache Atlas到Aloudata BIG,数据血缘解析有何改变?
大数据·apache·数据血缘·主动元数据·数据链路
水豚AI课代表6 小时前
分析报告、调研报告、工作方案等的提示词
大数据·人工智能·学习·chatgpt·aigc
成富7 小时前
文本转SQL(Text-to-SQL),场景介绍与 Spring AI 实现
数据库·人工智能·sql·spring·oracle