maxcompute中的codegeneration技术简介

author author     2022-10-28     408

关键词:

摘要: 前言 在《数据库系统中的Code Generation技术介绍》中,我们简单介绍了一下Code Generation技术及其在大规模OLAP系统,特别是大规模分布式OLAP系统中的重要性。MaxCompute采用了Code Generation技术来提高计算效率。在MaxCompute

前言

在《数据库系统中的Code Generation技术介绍》中,我们简单介绍了一下Code Generation技术及其在大规模OLAP系统,特别是大规模分布式OLAP系统中的重要性。MaxCompute采用了Code Generation技术来提高计算效率。在MaxCompute2.0中,我们又引入了基于LLVM的JIT(Just In Time) Code Generation技术。结合向量化的执行引擎,基于SIMD技术的执行效率优化等方式,较之MaxCompute 1.0,MaxCompute 2.0在性能方便有了较大的提升,具体可以参照《MaxCompute2.0性能评测:更强大、更高效之上的更快速》。

MaxCompute 1.0中的Code Generation

技术分享图片

如上图,MaxCompute 1.0采用了静态的Code Generation技术,工作主要在MaxCompute控制集群中名为“Executor”的角色上完成。其流程如下:
用户的SQL语句在Executor上经过Parsing和Optimization之后,生成对应的查询计划。

Executor调用g++将“mapred.cpp”编译成一个动态库,并将其下发到计算集群中的每一个Worker上。

被调度起来的Worker会Load该动态库,调用相应的Process()方法以完成计算逻辑。

可以看到,利用Code Generation技术,对于每一个SQL来说执行时代码都是经过定制的,因此执行效率较传统的Volcano Model更好。但是,其中也有一些问题。
g++ 编译还是比较消耗CPU/内存的,特别是当优化选项开到O2以上的时候。特别是用户SQL比较复杂的情况下(有些SQL在SELECT语句中有多达上千个表达式,或者表达式的嵌套计算特别深入),生成的C++源文件也比较大,编译更加耗时。在实际生产中,我们见过编译耗时数十秒,消耗上G内存的情况。

生成的动态库在控制集群和计算集群之间传输也会有带来一定的网络开销。因为这个动态库的与SQL逻辑紧密相关的,因此无法复用,因此每个SQL都会经历编译,下发的过程,在任务提交比较频繁的情况下,控制集群的稳定性会收到一定挑战。

因为较高的编译时开销,这种Code Generation的方式在处理复杂的语句加中小数据规模查询的场景,比如service mode下,overhead太大。

MaxCompute 2.0中的Code Generation

技术分享图片

MaxCompute 2.0采用了基于LLVM的JIT Code Generation技术。所谓JIT,就是程序在运行期间根据需要动态生成相应的机器指令。这样,整个Code Generation的工作由控制集群移交到了真正执行计算逻辑的计算集群各个Worker上。其流程如下:

和MaxCompute 1.0中一样,用户的SQL语句在Executor上经过Parsing和Optimization之后,生成对应的查询计划。
查询计划直接被发送到计算集群各个Worker上。
MaxCompute 2.0执行引擎的Code Generation模块Load查询计划,并利用LLVM C++ API生成相应的机器码。Code Generation模块返回一个函数指针作为调用的入口。
Worker通过调用Code Generation模块返回的函数指针以完成计算逻辑。

与MaxCompute 1.0相比,MaxCompute 2.0中Code Generation速度有明显提升。在1.0中,一个SQL的平均Code Generation耗时大概在2-3s左右,这个时间在2.0中被缩短到100 - 200ms。因为在2.0中Code Generation都在计算集群的Worker上完成,因此相对来说减轻了控制集群的压力,有助于MaxCompute控制集群的稳定性。此外,因为MaxCompute 2.0的执行引擎是复用的(不因为SQL不同而不一样),因此无需像1.0中一样,在控制集群与计算集群之间传输动态库,降低了控制集群与计算机群之间的网络负载。

后续工作

目前,MaxCompute 2.0 的执行引擎还是以Volcano Model为基础。只是在Volcano Model中各个算子之间以Batch模式传递数据,并且以列式执行的方式提高执行速度。基于LLVM的JIT Code Generation现在主要用在表达式计算,Streamline等热点部分。之后,我们准备尝试Full Stage的Code Generation, 类似http://www.hyper-db.com/。 有兴趣的同学可以看看这个:http://www.vldb.org/pvldb/vol4/p539-neumann.pdf。 附件中的PDF结合了《数据库系统中的Code Generation技术介绍》和本文的部分内容,有兴趣的同学可以作为参考。

原文链接

阅读更多干货好文,请关注扫描以下二维码:

技术分享图片

maxcompute安全管理指南-基础篇

背景及目的方便和辅助MaxCompute的projectowner或安全管理员进行project的日常安全运维,保障数据安全。MaxCompute有安全模型,DataWorks也有安全模型,当通过DataWorks使用MaxCompute,而DataWorks的安全模型不满足业务安全需求时,合理的将... 查看详情

maxcompute安全管理指南-基础篇(代码片段)

背景及目的方便和辅助MaxCompute的projectowner或安全管理员进行project的日常安全运维,保障数据安全。MaxCompute有安全模型,DataWorks也有安全模型,当通过DataWorks使用MaxCompute,而DataWorks的安全模型不满足业务安全需求时,合理的将... 查看详情

maxcompute非事务表如何更新数据(代码片段)

...#xff0c;支持随机更新非常复杂。它需要扫描大型文件,MaxCompute推出了最新的功能Transactional表可以支持update和delete语句,但是update和delete功能不适用于高频更新、删除数据或实时写入目标表场景,同时 查看详情

基于maxcompute的实时数据处理实践

简介: MaxCompute通过流式数据高性能写入和秒级别查询能力(查询加速),提供EB级云原生数仓近实时分析能力;高效的实现对变化中的数据进行快速分析及决策辅助。当前Demo基于近实时交互式BI分析/决策辅助场景,... 查看详情

maxcompute项目子账号做超级管理员

场景主账号不是大数据团队管理,使用MaxCompute员工都只持有子账号,而project的owner只能为主账号,但是很多MaxCompute的权限管理还需要owner才可以操作(如项目级别的flag设置,package跨项目资源共享配置等),因此非常需要一个子... 查看详情

maxcompute_2_maxcompute数据迁移文档(代码片段)

摘要:乍一看标题会以为是不是作者写错了怎么会有从MaxCompute到MaxCompute迁移数据的场景呢在实际使用中已经有客户遇到了这种场景比如两个网络互通的专有云环境之间数据迁移、公共云数加DataIDE上两个云账号之间数据迁移、还... 查看详情

maxcompute文章索引

概况介绍: MaxCompute2.0生态开放之路及最新发展10年老兵带你看尽MaxCompute大数据运算挑战与实践一分钟了解阿里云产品:大数据计算服务MaxCompute概述数加平台如何通过Serverless架构实现普惠大数据淘宝大数据之路 应用案例... 查看详情

maxcompute跨境访问加速解决方案(代码片段)

简介: MaxCompute联合全球加速服务,为有跨境访问需求的MaxCompute客户提供一套高效稳定的跨境访问加速方案。MaxCompute联合全球加速服务,为有跨境访问需求的MaxCompute客户提供一套高效稳定的跨境访问加速方案。背景... 查看详情

性能追求之路——maxcompute2.0的前世今生

...数据专场,阿里云高级专家云郎分享了《大数据计算服务MaxCompute产品最新动态》。他首先介绍了MaxCompute的发展历程和技术架构,然后对MaxCompute2.0版本新特性和新技术进行了详细介绍。最后,分享了基于MaxCompute平台构建完整大... 查看详情

redshift到maxcompute迁移实践指导

简介: 本文主要介绍AmazonRedshift如何迁移到MaxCompute,主要从语法对比和数据迁移两方面介绍,由于AmazonRedshift和MaxCompute存在语法差异,这篇文章讲解了一下语法差异1.概要本文档详细介绍了Redshift和MaxCompute之间SQL... 查看详情

5月19日云栖精选夜读:性能追求之路——maxcompute2.0的前世今生

摘要: 《大数据计算服务MaxCompute产品最新动态》,首先介绍了MaxCompute的发展历程和技术架构,然后对MaxCompute2.0版本新特性和新技术进行了详细介绍。《大数据计算服务MaxCompute产品最新动态》,首先介绍了MaxCompute的发展历... 查看详情

maxcompute2.0助力众安保险快速成长

摘要:2017云栖大会阿里云大数据计算服务(MaxCompute)专场,众安保险数据总监王超群带来MaxCompute助力众安保险方面的演讲。本文主要从MaxCompute优势开始谈起,进而谈及大数据能够公司运营带来的好处,最后重点分析了众安保... 查看详情

在maxcompute上分析ip来源的方法

摘要:在MaxCompute上分析IP来源和供应商淘宝IP库淘宝IP地址库官网地址http://ip.taobao.com/,其查询接口http://ip.taobao.com/service/getIpInfo.php?ip=[ip地址字串],如下所示:但是在MaxCompute中禁止使用http请求,那么如何实现在MaxCompute中进行IP... 查看详情

maxcompute新功能发布

2018年Q3MaxCompute重磅发布了一系列新功能。本文对主要新功能和增强功能进行了概述。实时交互式查询:LightningonMaxCompute生态兼容:SparkonMaxComputeNewSQL新特性发布PythonUDF全面开放OSS外表功能正式商业化HashClustering存储技术升级:zstd... 查看详情

精打细算使用maxcompute搭建数仓

摘要:MaxCompute是一套阿里自主研发的数据仓库解决方案。产品除了功能、性能、简单等优势外,还能在费用上节省下一大笔前。墨迹天气使用MaxCompute,除了性能和稳定性也有提升外,整体存储和计算的费用比之前节省70%。这是... 查看详情

阿里云-maxcompute研究

一、官方介绍MaxCompute是适用于数据分析场景的企业级SaaS(SoftwareasaService)模式云数据仓库,提供离线和流式数据的接入,支持大规模数据计算及查询加速能力。MaxCompute适用于100GB以上规模的存储及计算需求,... 查看详情

外部工具连接saas模式云数仓maxcompute—etl工具篇

简介:本文主要讲解开源ETL工具如何连接MaxCompute直播视频请点击直播观看。本次分享将从五个方面讲解。01走进MaxCompute生态02开源ETL工具03客户端简介04PyODPS简介05实操展示一、走进MaxCompute生态首先来看下MaxCompute产品能支持... 查看详情

maxcompute用户初体验

作为一名初次使用MaxCompute的用户,我体会颇深。MaxCompute开箱即用,拥有集成化的操作界面,你不必关心集群搭建、配置和运维工作。仅需简单的点击鼠标,几步操作,就可以在MaxCompute中上传数据,分析数据并得到分析结果。作... 查看详情