写点什么

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

发布了 1721 篇内容, 共 1402.3 次阅读, 收获喜欢 4059 次。

关注

评论

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

Mac 无线网络扫描工具:WiFi Explorer 3.4.2 (57)激活汉化版

真大的脸盆

无线管理 wifi工具

QEMU事件循环机制

Linux内核拾遗

Linux Kenel 虚拟化 事件和事件循环 qemu kvm

了解5G安全标准,看这一篇就够了

俞凡

安全 网络 通信

TCP协议中的粘包和半包问题

TCP TCP协议 粘包 半包

系统清理工具:Cocktail 16.3.3注册激活版

真大的脸盆

Mac Mac 软件 清理工具 清理优化 清理优化软件

十年程序老狗手写分布式服务架构:原理、设计与实战

小小怪下士

Java 程序员 分布式 后端

5分钟搞懂NESAS

俞凡

安全 网络 通信

在Vue中,为什么从 props 中解构变量之后再watch它,无法检测到它的变化?

Lee Chen

JavaScript Vue3

网络IO模型BIO->Select->Epoll多路复用的进化史

从阿里出发看微服务发展!P8架构师手打800页微服务深度解析笔记

Java 架构 微服务

Spring Boot自动配置原理详解和自定义封装实现starter

Java Spring Boot 自动配置

肝完阿里最新Java并发编程全优笔记,我成功晋升公司架构组

Java你猿哥

Java 架构师 并发 面经 Java工程师

阿里内部一份手打524页《Java中高级核心知识》令人犹如醍醐灌顶

程序知音

Java java面试 java架构 后端技术 Java面试八股文

【AIGC未来的发展方向】面向人工智能的第一步,一文告诉你人工智能是什么以及未来的方向分析

码界西柚

人工智能 4月日更 AIGC ChatGPT

LED显示屏近年来在中国的发展趋势

Dylan

LED显示屏 全彩LED显示屏 led显示屏厂家

DDD洋葱架构才是 yyds!阿里大牛手记(DDD)领域驱动设计应对之道

Java 领域驱动设计 DDD 架构师

D-ONE计划解读|得帆云DeCode持续引领低代码产品演进!

得帆信息

新产品 低代码平台 aPaaS

前端面试实录HTTP篇

Immerse

https HTTP 前端面试 前端已死

ChatGPT - SpringBoot Prompting Chain

码文

软件开发 ChatGPT

开源7天Github斩获4.5万Stars!阿里2023版高并发设计实录鲨疯了

程序员小毕

数据库 程序员 面试 高并发 架构师

Vue3常用代码块

青柚1943

intellijidea卸载重装无法打开怎么办?IntelliJ IDEA彻底卸载教程

Rose

IntelliJ IDEA 2023下载 IntelliJ IDEA 2023破解 IntelliJ IDEA 2023最新 IntelliJ IDEA卸载

千亿流量并发治理!Alibaba实战Sentinel笔记,为微服务保驾护航

Java 微服务 sentinel 高并发 流量治理

好家伙!GitHub公选“头牌”阿里大牛开源1300页炫彩性能调优手记

Java 性能优化 性能调优

Java岗程序员必备学习方向,全会拿45Koffer没问题!

Java你猿哥

Java 面试 面经 Java工程师 春招

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