写点什么

专访朱诗雄:Apache Spark 中的全新流式引擎 Structured Streaming

  • 2018-01-31
  • 本文字数:2692 字

    阅读完需:约 9 分钟

Apache Spark 在 2016 年的时候启动了 Structured Streaming 项目,一个基于 Spark SQL 的全新流计算引擎 Structured Streaming,让用户像编写批处理程序一样简单地编写高性能的流处理程序。经过一年多的改进和完善,目前 Structured Streaming 已经在 Databricks 内部和客户广泛使用,InfoQ 采访了 Structured Streaming 的核心开发朱诗雄来具体了解这个项目。

朱诗雄:Spark Streaming 是 Spark 早期基于 RDD 开发的流式系统,用户使用 DStream API 来编写代码,支持高吞吐和良好的容错。其背后的主要模型是 Micro Batch,也就是将数据流切成等时间间隔的小批量任务来执行。

Structured Streaming 则是在 Spark 2.0 加入的经过重新设计的全新流式引擎。它的模型十分简洁,易于理解。一个流的数据源从逻辑上来说就是一个不断增长的动态表格,随着时间的推移,新数据被持续不断地添加到表格的末尾。用户可以使用 Dataset/DataFrame 或者 SQL 来对这个动态数据源进行实时查询。每次查询在逻辑上就是对当前的表格内容执行一次 SQL 查询。如何执行查询则是由用户通过触发器(Trigger)来设定。用户既可以设定定期执行,也可以让查询尽可能快地执行,从而达到实时的效果。一个流的输出有多种模式,既可以是基于整个输入执行查询后的完整结果,也可以选择只输出与上次查询相比的差异,或者就是简单地追加最新的结果。这个模型对于熟悉 SQL 的用户来说很容易掌握,对流的查询跟查询一个表格几乎完全一样。

InfoQ:是不是可以把 Structured Streaming 理解为对 Spark Streaming 的改进?Structured Streaming 的设计初衷是为了解决什么具体问题的能介绍下吗?

朱诗雄:Structured Streaming 并不是对 Spark Streaming 的简单改进,而是我们吸取了过去几年在开发 Spark SQL 和 Spark Streaming 过程中的经验教训,以及 Spark 社区和 Databricks 众多客户的反馈,重新开发的全新流式引擎,致力于为批处理和流处理提供统一的高性能 API。同时,在这个新的引擎中,我们也很容易实现之前在 Spark Streaming 中很难实现的一些功能,比如 Event Time 的支持,Stream-Stream Join(2.3.0 新增的功能),毫秒级延迟(2.3.0 即将加入的 Continuous Processing)。

类似于 Dataset/DataFrame 代替 Spark Core 的 RDD 成为为 Spark 用户编写批处理程序的首选,Dataset/DataFrame 也将替代 Spark Streaming 的 DStream,成为编写流处理程序的首选。

InfoQ:有了 Structured Streaming,是否意味着 Spark 不仅具有卓越的批处理能力,也同时具备了优秀的流处理能力,可以用 Spark 来构建统一批处理和流处理的大数据平台?这样子的平台是否更能适应未来人工智能快速发展,对更大数据量、更多样化的数据处理的需求?

朱诗雄:是的。Structured Streaming 决定使用 Dataset/DataFrame API 最主要的一个原因就是希望用户不再需要分别为批处理和流处理编写代码,而是直接使用同一套代码。目前我们也在 Databricks Delta 项目中探索如何基于 Cloud 构建一个统一的批处理和流处理的数据平台。

这样的一个数据平台会对人工智能有很大帮助。Google 之前有一篇 paper 提到了,在一个机器学习系统中的机器学习代码只占一小部分,有很大一部分是用来进行数据收集、清理、验证、特征提取、分析等各种操作 [1]。 而后面这些工作都是 Spark 所擅长的。

[1] “Hidden Technical Debt in Machine Learning Systems” Google NIPS 2015

InfoQ: 可以聊聊有了 Structured Streaming 的 Spark 有什么优劣势吗?

朱诗雄:Structured Streaming 的主要优势体现在下面几点:

  • 简洁的模型。Structured Streaming 的模型很简洁,易于理解。用户可以直接把一个流想象成是无限增长的表格。
  • 一致的 API。由于和 Spark SQL 共用大部分 API,对 Spaprk SQL 熟悉的用户很容易上手,代码也十分简洁。同时批处理和流处理程序还可以共用代码,不需要开发两套不同的代码,显著提高了开发效率。
  • 卓越的性能。Structured Streaming 在与 Spark SQL 共用 API 的同时,也直接使用了 Spark SQL 的 Catalyst 优化器和 Tungsten,数据处理性能十分出色。此外,Structured Streaming 还可以直接从未来 Spark SQL 的各种性能优化中受益。
  • 多语言支持。Structured Streaming 直接支持目前 Spark SQL 支持的语言,包括 Scala,Java,Python,R 和 SQL。用户可以选择自己喜欢的语言进行开发。

InfoQ:可以介绍一下在 Databricks 内部,哪些地方在使用 Structured Streaming 么?效果如何?

朱诗雄:我们内部使用 Structured Streaming 开发了自己的日志处理系统,相比原来的批处理系统,延迟从几十分钟下降到了几分钟。我们还利用 Structured Streaming 来分析 Databricks 的客户日志,监控客户使用 Structured Streaming 的情况。一旦发现用户的程序有问题,会自动触发报警。得益于 Structured Streaming 的高性能和低延时,我们甚至可以在客户发现问题之前,提前帮助他们解决。

Databricks 的很多客户也在使用 Structured Streaming,每天有 100 多个 Structured Streaming 的应用程序在生产环境中运行,最大的应用程序每个月可以处理几十万亿条数据。

InfoQ:Structured Streaming 跟其他的流处理技术相比,算是比较年轻的技术吧?目前有什么已知待解决的问题?未来有什么新增功能和优化的计划能否介绍下?

朱诗雄:是的,Structured Streaming 从开始开发到现在也就两年时间,相当年轻,也存在一些待解决的问题。比如由于开发资源有限,一些不常用的功能还没有完成,例如 Update 输出模式。另外,Spark 的动态资源分配对 Structured Streaming 的支持不是很好,无法根据用户的流处理程序很好地调整资源。大家可以到 Spark 的 JIRA 上查看 Structured Streaming 的相关 Issue。

在即将发布的 Spark 2.3.0 中,最令人期待的是支持毫秒级延迟的 Continuous Processing。同时,也新增了对 Stream-Stream Join 的支持。此外,在这个版本中,还将发布新的 Source 和 Sink API,让用户方便地开发各种 Streaming 数据源。

在未来的后续版本中,我们会继续对 Continuous Processing 进行改进。同时,也会支持 Update 输出模式,推出更多的 Streaming 数据源。

InfoQ: 您对于未来 Structured Streaming 的发展和应用范围有什么预期吗?

朱诗雄:我个人希望有更多的用户来使用 Structure Streaming,包括新用户和 Spark Streaming 已有的用户。同时也希望能看到有更多的机器学习和图处理算法支持 Structured Streaming。

QCon 北京 2018 全新开启,聚焦最新技术热点,沉淀最优实践经验。现在报名享 8 折优惠,立减 1360 元。有任何问题欢迎咨询票务经理 Hanna,电话:010-84782011,微信:qcon-0410。

2018-01-31 18:0016881
用户头像
Tina InfoQ高级编辑

发布了 1506 篇内容, 共 1127.2 次阅读, 收获喜欢 3828 次。

关注

评论

发布
暂无评论
发现更多内容

计算机网络知识,一文搞定

霍格沃兹测试开发学社

自动化测试之模拟器控制

霍格沃兹测试开发学社

CAD设计软件autocad 2024下载 autocad 2024安装方法

mac

AutoCAD 2024 苹果mac Windows软件 CAD设计软件

人机协作的交融:语音标注平台的秘密

来自四九城儿

K8s 常见面试题

互联网工科生

Kubernetes k8s

智能多通道系统实现消息推送更智能更高效

MobTech袤博科技

前端 前端开发 消息推送 APP开发

LLM 落地电商行业的最佳实践来了?Zilliz X AWS 有话说

Zilliz

AWS Zilliz 向量数据库 电商行业 大模型落地

科技前沿的助力:探索语音标注平台的奇迹

来自四九城儿

软件测试/测试开发丨Python 错误与异常 学习笔记

测试人

Python 程序员 软件测试 自动化测试 测试开发

SRE方法论之服务质量目标

不思jo

SRE

Trapcode Particular for Mac(AE 3D粒子系统插件) 5.0.3激活版

mac

AE插件 苹果mac Windows软件下载 Trapcode Particular

mutex vs atomic

Geek_44385e

Atomic mutex 互斥锁

开放原子开源基金会六、七月新增捐赠人

开放原子开源基金会

开源

LCR 089. 打家劫舍

红袖添香

动态规划 力扣 打家劫舍

开发者不可错过的提效工具——低代码开发

高端章鱼哥

软件开发 低代码 JNPF

Serverless 应用托管助力企业加速创新

阿里巴巴云原生

阿里云 Serverless 云原生

OpenCloudOS WOW 活动上线啦!千份社区好礼等你来拿!

OpenCloudOS

操作系统

低代码系列——初步认识低代码

互联网工科生

软件开发 低代码 JNPF

慧函数生成代码应用到IDEA遇到依赖包问题怎么办?

SoFlu软件机器人

星火大模型 VS FuncGPT(慧函数), 谁更胜一筹?

SoFlu软件机器人

语音技术的催化剂:语音标注平台的崛起

来自四九城儿

借助 AI 工具,真的能成为 10x 工程师?

SoFlu软件机器人

软件测试/测试开发丨Python 模块与包 学习笔记

测试人

Python 程序员 软件测试 自动化测试 测试开发

腾讯云 CODING 荣获 TiD 质量竞争力大会 2023 软件研发优秀案例

CODING DevOps

Docker 搭建Web服务器nginx

霍格沃兹测试开发学社

Andriod微信小程序自动化测试

霍格沃兹测试开发学社

技术分享| WebRTC之SDP详解

anyRTC开发者

WebRTC RTC sdp

校源行丨开放原子开源基金会赴苏州大学走访交流

开放原子开源基金会

开源

2023-08-18:用go写算法。你会得到一个字符串 text, 你应该把它分成 k 个子字符串 (subtext1, subtext2,…, subtextk)。 要求满足: subtexti 是

福大大架构师每日一题

福大大架构师每日一题

使用appuploader工具发布证书和描述性文件教程

雪奈椰子

专访朱诗雄:Apache Spark中的全新流式引擎Structured Streaming_开源_Tina_InfoQ精选文章