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

本文涉及的产品
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介: 由阿里云策划并成功举办的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

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
2月前
|
分布式计算 大数据 Apache
ClickHouse与大数据生态集成:Spark & Flink 实战
【10月更文挑战第26天】在当今这个数据爆炸的时代,能够高效地处理和分析海量数据成为了企业和组织提升竞争力的关键。作为一款高性能的列式数据库系统,ClickHouse 在大数据分析领域展现出了卓越的能力。然而,为了充分利用ClickHouse的优势,将其与现有的大数据处理框架(如Apache Spark和Apache Flink)进行集成变得尤为重要。本文将从我个人的角度出发,探讨如何通过这些技术的结合,实现对大规模数据的实时处理和分析。
154 2
ClickHouse与大数据生态集成:Spark & Flink 实战
|
22天前
|
人工智能 安全 PyTorch
SPDL:Meta AI 推出的开源高性能AI模型数据加载解决方案,兼容主流 AI 框架 PyTorch
SPDL是Meta AI推出的开源高性能AI模型数据加载解决方案,基于多线程技术和异步事件循环,提供高吞吐量、低资源占用的数据加载功能,支持分布式系统和主流AI框架PyTorch。
51 10
SPDL:Meta AI 推出的开源高性能AI模型数据加载解决方案,兼容主流 AI 框架 PyTorch
|
15天前
|
存储 分布式计算 安全
MaxCompute Bloomfilter index 在蚂蚁安全溯源场景大规模点查询的最佳实践
MaxCompute 在11月最新版本中全新上线了 Bloomfilter index 能力,针对大规模数据点查场景,支持更细粒度的数据裁剪,减少查询过程中不必要的数据扫描,从而提高整体的查询效率和性能。
|
27天前
|
人工智能 分布式计算 DataWorks
大数据& AI 产品月刊【2024年11月】
大数据& AI 产品技术月刊【2024年11月】,涵盖本月技术速递、产品和功能发布、市场和客户应用实践等内容,帮助您快速了解阿里云大数据& AI 方面最新动态。
|
30天前
|
机器学习/深度学习 人工智能 运维
智能化运维:AI与大数据在IT运维中的应用探索####
本文旨在探讨人工智能(AI)与大数据分析技术如何革新传统IT运维模式,提升运维效率与服务质量。通过具体案例分析,揭示AI算法在故障预测、异常检测及自动化修复等方面的实际应用成效,同时阐述大数据如何助力实现精准运维管理,降低运营成本,提升用户体验。文章还将简要讨论实施智能化运维面临的挑战与未来发展趋势,为IT管理者提供决策参考。 ####
|
2月前
|
负载均衡 大数据
大数据散列分区查询频率
大数据散列分区查询频率
22 5
|
2月前
|
存储 大数据 数据管理
大数据分区提高查询性能
大数据分区提高查询性能
36 2
|
2月前
|
存储 人工智能 分布式计算
大数据& AI 产品月刊【2024年10月】
大数据& AI 产品技术月刊【2024年10月】,涵盖本月技术速递、产品和功能发布、市场和客户应用实践等内容,帮助您快速了解阿里云大数据& AI 方面最新动态。
|
2月前
|
存储 负载均衡 大数据
大数据水平分区提高查询性能
【11月更文挑战第2天】
41 4
|
2月前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第27天】在大数据时代,数据湖技术凭借其灵活性和成本效益成为企业存储和分析大规模异构数据的首选。Hadoop和Spark作为数据湖技术的核心组件,通过HDFS存储数据和Spark进行高效计算,实现了数据处理的优化。本文探讨了Hadoop与Spark的最佳实践,包括数据存储、处理、安全和可视化等方面,展示了它们在实际应用中的协同效应。
129 2