AICon 深圳站 Keynote 嘉宾官宣!共探AI价值转化的实践路径 了解详情
写点什么

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

发布了 1726 篇内容, 共 1413.6 次阅读, 收获喜欢 4068 次。

关注

评论

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

基于数据技术全域流量协同优化是银行零售业务关键突破点

易观分析

银行 数据技术

关于 RocketMQ Summit 的延期通知

阿里巴巴云原生

无人洗车店生意怎么样?想加盟自助洗车

共享电单车厂家

加盟自助洗车 无人自助洗车加盟 无人洗车店生意

线上活动| 阿里云、亚马逊云与MongoDB的大佬带你来涨知识!

MongoDB中文社区

mongodb

PlatoFarm生态NFT总量恒定,激励机制让Dao成员持续贡献

西柚子

走进直播间——智能自动化助力政企数字化转型

云计算

加盟自助洗车需要人工全天看守吗

共享电单车厂家

24小时无人自助洗车 加盟自助洗车

模块三作业

HZ

架构实战营 #架构实战营

自助洗车机洗车多少钱一次?利润有多少

共享电单车厂家

自助洗车加盟 自助洗车机洗车 自助洗车多少钱一次

技术干货| 如何在MongoDB中轻松使用GridFS?

MongoDB中文社区

mongodb

漏洞挖掘之Spring Cloud注入漏洞

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 漏洞挖掘

腾讯WeTest通过TMMi 3级认证

WeTest

PlatoFarm生态NFT总量恒定,激励机制让Dao成员持续贡献

小哈区块

开个自助洗车要多少钱?主要费用有哪些?

共享电单车厂家

自助洗车加盟 开个自助洗车

iOS编码规范

刁架构

规范 iOS编码规范

EventBridge 与 FC 一站式深度集成解析

阿里巴巴云原生

干掉丑陋的swagger,堪称开发者的瑞士军刀!

Liam

后端 Jmeter Postman 后端开发 swagger

花14天梳理了3月份各大厂问得最多的50道Java基础面试题

北游学Java

Java 面试

如何使用 Serverless Devs 部署静态网站到函数计算

阿里巴巴云原生

ironSource Luna 正式推出针对苹果搜索广告的自动化投放工具

极客天地

快速了解日志概貌,详细解读13种日志模式解析算法

云智慧AIOps社区

算法 运维 安全 监控 日志

TASKCTL的单机与分布式部署,如何启动服务和代理节点监听

敏捷调度TASKCTL

批量任务 调度引擎 ETL 自动化运维 调度任务

TASKCTL 调度高可用架构服务与安装

敏捷调度TASKCTL

kettle 批量任务 调度引擎 ETL 调度任务

如何通过 Node 上传小程序代码,不会就看看吧

CRMEB

Java运算符、输入、选择流程控制详细讲解

五分钟学大数据

Java 4月月更

怎么加盟6元自助洗车?一起来了解下

共享电单车厂家

自助洗车怎么加盟 6元自助洗车 加盟自助洗车 6元自助洗车项目

生产到一半改工艺生产为另一个产品的业务方案探讨

秋去冬来春未远

生产改单 生产执行 生产拆单

元宇宙背景下——内容生产传播商业价值分析2022

易观分析

元宇宙 内容生产传播

K8s 基于 EFK 的日志解决方案介绍

移动云大数据

elasticsearch Kibana Fluentd

中兴通讯加入星策开源社区 携手推动企业智能化转型建设

星策开源社区

人工智能 机器学习 开源社区 企业转型

首届全球基础软件创新大会明天开幕!

OpenAnolis小助手

开源 操作系统 龙蜥社区 国产 基础软件创新大会

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