大数据和AI | 基于Spark的高性能向量化查询引擎

简介: 由阿里云策划并成功举办的BigData和AI 见面会2020第二季在上海落下帷幕。在此次见面会上,几位业界大咖分别分享了有关大数据和AI的见解、洞察和领先技术等内容。本篇内容是由开源界知名的Databricks公司的技术主管范文臣分享的关于《基于Spark的高性能向量化查询引擎》。

嘉宾:范文臣
Databricks 开源组技术主管,Apache Spark Committer、PMC成员,Spark开源社区核心开发之一。

视频地址:https://developer.aliyun.com/live/245461
正文:
Databricks最新开发的一款基于Spark的高性能向量化查询引擎——Delta,是基于ApacheSpark 3.0构建、完全兼容Spark API,并且能够通过以下方式加快SQL和DataFrame工作负载:
1、改进的查询优化器
2、本机矢量化执行引擎
3、缓存

一、优化器

优化器是基于Spark的CPU和实时运行动态优化打造的。Databricks内部利用更加高级的统计信息来提升性能,例如star schema workload可以达到最高18倍的性能提升。
image.png

二、缓存层

缓存层可以自动帮用户缓存积累的数据,它是基于MVMe SSDs打造的,可以把数据转化成内存优化的格式放在SSD中,然后可以更快的加速CPU性能,这个特点可以让workload有5倍性能提升。

image.png

三、本地化执行引擎

Databricks近几年一直在致力于提升引擎性能,要达到这样的目的,可以从两个层面来看。
第一是硬件趋势,这是做性能优化的基础;第二是用户场景,这是性能优化的目标,有效的性能优化是可以给客户带来收益的。

第一、硬件趋势
2015年基于Spark Summit调研显示(如下图),2010年硬件的基本情况是存
50+MB/s(HDD),网络是1Gpbs,CPU是~3GHz;五年后,存储和网络都有了10倍以上的提升,但是CPU却并没有什么变化。
image.png

基于这样的调研结果,Databricks推出了钨丝计划,目标就是让引擎加速CPU,充分调动CPU性能。CPU有自己的缓存,CPU访问缓存和内存中间有巨大的性能鸿沟,所以充分调动CPU性能就是,如何设置数据结构让内存数据进到CUP缓存更加高效。要达到这样的目的,可以让代码生成得更加精简。另外一个方法就是以do one来降低局势的消耗。

2020年,硬件的变化让io性能有了进一步提升。SSD有了NVMe接口,同时有了超高速网络,但CPU仍然是3赫兹。那么当下我们的挑战是在这样的硬件条件下,如何最大化CPU性能。

image.png

第二、用户场景趋势
当下企业越来越强调敏捷性,业务需要适用市场变化而不停的变化。在这种用户场景下,数据模型就没有精力和时间去仔细打磨,往往会造成刚刚设计好的数据模型,因为业务的变化而全部推翻了。同时,数据限制也没有设置,更为灵活的字符串类型受到追捧。

在这种情况下,当数据越来越多,中间还夹杂着半结构化和非结构化,如何在保证敏捷性的前提下提升性能呢?Photon,即本地化执行引擎,就是解决上面问题的产品。

Photon是Datastricks用C++写的引擎,利用了向量化技术在技术层面和指令层面实现向量化;也会针对用户的敏捷需求,在半结构化和非结构化的前提下对数据做优化。
image.png

如何用CPU数据并行的特性改写执行引擎?
image.png

首先如下图所示,列式存储更高效,它的优势是:其一因为每一列的数据式一个类型,可以直接被压缩为存储;其次内存访问顺序是线性的,这样CPU就可以预估即将要访问的数据并提前加载到缓存里,从而达到提升性能目的。

另外当对不同列进行操作时候,所使用的简单的代码也更容易被反编译为机器码,也就是可以用CPU特性去执行代码。
image.png

如何利用指令并行改写执行引擎?
image.png

Hash Table是一个在SQL引擎中非常重要的数据结构。如下图举例,假设有group by这样的query,它是怎么实现的呢?首先构建一个Hash Table,然后用for循环去访问数据,并对每个数据算出Hash值,并确定在Hash Table的哪个位置存数据。然后比较数据是否正确,如果没问题就可以加起来。
image.png

上图简单的代码瓶颈在绿色部分,即访问数组。因为每个数据的Hash值是随机的,每次算出来都不一样,这种访问方式是非常低效的。其实在这期间大部分CPU的时间都在等待数据从内存进到CPU缓存,这个转换时间占了2/3,这对于Group by的操作是非常浪费的事情。

基于这样的情况,如何优化呢?

image.png

由上图可以看出,这段代码分做了四件事情。第一是算Hash值,第二是访问内存拿到Key,第三是把Key做比较,第四是做加法。最慢的是访问Key,而且整个循环体也非常大,会导致CPU比较难优化。基于这种情况,实现优化的方法就是可以将循环变得简单些。

如下图可以将一个循环拆成3个循环,反而能够让这个过程变得更快。原因是,将上文提到的绿色代码瓶颈做成一个循环,就可以完成CPU的优化。
image.png

上述简单的操作完成后,内存诊断时间可以降低1/4,同时内存时间也降低了。

image.png

这样调整后,通过测试可以发现系统优化后整体性能可以提升3倍。

image.png

关于如何优化结构化和半结构化数据,主要展开介绍下如何针对String类型优化。
image.png

第一个方法是用C++将自定义函数全部重写一遍,性能可以提高1-2两倍,但是这样的提升不大;
在将第二个方法前,先介绍一下背景知识。当下主流的字符串是编码格式,这种编码格式的特点是变长,比如字母是一个字符,中文是三个字符。这样的编码方式不浪费空间,空间利用高效,但是计算比较低效。
image.png

假设用户数据中大部分是英文字符,掺杂着中文字符或其他字符,这种场景如何优化呢?可以将String优化分为两步。
image.png

第一步,确认String是不是ASCII编码;通过String优化后,可以达到60GB/s/核的处理性能。
第二步,如果不是ASCII编码,那么可以按照C++编码格式一个个处理。

通过以上的处理,性能提升会非常明显。

image.png
image.png

总结

 Photon是用本地语言写的向量化执行引擎,它主要利用了数据向量化技术;并且能够针对用户敏捷需求做业务场景优化;
 Engine产品结果主要包括优化基层、存储缓存层和本地化执行层;其中本地化执行层还在内测阶段,用户需要跟销售联系才能拿到内测资格,其他资源都是公开的,可以通过阿里云获取,在阿里云上叫DDI(阿里云批流一体大数据分析引擎)

image.png

关于Databricks
Databricks是属于 Spark 的商业化公司,由美国伯克利大学 AMP 实验室的 Spark 大数据处理系统多位创始人联合创立。Databricks 致力于提供基于 Spark 的云服务,可用于数据集成和数据管道等任务。

欢迎交流
对阿里云E-MapReduce感兴趣的朋友可以申请加群交流,加入钉钉群(如下)@扬流
image.png

相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
2月前
|
人工智能 安全 算法
AI与大数据:智慧城市安全的护航者与变革引擎
AI与大数据:智慧城市安全的护航者与变革引擎
36 1
|
2月前
|
机器学习/深度学习 人工智能 算法
AI加速引擎PAI-TorchAcc:OLMo训练加速最佳实践
阿里云机器学习平台PAI开发的Pytorch训练加速框架PAI-TorchAcc已接入最新开源的大语言模型 OLMo。在保证模型效果和易用性的前提下,PAI-TorchAcc相对 PyTorch 性能在 OLMo 1B 上加速比达到 1.64X,在 OLMo 7B 上加速比达到 1.52X。本文分析了 PAI-TorchAcc 的性能收益来源。
|
4月前
|
Web App开发 人工智能 JavaScript
【利用AI让知识体系化】V8引擎相关知识(二)
【利用AI让知识体系化】V8引擎相关知识
|
1月前
|
分布式计算 Hadoop 大数据
大数据技术与Python:结合Spark和Hadoop进行分布式计算
【4月更文挑战第12天】本文介绍了大数据技术及其4V特性,阐述了Hadoop和Spark在大数据处理中的作用。Hadoop提供分布式文件系统和MapReduce,Spark则为内存计算提供快速处理能力。通过Python结合Spark和Hadoop,可在分布式环境中进行数据处理和分析。文章详细讲解了如何配置Python环境、安装Spark和Hadoop,以及使用Python编写和提交代码到集群进行计算。掌握这些技能有助于应对大数据挑战。
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
2024年AI辅助研发:科技创新的引擎
2024年AI辅助研发:科技创新的引擎
77 1
|
11天前
|
机器学习/深度学习 分布式计算 数据处理
Spark是一个基于内存的通用数据处理引擎,可以进行大规模数据处理和分析
【5月更文挑战第2天】Spark是一个基于内存的通用数据处理引擎,可以进行大规模数据处理和分析
23 3
|
14天前
|
分布式计算 DataWorks 大数据
MaxCompute操作报错合集之大数据计算的MaxCompute Spark引擎无法读取到表,是什么原因
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
MaxCompute操作报错合集之大数据计算的MaxCompute Spark引擎无法读取到表,是什么原因
|
14天前
|
SQL 分布式计算 大数据
MaxCompute操作报错合集之spark3.1.1通过resource目录下的conf文件配置,报错如何解决
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
19天前
|
分布式计算 大数据 数据处理
[AIGC大数据基础] Spark 入门
[AIGC大数据基础] Spark 入门
141 0
|
20天前
|
SQL 人工智能 JSON
【AI大模型应用开发】2.2 Function Calling连接外部世界 - 【实战】查询数据库
【AI大模型应用开发】2.2 Function Calling连接外部世界 - 【实战】查询数据库
21 0