2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

专访朱诗雄: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:0017150
用户头像
Tina InfoQ高级编辑

发布了 1692 篇内容, 共 1366.5 次阅读, 收获喜欢 4027 次。

关注

评论

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

KaiwuDB 连续三年荣获开源中国“优秀开源技术团队”

KaiwuDB

KaiwuDB 优秀开源技术团队

低代码平台浅析:引迈JNPF

互联网工科生

低代码 JNPF 引迈

华为云CodeArts Deploy常见问答汇总

华为云PaaS服务小智

华为云

小红书可观测 Metrics 架构演进,如何实现数十倍性能提升?

小红书技术REDtech

云原生 可观测性

Axie Infinity 之后,Ronin 的潜力何在?

Footprint Analytics

区块链 以太坊 Web3 游戏 Ronin

luchysheet升级版univer产品介绍会

梦数技术团队

typescript 前端 Vue3 Typescript

华为云CodeArts Pipeline常见问答汇总

华为云PaaS服务小智

华为云

网易游戏与华为达成鸿蒙合作

最新动态

技术写作者所需的关键技能和知识

小万哥

技术 程序人生 写作 软件开发 作者

凝心聚力 共赢计算新时代 ——2023计算产业生态大会在京圆满举办

彭飞

亮相CCF中国软件大会,天翼云助力千行百业搭上“数字快车”

天翼云开发者社区

人工智能 CCF

宣布推出适用于 Amazon DynamoDB 的增量导出到 S3

亚马逊云科技 (Amazon Web Services)

S3 API 云存储服务 Amazon DynamoDB

5种容器内指定特定域名解析结果的方式

华为云开发者联盟

容器 云原生 华为云 域名解析 华为云开发者联盟

点燃数字引擎,天翼云助力汽车行业云上加速跑!

天翼云开发者社区

人工智能 数字化转型 汽车

华为云CodeArts Repo常见问答汇总

华为云PaaS服务小智

华为云

这就是univer

梦数技术团队

typescript 前端 React Hydrate Vue3 Typescript

19家游戏伙伴参加鸿蒙原生游戏合作仪式,与华为游戏中心一起推动产业自主创新和高质量发展

新消费日报

最佳 Mock 工具排行榜: 顶级5个必知选择

Liam

前端 前端开发 Mock Mock 服务 Mock.js

介绍一款低代码数据可视化平台

秃头小帅oi

低代码 数据可视化

AI浪潮下,大模型如何在音视频领域运用与实践?

不在线第一只蜗牛

人工智能 AI 音视频 大模型

行业唯一!百度上榜“2023年度中国数据管理十大名牌企业”

百度安全

项目实战接口开发SpringBoot

不在线第一只蜗牛

springboot 项目开发 区块链项目开发

前方高能!2023开放原子开发者大会亮点攻略,一触即发

开放原子开源基金会

Java 开源 程序员 开发者 算法

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