Spark6:Spark Steaming

简介: Spark6:Spark Steaming

参考

https://blog.csdn.net/howard2005/article/details/124835239

一、流计算概述

流计算是一种用于处理实时数据的计算模型。它可以在数据产生时立即进行处理,而不是等待数据被存储后再进行批量处理。流计算在许多应用中非常重要,如实时分析、监控、日志处理等。

静态数据、流数据

特点

实时处理、主动推送

大量、快速、时变、持续到达

低延迟、可扩展、高可靠

二、Spark Streaming

Spark Streaming是Apache Spark生态系统中的一部分,它是用于流处理的引擎。它提供了高度抽象的DStream(离散流)API,允许你以批处理方式来处理实时数据流。Spark Streaming可以与许多数据源集成,包括Kafka、Flume、HDFS、套接字流等。

模仿流计算

Spark是以线程级别并行,实时响应级别高

可以实现秒级响应,变相实现高效的流计算

Spark Streaming是一个基于Spark Core之上的实时计算框架,可以从很多数据源消费数据并对数据进行处理。

三、DStream

DStream是Spark Streaming的核心抽象,它代表了连续的数据流。DStream可以从各种数据源创建,然后通过一系列转换操作来处理和转换数据。常见的DStream操作包括map、reduceByKey、join等,这些操作会在数据流中应用到每个微批数据上。

在Spark Streaing中有一个最基本的抽象叫DStream(代理),本质上就是一系列连续的RDD,DStream其实就是对RDD的封装。

DStream可以任务是一个RDD的工厂,该DStream里面生产都是相同业务逻辑的RDD,只不过是RDD里面要读取数据的不相同

深入理解DStream:他是sparkStreaming中的一个最基本的抽象,代表了一下列连续的数据流,本质上是一系列连续的RDD,你对DStream进行操作,就是对RDD进行操作

DStream每隔一段时间生成一个RDD,你对DStream进行操作,本质上是对里面的对应时间的RDD进行操作

DSteam和DStream之间存在依赖关系,在一个固定的时间点,对个存在依赖关系的DSrteam对应的RDD也存在依赖关系,

每个一个固定的时间,其实生产了一个小的DAG,周期性的将生成的小DAG提交到集群中运行。

四、文件流操作

Spark Streaming支持从文件系统中读取流数据,这在一些场景中非常有用。你可以使用fileStream方法来创建一个DStream,然后指定文件夹路径和文件过滤器,以便从该文件夹中获取数据。

wordcount实例

object FileWordCount {
  def main(args: Array[String]): Unit = {
    // 创建Spark配置对象
    val conf = new SparkConf()
      .setMaster("local[2]")
      .setAppName("FileWordCount")
    // 按照时间间隔为3秒钟切分数据流
    val ssc = new StreamingContext(conf, Seconds(3))
    // 创建行分段流,接收文件流
    val lines = ssc.textFileStream("file:///user/local/logfile")
    // 生成单词分段流
    val words = lines.flatMap(_.split(" "))
    // 计算每一批次中的每个单词数量,并进行词频统计
    val wc = words.map(x=>(x,1)).reduceByKey(_+_)
    // 输出分段流中每个RDD的词频统计结果
    wc.print()
    // 开始计算
    ssc.start()
    // 等待计算结束
    ssc.awaitTermination()
  }
}

创建StreamingContext对象

五、套接字流

套接字流是通过套接字连接来接收数据流的一种方式。你可以使用socketTextStream方法创建一个套接字DStream,指定主机和端口。

from pyspark.streaming import StreamingContext
ssc = StreamingContext(sparkContext, batchDuration)
lines = ssc.socketTextStream("localhost", 9999)

你可以在套接字流上执行与文件流相同的操作,例如map、reduceByKey等。

六、实时处理示例

下面是一个使用Spark Streaming进行简单实时处理的示例:

from pyspark.streaming import StreamingContext
ssc = StreamingContext(sparkContext, 1)  # 创建StreamingContext,批处理间隔为1秒
lines = ssc.socketTextStream("localhost", 9999)  # 创建套接字流
# 对DStream进行转换和操作
wordCounts = lines.flatMap(lambda line: line.split(" ")).map(lambda word: (word, 1)).reduceByKey(lambda a, b: a + b)
wordCounts.pprint()  # 打印每批次的结果
ssc.start()  # 启动流处理
ssc.awaitTermination()  # 等待流处理终止

这个示例从套接字流接收数据,对数据进行分词、计数,并打印每批次的结果。

Spark Streaming是一个功能强大的流处理引擎,它可以用于实时数据分析、监控、实时报警等各种实时应用。希望本文能够帮助你了解Spark Streaming的基础概念和使用方式。

目录
相关文章
|
消息中间件 分布式计算 网络协议
Spark Streaming 快速入门(实操)
Spark Streaming 快速入门(实操)
653 0
Spark Streaming 快速入门(实操)
|
7月前
|
SQL 关系型数据库 MySQL
Python与MySQL:从基础操作到实战技巧的完整指南
Python操作MySQL凭借高效性能与成熟生态,广泛应用于Web开发、金融风控及物联网等领域。借助pymysql等库,开发者可快速实现数据库连接与增删改查操作,同时通过参数化查询、连接池及事务管理保障系统安全与稳定。本文详解环境搭建、实战技巧与性能优化,助你构建高并发应用。
480 0
|
算法 Linux C++
C++框架设计中实现可扩展性的方法
在软件开发中,可扩展性至关重要,尤其对于C++这样的静态类型语言。本文探讨了在C++框架设计中实现可扩展性的方法:1) 模块化设计降低耦合;2) 使用继承和接口实现功能扩展;3) 通过插件机制动态添加功能;4) 利用模板和泛型提升代码复用;5) 遵循设计原则和最佳实践;6) 应用配置和策略模式以改变运行时行为;7) 使用工厂和抽象工厂模式创建可扩展的对象;8) 实现依赖注入增强灵活性。这些策略有助于构建适应变化、易于维护的C++框架。
1007 2
|
存储 人工智能 数据管理
|
机器学习/深度学习 数据采集 数据处理
多层感知机(MLP)解决二分类任务
分类任务: 开发一个神经网络,预测一氧化碳 (CO) 浓度是否超过某一阈值(CO(GT) 值的平均值)。这项任务涉及二元分类,即您的模型学会将实例分为两类:高于或低于阈值。阈值。要确定阈值,您必须首先计算CO(GT) 的平均值,其中不包括未知数据(缺失值)。然后,使用该阈值来预测网络预测的值是高于还是低于该阈值。但是您的网络应该能够处理缺失值。
|
数据采集 人工智能 搜索推荐
|
SQL 机器学习/深度学习 分布式计算
|
存储 前端开发 JavaScript
浅谈Web前端安全策略xss和csrf,及又该如何预防?
该文章详细讨论了Web前端安全中的XSS(跨站脚本攻击)和CSRF(跨站请求伪造)攻击原理及其防范措施,帮助读者了解如何保护Web应用程序免受这两种常见安全威胁的影响。
浅谈Web前端安全策略xss和csrf,及又该如何预防?
|
存储 分布式计算 大数据
大数据架构管理规范
8月更文挑战第18天
361 2
|
消息中间件 数据采集 监控
中间件数据集成
【7月更文挑战第7天】
383 4

热门文章

最新文章