写点什么

SparkStreaming 流计算实战

用户头像
小舰
关注
发布于: 2021 年 04 月 09 日
一、简介
Spark Streaming 是 Spark 最早推出的流处理组件,它基于流式批处理引擎,基本原理是把输入数据以某一时间间隔批量的处理(微批次),当批处理时间间隔缩短到秒级时,便可以用于实时数据流。

Spark 2.0 引入了 Structured Streaming, 将微批次处理从高级 API 中解耦出去。它简化了 API 的使用,API 不再负责进行微批次处理;开发者可以将流看成是一个没有边界的表,并基于这些“表”运行查询。Structured Streaming 的默认引擎基于微批处理引擎,并且可以达到最低 100ms 的延迟和数据处理的 exactly-once 保证。

Spark 2.3 继续向更快、更易用、更智能的目标迈进,引入了低延迟的持续流处理模式,可以达到端到端最低 1ms 的延迟和数据处理的 at-least-once 的保证。

采用何种处理模式只需要进行简单的模式配置即可。

二、实践

对于 Spark Core 的方式读取本地文件进行 wordCount 的实例,spark Core 的方式本质上属于批处理,举个简单的例子,一款 App 通过埋点的方式采集了用户点击各个功能的日志数据,通过跑批来统计一段时间内点击总量为 topK(K>0) 的功能,就会用到这种方式来计算。

但是,如果想统计前一个小时,前半个小时,前 10 分钟甚至更细粒度的时间段内,该 app 点击量为 topK 的功能怎么半,难道要每隔一段时间启动一个新批任务来计算么,显然不是。这种处理模式就是流处理。

SparkStreaming 是目前应用比较广泛的流处理框架(组件),它可以通过定义一个时间间隔来完成每隔多久进行一次计算。从以上的描述中,你可能也意识到了 SparkStraming 本质上还是属于批处理,但是当间隔时间越来越短,也就变成了微批,我们就可以粗略的看做为流处理啦。目前 SparkStreaming 可以做到秒级的时间间隔,已经能够满足大部分的流处理场景应用了。

SparkStreaming 一般结合 Kafka 等消息队列相互协作,我们本期学习重点在于 SparkStreaming,因此用 netcat 来模拟 socket 数据源进行 SparkStreaming 调试。

1.安装并启动 netcat

netcat 工具非常轻便容易安装,安装完成后运行下面命令开启服务端口:

nc -l 8888(随便指定端口)
复制代码


2.创建 SparkStreaming 示例
import org.apache.spark.SparkConfimport org.apache.spark.streaming.dstream.{DStream, ReceiverInputDStream}import org.apache.spark.streaming.{Seconds, StreamingContext}

/** * @title: WordCountSparkStreaming * @projectName spark-test * @description: 使用 netcat 工具向 8888 端口不断的发送数据,通过 SparkStreaming 读取端口数据并统计不同单词出现的次数。 * @author chengyijian * @date 2020/8/2715:03 */
object WordCountSparkStreaming { def main(args: Array[String]): Unit = { // 1、初始化 Spark 配置信息 val sparkConf: SparkConf = new SparkConf() .setMaster("local[*]") .set("spark.driver.host", "localhost") .setAppName("sparkStreamWordCount")
// 2、初始化 SparkStreamingContext val ssc: StreamingContext = new StreamingContext(sparkConf, Seconds(5))
val wordAndCountStreams = ssc.socketTextStream("localhost", 8888) .flatMap(_.split(" ")) .map((_,1)) .reduceByKey(_+_)
wordAndCountStreams.print() ssc.start() ssc.awaitTermination() }
}
复制代码
3.运行

3.1 在 netcat 启动的页面输入字符模拟数据产生过程

3.2 可以看到 SparkStreaming 每隔 5s 钟进行了实时计算

4.以上就是流处理等一般过程,也是最基本的流处理

发布于: 2021 年 04 月 09 日阅读数: 22
用户头像

小舰

关注

公众号:DLab数据实验室 2020.11.12 加入

中国人民大学硕士

评论

发布
暂无评论
SparkStreaming流计算实战