2020 年 6 月 19 日,经过近两年的开发之后,Apache Spark TM 3.0.0 版本终于面世了。据官方介绍,此次 Spark 3.0.0 版本更新了 3,400 多个补丁程序,将使 Python 和 SQL 在功能上更加强大,且易用性也会更强。

今年刚好是 Spark 开源项目成立 10 周年,让我们一起来看一下本次更新的亮点吧。

Spark 3.0中最大的新功能:通过自适应查询执行、动态分区修剪和其他优化,与 Spark 2.4 相比,Spark 3.0 性能提高了 2 倍;

可兼容 ANSI SQL;

Pandas API 的重大改进,包括 Python 类型提示和增加额外的 Pandas UDF;

优化了 Python 错误处理,简化了 PySpark 异常;

结构化流媒体的新用户界面;

调用R语言 UDF 速度提升最高达到了 40 倍;

解决了 3400 个 Jira 问题,这些问题在 Spark 各个组件的分布情况如下:

Spark开源10周年

Spark 诞生于加州大学伯克利分校的 AMPlab,该实验室专注于数据密集型计算。AMPlab 的研究人员与大型互联网公司合作解决其数据和 AI 问题,但发现那些拥有大量且不断增长的数据量的公司都面临着同样的问题。于是,该团队开发了一个新引擎来处理这些新兴工作量,同时使开发人员可以更轻松地访问用于处理大数据的 API。

之后,由于社区的出现,Spark 扩展到了不同的领域,并产生了围绕流,Python 和 SQL 的新功能,这些模式现在构成了 Spark 的一些主要用例。持续的投入使 Spark 发展成如今的样子,成为数据处理,数据科学,机器学习和数据分析工作负载的事实引擎。

Apache Spark 3.0 将通过显着改善对 SQL 和 Python 的支持以继续保持这一趋势。

改进Spark SQL引擎

Spark SQL 是支持大多数 Spark 应用程序的引擎。例如,在 Databricks 上,超过 90% 的 Spark API 调用使用 DataFrame,Dataset 和 SQL API 以及由 SQL 优化器优化的其他库。这意味着即使 Python 和 Scala 开发人员也将其大部分工作通过 Spark SQL 引擎来进行完成。在 Spark 3.0 版本中,46% 的补丁于 SQL 有关,这些补丁显著提高了其性能和 ANSI SQL 兼容性。Spark 3.0 在总运行时间上的性能大约要比 Spark 2.4 好 2 倍。

Spark SQL引擎中的四个新功能

新的自适应查询执行(AQE)框架通过在运行时生成更好的执行计划来提高性能并简化调优,即使由于缺少/不正确的数据统计信息和错误估计的成本而使初始计划不理想。由于 Spark 的存储和计算是分离的,因此数据的到达可能无法预测。基于以上,Spark 运行时的自适应性变得比传统系统更为重要。故新版本引入了三个主要的自适应优化:动态聚结 shuffle 分区可简化甚至是避免调整 shuffle 分区的数量。用户可以在开始时设置相对较大的 shuffle 分区数量,AQE 会在运行时将相邻的小分区合并为较大的分区。

动态切换连接策略可以在一定程度上避免由于缺少统计信息或错误估计大小而导致执行次优计划的情况。这种自适应优化可以在运行时自动将排序合并连接(sort-merge join)转换成广播哈希连接(broadcast-hash join),从而进一步提高性能。

动态优化倾斜(skew)连接是另一个关键的性能增强。倾斜连接可能会导致负载的极度失衡并严重降低性能。在 AQE 从 shuffle 文件统计信息中检测到倾斜连接之后,它可以将倾斜分区拆分为较小的分区,并将它们与另一边的相应分区合并。这个优化可以让倾斜处理并行化,获得更好的整体性能。

在一个以 3TB TPC-DS 为基准的测试中,与没有 AQE 的 Spark 相比,具有 AQE 的 Spark 可以使两个查询的性能提高 1.5 倍以上,而对另外 37 个查询的性能提高 1.1 倍以上。

此外,当优化器无法在编译时识别其可以跳过的分区时,将使用“动态分区修剪”功能。这在星型模式中很常见(星型模式由一个或多个事实表组成,这些事实表引用了任意数量的维度表)。在这种联接操作中,我们可以通过识别过滤维度表而导致的分区来修剪联接从事实表中读取的分区。在 TPC-DS 基准测试中,102 个查询中的 60 个显示出 2 到 18 倍的显着加速。

ANSI SQL 的兼容性对于将工作负载从其他 SQL 引擎迁移到 Spark SQL 上至关重要。为了提升兼容性,新版本使用了 Proleptic Gregorian 日历,用户可以禁止使用 ANSI SQL 保留关键字作为标识符。同时,新版本针对数字类型的操作中引入了运行时溢出检查,并强制执行编译时类型检查。这些新的验证机制提高了数据质量。

增强Python API:PySpark和Koalas

现在 Python 是 Spark 上使用最广泛的语言,因此,它是 Spark 3.0 开发的重点关注领域。Databricks 上有 68% 的 Notebook 命令是使用 Python 编写的。PySpark 是 Apache Spark Python API,每月在 PyPI(Python 软件包索引)上的下载量超过 500 万。

许多 Python 开发人员使用 pandas API 进行数据结构和数据分析,但仅限于单节点处理。Databricks 表示将继续开发 Koalas(一种基于 Apache Spark 的 pandas API 的实现),以使数据科学家在分布式环境中处理大数据时更加高效。Koalas 消除了在 PySpark 中构建许多功能(例如,绘图支持)的需要,可以让数据科学家在整个集群中获得更高的性能。

经过一年多的开发,Koalas 实现了将近 80% 的 Pandas API。Koalas 在 PyPI 上的月下载量已迅速增长到 85 万,并以每两周发布一次的节奏快速演进。除了 Koalas,很多人仍在使用 PySpark API,该 API 也越来越受欢迎。

Spark 3.0对PySpark API进行了增强带有类型提示的新 Pandas API:Spark 2.3 中最初引入了 Pandas UDF,用于在 PySpark 中扩展用户定义的功能并将 Pandas API 集成到 PySpark 应用程序中。但是,当添加更多 UDF 类型时,现有接口很难理解。此版本引入了一个新的 Pandas UDF 接口,该接口利用 Python 类型提示来解决 Pandas UDF 类型泛滥的问题。新界面变得更具 Python 风格和自我描述性。

新的 Pandas UDF 类型和 Pandas 函数 API:新版本增加了两种新的 Pandas UDF 类型,即系列迭代器到系列迭代器和多个系列迭代器到系列迭代器。这对于数据预取和昂贵的初始化操作来说很有用。此外,新版本还添加了两个新的 Pandas 函数 API,即 map 和 co-grouped map。

更好的错误处理:PySpark 错误处理并不总是对 Python 用户友好。此版本简化了 PySpark 异常,隐藏了不必要的 JVM 堆栈跟踪,并使它们更具 Python 风格。

在 Spark 中改善对 Python 的支持和可用性仍然是我们的首要任务之一。

Hydrogen,流和可扩展性

Spark 3.0 完成了 Project Hydrogen 的关键组件,并引入了新功能来改善流传输和可扩展性。加速器感知调度:Hydrogen 项目是 Spark 的一项主要计划,旨在更好地统一 Spark 上的深度学习和数据处理。GPU 和其他加速器已被广泛用于加速深度学习工作负载。为了使 Spark 能够利用目标平台上的硬件加速器,新版本增强了现有调度程序,使群集管理器可以感知加速器。用户可以通过配置(点击获取配置地址)来指定加速器,然后调用新的 RDD API 来利用这些加速器。

结构化流的新 UI:结构化流最初是在 Spark 2.0 中引入的。在 Databricks 的使用量同比增长 4 倍之后,每天有超过 5 万亿条记录通过结构化流在 Databricks 上处理。此版本添加了专用的新 Spark UI,用于检查这些流作业。这个新的UI提供了两组统计信息:1、已完成的流查询作业的聚合信息;2、关于流查询的详细统计信息。

可观察的指标:持续监视数据质量的变化是管理数据管道的一项非常重要的功能。新版本引入了对批处理和流应用程序的监视功能。可观察的指标是可以在查询(DataFrame)上定义的任意聚合函数。一旦 DataFrame 的执行到达完成点(例如,完成批查询或到达流传输时代),就会发出一个命名事件,其中包含自上一个完成点以来处理的数据的度量。

新的目录插件 API:现有的数据源 API 缺乏访问和操纵外部数据源的元数据的能力。新版本丰富了数据源 V2 API,并引入了新的目录插件 API。对于同时实现目录插件 API 和数据源 V2 API 的外部数据源,在注册了相应的外部目录之后,用户可以通过多部分标识符直接操作外部表的数据和元数据。

Spark 3.0中的其他更新

Spark 3.0 是社区的主要发行版,已解决 3,400 多个 Jira 问题。这是 440 多个贡献者共同努力的结果,这些贡献者包括个人以及Databricks,Google,Microsoft,Intel,IBM,Alibaba,Facebook,Nvidia,Netflix,Adobe 等公司。除了本文重点介绍的 Spark 在 SQL,Python 和流技术方面的一些关键改进,Spark 3.0 还有很多其他改进功能,详情可以查阅版本发行说明。发行文档中提供了更多信息,包括数据源、生态系统、监控等。

图书推荐:

由 Spark 开发者及核心成员共同打造,讲解了网络大数据时代应运而生的、能高效迅捷地分析处理数据的工具——Spark,它带领读者快速掌握用 Spark 收集、计算、简化和保存海量数据的方法,学会交互、迭代和增量式分析,解决分区、数据本地化和自定义序列化等问题。

本书是使用 Spark 进行大规模数据分析的实战宝典,由知名数据科学家撰写。本书在第 1 版的基础上,针对 Spark 近年来的发展,对样例代码和所使用的资料进行了大量更新。新版 Spark 使用了全新的核心 API,MLlib 和 Spark SQL 两个子项目也发生了较大变化,本书为关注 Spark 发展趋势的读者提供了与时俱进的资料,例如 Dataset 和 DataFrame 的使用,以及与 DataFrame API 高度集成的 Spark ML API。

spark python_Python、流、SQL 有更新!耗时两年,Spark 3.0 重磅发布!相关推荐

  1. Kafka 3.0重磅发布,都更新了些什么?

    来源:OSC开源社区(ID:oschina2013)Flink(ID:Apache_Flink) Apache Kafka 是一个分布式开源流平台,被广泛应用于各大互联网公司.Kafka 设计之初被用 ...

  2. Kafka 3.0重磅发布,都更新了些啥?

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 后台回复"k8s",可领取k8s资料 Apache K ...

  3. 大数据各组件理论性总结---spark和hadoop(将持续更新)

    Hadoop和spark的起源 Hadoop起源 1998年9月4日,Google公司在美国硅谷成立.正如大家所知,它是一家做搜索引擎起家的公司 无独有偶,一位名叫Doug Cutting的美国工程师 ...

  4. 使用IntelliJ Idea开发Spark Streaming流应用程序

    使用IntelliJ Idea开发Spark Streaming流应用程序 一.实验目的 二.实验内容 三.实验原理 四.实验环境 五.实验步骤 5.1 启动IntelliJ Idea并创建spark ...

  5. Tablestore结合Spark的流批一体SQL实战

    作者:王卓然 花名琸然 阿里云存储服务技术专家 背景介绍 电子商务模式是指在网络环境和大数据环境下基于一定技术基础的商务运作方式和盈利模式,对于数据的分析和可视化是电商运营中最重要的部分之一,而电商大 ...

  6. Spark Steaming流式日志过滤与分析

    Spark Steaming流式日志过滤与分析 这篇大概讲的是 spark steaming 监听 hdfs 的某个目录,当你在终端A使用 spark-submit 运行 Log2DB.py 文件后, ...

  7. Spark Streaming 流式计算实战

    这篇文章由一次平安夜的微信分享整理而来.在Stuq 做的分享,原文内容. 业务场景 这次分享会比较实战些.具体业务场景描述: 我们每分钟会有几百万条的日志进入系统,我们希望根据日志提取出时间以及用户名 ...

  8. 从Storm和Spark 学习流式实时分布式计算的设计

    转自:http://www.dataguru.cn/thread-341168-1-1.html 流式实时分布式计算系统在互联网公司占有举足轻重的地位,尤其在在线和近线的海量数据处理上.而处理这些海量 ...

  9. 智慧出行/spark Streaming-Dstream流优化:1.消费并行度,2.序列化,3.限流,压背,冷启4.cpu空转时间,5.不要在代码中判断这个表是否存在,6.推测执行7.开启动态资源分配

    1.设置合理的消费并行度 最优的方案是:kafka分区数:broker *3/6/9 kafka分区能不能增加,能不能减少? kafka分区数是可以增加的,但是不能减少 2.序列化 java的序列化, ...

最新文章

  1. C++中的静态绑定与动态绑定
  2. 北电ERS1600,8300,8600交换机的基本技术-第六章 二层冗余技术(MLT,SMLT,IST)
  3. MVC ScriptBundle自定义排序。
  4. android 缓存文件的工具类,总结的一些android公共库,包含缓存(图片缓存、预取缓存)、...
  5. nginx: [warn] the “ssl“ directive is deprecated, use the “listen ... ssl“ directive instead in
  6. Win7系统中必需记住的14个常用快捷键
  7. linux编译框架的搭建,Linux精华篇—CentOS 7.4下源码编译构建LNMP架构
  8. 诗与远方:无题(七十八)- 望天而作
  9. JS的Touch事件们
  10. 通过BeanPostProcessor理解Spring中Bean的生命周期及AOP原理
  11. 使用MASM 5编译程序的便利批处理
  12. 从跑步小白到马拉松、再到百公里越野跑的晋级之路
  13. 08cms cecore.cls.php,08CMS 变量覆盖导致getshell 等问题
  14. 软件编程推荐书籍 大全
  15. Navicat注释乱码
  16. 世界级软件平台企业,永洪科技要的就是这个范儿
  17. educoder——面向对象程序设计java——实验实训——实验二 - 面向对象
  18. java 解析GZIP 和 Deflate 网页源文件
  19. Crazy Binary String
  20. 前端css样式如何设置内边框

热门文章

  1. HAL库是什么,HAL库的定义
  2. day12 递归、表达式、内置函数
  3. 从头开始写STM32F103C8T6驱动库(一)——STM32CubeMX创建并调整工程结构
  4. [share]PDO操作MySql类
  5. 自定义 behavior - 完美仿 QQ 浏览器首页,美团商家详情页
  6. 大数据揭秘《都挺好》:比起樊胜美 女性更想当苏明玉
  7. 服务器H110芯片组,技嘉(GIGABYTE) H110M-S2 主板 (Intel H110/LGA 1151)
  8. 学术大咖教你一个轻松在论文中画出漂亮插图的方法
  9. Android 文件下载中文名乱码的解决办法
  10. 【Linux】/etc/issue、/etc/issue.net和/etc/motd的区别