开源生态的新发展:Apache Spark 3.0、Koala和Delta Lake

简介: Hadoop开源生态Spark已经发展三年有余,今年迎来了Spark 3.0。在2019杭州云栖大会大数据&AI峰会上,Databricks研发总监李潇为大家分享了Spark 3.0版本的新特性,以及其在数据工程以及数据科学方面带来的新技术。

本场视频链接:New Developments in the Open Source Ecosystem: Apache Spark 3.0 and Koalas

ppt观看:https://www.slidestalk.com/AliSpark/NewDevelopmentsintheOpenSourceEcosystemApacheSpark30andKoalas32939


Spark 发展

Spark的前身是加州伯克利分校的一名博士生于开发的一套大数据分布式处理系统,从开发、开源发展至今已经整整十年。因此,2019年对于Spark社区来说是一个很特殊的年份。
image.png
Spark的发展相当迅速,2013年其原创团队建立了Databricks,将Spark捐献给了Apache Foundation;2014年Spark成为了Apache顶级项目;2016年发布了Spark 2.0;2019年10月Spark 3.0 preview版本发布,收集用户反馈后将于2020年3月份发布Spark 3.0正式版本。image.png
从世界著名的开发者论坛Stack Overflow的数据可以看出,2015年开始Spark每月的问题提交数量已经超越Hadoop,而2018年Spark Python版本的API PySpark每月的问题提交数量也已超过Hadoop。当前排名Spark第一,PySpark第二;而十年的累计排名是Spark第一,PySpark第三。按照这个趋势发展下去,Spark和PySpark在未来很长一段时间内应该还会处于垄断地位。image.png
Stack Overflow于2019年发布的开发者调查报告结果显示,在开发者最受欢迎的平台中,Spark位居前列。image.png

Spark 3.0新特性

Spark 3.0新的特性如下图所示,其中Adaptive Query Execution(AQE)在Spark 1.0版本中已经实现,但是Spark的大数据团队通过和百度、eBay等公司合作尝试解决了一系列的缺陷和不足,3.0版本中重新实现了一套新的AQE的框架,让其更好地支持实时动态优化;Spark Graph是一个新的模块,是Spark团队和世界知名的图计算公司Neo4j合作,将GraphFrames和GraphX相关的功能引入Spark Graph,推出的用于解决大数据方面的图运算功能; Accelerator-aware Scheduling是Spark和NVIDIA公司合作,推出的让Spark可以更加高效地融入显卡的加速器,来实现某种具体应用场景下的加速,与此同时,NVIDIA和Facebook都尝试在Spark中增加向量计算;Spark on Kubernetes是Google工程师主导的一个项目,他们希望实现Spark在Google的云原生运行,这个版本中该模块相对稳定;Spark作为计算引擎,没有存储,需要一套更加高效简洁的API和外部系统进行融合,在这个版本中阿里巴巴和Netflix与Spark合作,共同开发了Data Source API with Catalog Supports;ANSI SQL Compliance模块是Spark和日本电信NTT合作研发的,尤其是对于Parser部分SQL标准部分,NTT给予了很大的支持;SQL Hints是Database中比较普遍的功能;苹果公司算是Spark生态圈中最大的用户,其在Spark 3.0版本中主导了JDK11的开发支持;Hadoop 3的增加和支持主要是eBay,其用Spark来作为数据仓库。
image.png
Spark 2.X中增加了基于计算的Cost模型,但是在Spark应用环境中其表现并不如意,主要原因是:
一次性计算:Spark 2.X基本的应用场景是ETL,一次性计算,收集数据成本昂贵,统计信息的缺失导致基于Cost的优化基本不可能完成;
存储于计算分离: Spark最初设计的原则就是不拥有数据,这意味着用户可以用不同的方式增加、删除和修改,而如果统计信息错误,就无法保证基于cost的优化的正确性,甚至优化后的结果可能更差;
多样部署环境:基于Cost的优化依赖Cost模型,而Cost模型在Spark的运行环境是多样的,如云原生、分布式、大型机等,因此无法提出一套普遍适用于多种生态环境的Cost模型。此外,Spark中比较重要的功能UDFs支持用户根据自己需要任意加载复杂或简单的UDF实现其业务逻辑。这种情况下是完全无法计算其Cost的,相应地,优化器也就无法实现一个正确有效的优化计划。
image.png
针对上述问题,Spark 3.0版本在cost基础上收集应用在运行期间的统计信息,来帮助动态优化运行的计划。image.png
下面主要介绍两个相关的特性:
1) Dynamic Partition Pruning
下图中展示了一个非常典型的TPCS查询,涉及了两个表,其中表1比较大,表2无关大小但是其Filter可能会减去绝大多数值,因此在join操作后实际产生的结果不会很多。
image.png
也就是说join操作的condition在执行后,会排除掉大量的行,因此在读表1的时候会浪费很多读的资源。但是基于行或cost的优化是无法动态知道表2经过筛选后能产生多少数值,因此不得不全部读取。如果考虑运行期间的统计信息,表2进行筛选后的结果就可以推送到右边子树,也就是表1。image.png
下图是一个简单的测试,可以发现如果减少90%的scan,就可以达到33倍的加速。这种情况在Spark的TPCS大量存在,因此通过Dynamic Partition Pruning可以实现TPCS至少两倍的性能加速。image.png
2) Adaptive Query Execution (AQE)
下图是一个经典的Spark的流程,从Parser、Analyzer、Optimizer、Planner到Query的执行。该版本中,AQE指的是图中的红线部分。当某种condition满足的情况下可以进行动态自适应规划。
image.png
下面举一个简单的例子,执行的是两个表之间的join查询。包含一个key和Filter,如t2.col2 LIKE '9999%'。在基于cost的模型中是不可能准确的知道Filter能排除多少行的,这种情况下Spark通过谓词下推,将各个条件先应用到对应的数据上,而不是根据写入的顺序执行,就可以先过滤掉部分数据,降低join等一系列操作的数据量级。image.png
在没有动态实时运行信息的时候,保守估计判断只能用SortMergeJoin。当收集到运行时信息后会发现某个Filter事实上已经去掉了表中绝大多数行,完全可以采用BroadcastHashJoin,如果上层parent也有这种情况,就可以大大提升查询效率。image.png

Spark生态

Spark设计之初的目标就是实现一套统一的系统,来解决与大数据相关的各式问题。就像是苹果公司在最初推出苹果手机的时候,其功能丰富性的目标引来了很多人的质疑,但是后来经过发展印证了其目标的商业价值,很多相机公司、游戏公司因为苹果手机的竞争而最终销声匿迹。我们相信Spark未来也可以在大数据领域实现能够统一解决各种问题的目标,但是目前Spark在流处理方面做得还不够好。
image.png
人工智能和大数据处理在近几年发展迅速,从最开始的数据仓库对已有数据进行响应式查询,来获得已有数据的统计信息,到现在基于已有数据进行的预测和分析,再到之后会用到人工智能和机器学习技术来辅助决策。Spark作为一个统一的大数据处理、分析引擎,将发挥很重要的作用。image.png

Spark主要针对两个群体,即数据工程师和数据科学家。
image.png
Spark通过提供一套统一的引擎,来打破数据工程和数据科学之间的障碍,使其更加容易地进行交流和合作。image.png

1) 数据科学
相信大家已经注意到了,在过去几年中备受争议的Python发展相当迅速,在Stack Overflow上的问题提交数量已经远远超过其他语言。在Python社区中,Pandas是绝大多数数据科学家选择的一个数据分析的library,但是Pandas只适用于单机小量级数据的分析,数据量级大的时候,性能会变差。因此当面对大数据的处理分析时,使用Pandas的数据科学家不得不重新学习大数据分析的语言和工具。

image.png
Spark在今年四月份发布了Koalas,它面向的是Pandas已有用户,可以让其无缝使用Spark来作为数据分析和计算引擎。Koalas自推出便迎来了很多用户,并且广受好评。从下图左侧的日下载量数据可以看出,目前为止日下载量已经超过一万,月下载量超过20万,这印证了社区对这个新的library的认同。与此同时,PySpark同样作为数据科学家可以使用的引擎,日下载量从最初的平均三万快速增长到目前的最高九万,月下载量目前已经达到两百万。image.png
下图展示了Pandas DataFrame和PySpark DataFrame的区别,其底层的设计理念完全不同。Pandas DataFrame假设数据结构可以变化,PySpark DataFrame则相反。PySpark DataFrame API的设计完全是基于SQL实现的,而Pandas DataFrame则是与SQL无关的全新实现的一套语义和标准。举一个经典的例子Value count,Pandas DataFrame只有一个API便可以解决所有问题,同时Vaule Count在Pandas中支持自动Sort;但是如果Pandas用户使用PySpark,就需要SQL的语义,首先从一个已有的Frame GroupBy,然后再进行Count和OrderBy操作,这明显增加了Pandas用户的学习成本。image.png
再举一个简单的例子来进一步说明Pandas用户使用PySpark的复杂性。Pandas读取一个读取csv文件后,设置新的列名称,同时生成一个新的列,具体操作如下图左侧所示。而使用PySpark则完全不同,首先需要声明各种相关option,然后通过toDF进行重新命名,还需要通过withColumn生成新的列。image.png
而上述问题在Koalas中可以得到很好的解决,Pandas用户只需要导入Koalas的library,就可以在Spark中无缝使用Pandas。事实证明,Koalas是对于数据科学家使用Spark过程中一个重要的library。image.png

2) 数据工程
Delta是基于Spark上千用户在使用过程中的痛点问题而设计开发的一款产品。它是构建data lake的开放标准,基于已有的Parquet,支持transaction来保证数据的质量,同时完全兼容Spark的API。Delta于今年四月份宣布开源,令很多用户激动不已

image.png
下图中的例子展示了如何从Parquet转换到Delta。用户只需要在代码中用delta替换Parquet,仅此而已。image.png
Delta主要包括四个核心的特性,其中最重要的是ACID transactions,它通过乐观并发控制来实现数据的同时读、写,从而保证数据的一致性,提高了数据的质量,让批处理和流处理可以使用一套统一的数据,支持update、delete和merge等典型的数据仓库操作。还有一点不得不提的是,Spark中元数据处理已经从小数据变成了大数据,当一个表有成百上千万的partition的时候,元数据获取和处理将会耗费大量的时间,有时甚至多大几小时,而使用Delta使用Spark做元数据处理,可以大大提高效率。image.png

下面分享三个使用Delta的社区用户场景:
• Comcast:它是一个媒体内容提供商,它使用Spark来作为数据处理引擎已经很长时间了,因为其数据量级比较大,可以达到PB级别。在用Delta代替Parquet后,由原来一条pipeline需要的640个服务器降低到64个,原来需要84个job完成的数据处理降低到现在的3个,数据延迟加速了一倍。
image.png
• Sam’s:它是沃尔玛的一个子品牌,也是Spark的重度用户。其原来没有transaction的update,因此经常会由于数据的质量问题导致pipeline停止。自从使用了Delta,transaction的问题得到了完美解决。此外,Delta提供jobs自动merge的API,帮助该用户merge部分的操作时间由原来的超过一个小时缩减到现在的小于6秒。image.png
• Healthdirect Australia:该用户原来的数据一致性无法保证,因为Delta的使用,数据质量大幅度提升,名称匹配的准确性由原来的80%提升到了95%,数据加载速度由原来的一天缩减到二十分钟。image.png
在Databricks使用Delta每天在客户生成环境中处理的数据量达到38PB以上,某一大型客户的生产环境每天新入库的数据量高达400TB以上。image.png
Spark社区不断有新的项目和特性被大量地使用,本人对Spark做过贡献的个人和公司表示由衷的感谢。也希望中国的用户和社区开发人员积极加入进来,为Spark做更多的贡献。image.png


阿里巴巴开源大数据技术团队成立Apache Spark中国技术社区,定期推送精彩案例,技术专家直播,问答区数个Spark技术同学每日在线答疑,只为营造纯粹的Spark氛围,欢迎钉钉扫码加入!
二维码.JPG

相关文章
|
3月前
|
消息中间件 人工智能 Apache
2025 OSCAR丨与创新者同频!Apache RocketMQ 邀您共赴开源之约
10 月 28 日,阿里云高级技术专家周礼分享如何基于 Apache RocketMQ 新特性构建异步化 Multi-Agent 系统。
180 29
|
3月前
|
存储 运维 Cloud Native
Apache Doris 与 ClickHouse:运维与开源闭源对比
Doris 与 ClickHouse 各有优势,但在运维效率、集群自动化能力、故障恢复机制以及开源治理模型方面,Doris 展现出了更成熟、更开放、更面向云原生架构的产品能力。对于希望构建可控、弹性、高可用分析平台的团队而言,Doris 提供了一个更具确定性和长期价值的选择。而 ClickHouse 仍是极具性能优势的分析引擎,但其闭源方向的转变可能需要用户在技术与商业之间做出更谨慎的权衡。
503 9
Apache Doris 与 ClickHouse:运维与开源闭源对比
存储 数据管理 物联网
345 0
|
5月前
|
Java Linux Apache
Apache NetBeans 27 (macOS, Linux, Windows) - Java 等多语言开源跨平台 IDE
Apache NetBeans 27 (macOS, Linux, Windows) - Java 等多语言开源跨平台 IDE
345 5
Apache NetBeans 27 (macOS, Linux, Windows) - Java 等多语言开源跨平台 IDE
|
7月前
|
消息中间件 Apache 双11
Apache RocketMQ + “太乙” = 开源贡献新体验
Apache RocketMQ 是 Apache 顶级项目,源于阿里巴巴,历经多年双十一考验。RocketMQ 联合“太乙”平台启动开源竞赛,提供贡献价值评价与奖金激励(最高 5000 元),助力开发者成为社区核心成员。竞赛包含详尽教程与自动搭建环境,促进技术生态繁荣,推动分布式消息处理技术发展。欢迎加入,共创开源未来!
277 1
|
10月前
|
Apache 数据库 开发者
喜报!Apache Seata (incubating) 荣获 2024 开源创新榜单“年度开源项目”!
12月18日,Apache Seata 在北京举行的2024开源创新榜单发布活动中荣获“年度开源项目”。该榜单由中国科协等权威机构主办,经过严格评审,Seata 凭借卓越的技术实力和社区贡献脱颖而出。Seata 是一款分布式事务解决方案,自2019年开源以来,已在GitHub收获超25.4k star,广泛应用于各领域企业,支持主流数据库和RPC框架。未来,Seata 将继续推动技术进步,共建开放、包容的社区生态。
喜报!Apache Seata (incubating) 荣获 2024 开源创新榜单“年度开源项目”!
|
10月前
|
消息中间件 存储 Apache
恭喜 Apache RocketMQ 荣获 2024 开源创新榜单“年度开源项目”
恭喜 Apache RocketMQ 荣获 2024 开源创新榜单“年度开源项目”
259 1
|
消息中间件 存储 Apache
恭喜 Apache RocketMQ、Apache Seata 荣获 2024 开源创新榜单“年度开源项目”
近日,以“新纪天工、开物焕彩——致敬开源的力量”为活动主题的“重大科技成就发布会(首场)”在国家科技传播中心成功举办,并隆重揭晓了 2024 开源创新榜单,旨在致敬中国开源力量,传播推广开源科技成就,营造中国开源创新生态。2024 年开源创新榜单由中国科协科学技术传播中心、中国计算机学会、中国通信学会、中国科学院软件研究所共同主办,中国开发者社区承办,以王怀民院士为首组建评审委员会,进行研讨评审,面向中国开源行业领域,遴选具有创新性、贡献度和影响力的开源项目、社区、应用场景与开源事件。在评审出的 10 个年度开源项目中,Apache RocketMQ、Apache Seata 成功入选。
437 105
|
消息中间件 监控 数据可视化
Apache Airflow 开源最顶级的分布式工作流平台
Apache Airflow 是一个用于创作、调度和监控工作流的平台,通过将工作流定义为代码,实现更好的可维护性和协作性。Airflow 使用有向无环图(DAG)定义任务,支持动态生成、扩展和优雅的管道设计。其丰富的命令行工具和用户界面使得任务管理和监控更加便捷。适用于静态和缓慢变化的工作流,常用于数据处理。
Apache Airflow 开源最顶级的分布式工作流平台
|
存储 SQL Apache
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
Apache Doris 是一个基于 MPP 架构的高性能实时分析数据库,以其极高的速度和易用性著称。它支持高并发点查询和复杂分析场景,适用于报表分析、即席查询、数据仓库和数据湖查询加速等。最新发布的 2.0.2 版本在性能、稳定性和多租户支持方面有显著提升。社区活跃,已广泛应用于电商、广告、用户行为分析等领域。
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库

推荐镜像

更多