没有合适的资源?快使用搜索试试~ 我知道了~
高级Java人才培训专家-3-Structured Streaming.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 199 浏览量
2024-03-09
19:25:52
上传
评论
收藏 2.91MB DOC 举报
温馨提示
试读
37页
高级Java人才培训专家-3-Structured Streaming.doc
资源推荐
资源详情
资源评论
北京市昌平区建材城西路金燕龙办公楼 电话:400-XXX-XXXX
Structured Streaming
1. Structured Streaming基本概述
Structured Streaming 是基于 Spark SQL 引擎构建的可扩展和容错流处理引擎. 基于
Structured Streaming可以像对静态数据的批处理一样的进行流式计算操作. Spark SQL 引擎将负
责以增量和连续的方式运行它,并随着流数据的不断到达而更新最终结果. 可以使用 Scala、
Java、Python 或 R 中的Dataset/DataFrame API来表示流聚合、事件时间窗口、流到批处理连接
等
计算在同一个优化的 Spark SQL 引擎上执行。最后,系统通过检查点和预写日志确保端到端
的精确一次容错保证。简而言之,结构化流式处理提供快速、可扩展、容错、端到端的一次性流
处理,用户无需对流式处理进行推理。
在内部,默认情况下,结构化流查询使用微批处理引擎处理,该引擎将数据流作为一系列小
批量作业处理,从而实现低至 100 毫秒的端到端延迟和一次性容错保证. 但是,从 Spark 2.3 开
始,Spark引入了一种新的低延迟处理模式,称为Continuous Processing,它可以实现低至 1 毫
秒的端到端延迟,并保证至少一次。在不更改查询中的 Dataset/DataFrame 操作的情况下,能
够根据应用程序要求选择对应的模式。
北京市昌平区建材城西路金燕龙办公楼 电话:400-XXX-XXXX
Structured Streaming 主要特点:
1- 增量查询模式(incremental query model):
Structured Streaming 将会在新增的流式数据上不断执行增量查询,同时代码的写法和批处理 API
(基于Dataframe和Dataset API)完全一样,而且这些API非常的简单。
北京市昌平区建材城西路金燕龙办公楼 电话:400-XXX-XXXX
2- 支持端到端应用(Support for end-to-end application)
Structured Streaming 和内置的 connector 使的 end-to-end 程序写起来非常的简单,而且
"correct by default"。数据源和sink满足 "exactly-once" 语义,这样我们就可以在此基础上更好地和
外部系统集成。
3- 复用 Spark SQL 执行引擎
Spark SQL 执行引擎做了非常多的优化工作,比如执行计划优化、codegen、内存管理等。这也是
Structured Streaming取得高性能和高吞吐的一个原因。
2. Structured Streaming 入口案例
需求: 监听node1节点的9999的端口号, 从端口号中获取单词数据, 将其转换为DF进行单词统
计
1- 构建SparkSession对象
说明: Structured Streaming 是基于 spark SQL的, 故也是采用统一的入口
from pyspark.sql import SparkSession
from pyspark.sql.functions import explode
from pyspark.sql.functions import split
import os
os.environ["SPARK_HOME"] = "/export/server/spark"
os.environ["PYSPARK_PYTHON"] = "/root/anaconda3/bin/python"
os.environ["PYSPARK_DRIVER_PYTHON"] = "/root/anaconda3/bin/python"
spark = SparkSession \
.builder \
.appName("StructuredNetworkWordCount") \
.getOrCreate()
2- 构建一个支持流式的dataFrame, 监听 node1:9999, 将其转换为DF
lines_df = spark \
.readStream \
.format("socket") \
.option("host", "localhost") \
.option("port", 9999) \
.load()
3- 基于DF进行数据处理即可: 此部分与spark SQL 是一致的
Words_df = lines_df.select(
explode(
split(lines.value, " ")
).alias("word"))
wordCounts_df = words_df.groupBy("word").count()
4- 启动程序
北京市昌平区建材城西路金燕龙办公楼 电话:400-XXX-XXXX
query = Words_df \
.writeStream \
.outputMode("complete") \
.format("console") \
.start()
# 等待查询终止, 防止查询处于活动状态时进程退出
query.awaitTermination()
测试:
在node1中安装nc命令, 开启9999连接, 写入数据操作
# 下载
yum -y install nc
# 连接9999端口, 即可发送数据
nc -lk 9999
北京市昌平区建材城西路金燕龙办公楼 电话:400-XXX-XXXX
可能出现的问题:
3. 编程模型
Structured Streaming的模型十分简洁,易于理解。一个流的数据源从逻辑上来说就是一个不
断增长的动态表格,随着时间的推移,新数据被持续不断地添加到表格的末尾,用户可以使用
Dataset/DataFrame 或者 SQL 来对这个动态数据源进行实时查询。
如下图所示,通过将流式数据理解成一张不断增长的表,从而就可以像操作批的静态数据一样
来操作流数据了。
在这个模型中,主要存在下面几个组成部分:
1:Input Table(Unbounded Table),流式数据的抽象表示,没有限制边界的,表的数据源源不
断增加;
2:Query,对 Input Table 的增量式查询,只要Input Table中有数据,立即(默认情况)执行查
剩余36页未读,继续阅读
资源评论
xiaoli8748_软件开发
- 粉丝: 4830
- 资源: 1426
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功