MaxCompute 中的Code Generation技术简介

简介: 前言       在《数据库系统中的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”的角色上完成。其流程如下:
  1. 用户的SQL语句在Executor上经过Parsing和Optimization之后,生成对应的查询计划。
  2. Executor上的Code Generation模块将查询计划翻译成一个名为“mapred.cpp”的C++源文件。如上图所示,查询计划中的每一个Task(就是MaxCompute作业中的一个Stage)会被翻译成C++中的一个Class, 而所有的处理逻辑被生成到该Class的Process()方法当中。
  3. Executor调用g++将“mapred.cpp”编译成一个动态库,并将其下发到计算集群中的每一个Worker上。
  4. 被调度起来的Worker会Load该动态库,调用相应的Process()方法以完成计算逻辑。
   可以看到,利用Code Generation技术,对于每一个SQL来说执行时代码都是经过定制的,因此执行效率较传统的Volcano Model更好。但是,其中也有一些问题。
  1. g++ 编译还是比较消耗CPU/内存的,特别是当优化选项开到O2以上的时候。特别是用户SQL比较复杂的情况下(有些SQL在SELECT语句中有多达上千个表达式,或者表达式的嵌套计算特别深入),生成的C++源文件也比较大,编译更加耗时。在实际生产中,我们见过编译耗时数十秒,消耗上G内存的情况。
  2. 生成的动态库在控制集群和计算集群之间传输也会有带来一定的网络开销。因为这个动态库的与SQL逻辑紧密相关的,因此无法复用,因此每个SQL都会经历编译,下发的过程,在任务提交比较频繁的情况下,控制集群的稳定性会收到一定挑战。
  3. 因为较高的编译时开销,这种Code Generation的方式在处理复杂的语句加中小数据规模查询的场景,比如service mode下,overhead太大。

MaxCompute 2.0中的Code Generation


 MaxCompute 2.0采用了基于LLVM的JIT Code Generation技术。所谓JIT,就是程序在运行期间根据需要动态生成相应的机器指令。这样,整个Code Generation的工作由控制集群移交到了真正执行计算逻辑的计算集群各个Worker上。其流程如下:
  1. 和MaxCompute 1.0中一样,用户的SQL语句在Executor上经过Parsing和Optimization之后,生成对应的查询计划。
  2. 查询计划直接被发送到计算集群各个Worker上。
  3. MaxCompute 2.0执行引擎的Code Generation模块Load查询计划,并利用LLVM C++ API生成相应的机器码。Code Generation模块返回一个函数指针作为调用的入口。
  4. 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购买咨询”钉钉群(群号: 11782920)进行咨询,群二维码如下:

96e17df884ab556dc002c912fa736ef6558cbb51 
相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
1月前
|
Cloud Native 数据处理 云计算
探索云原生技术在大数据分析中的应用
随着云计算技术的不断发展,云原生架构作为一种全新的软件开发和部署模式,正逐渐引起企业的广泛关注。本文将探讨云原生技术在大数据分析领域的应用,介绍其优势与挑战,并探讨如何利用云原生技术提升大数据分析的效率和可靠性。
|
3月前
|
数据采集 传感器 人工智能
大数据关键技术之电商API接口接入数据采集发展趋势
本文从数据采集场景、数据采集系统、数据采集技术方面阐述数据采集的发展趋势。 01 数据采集场景的发展趋势 作为大数据和人工智能工程的源头,数据采集的场景伴随着应用场景的发展而变化,以下是数据采集场景的发展趋势。
|
3月前
|
数据采集 搜索推荐 大数据
大数据技术在电商平台中的应用
电商平台是当今社会最为普及的购物方式之一,而大数据技术则成为了众多企业的强有力竞争力。本文将介绍大数据技术在电商平台中的应用,包括数据采集、预测分析、用户画像等方面,并探讨其对电商平台的价值和意义。
|
3月前
|
机器学习/深度学习 数据采集 算法
大数据分析技术与方法探究
在当今信息化时代,数据量的增长速度远快于人类的处理能力。因此,如何高效地利用大数据,成为了企业和机构关注的焦点。本文将从大数据分析的技术和方法两个方面进行探究,为各行业提供更好的数据应用方向。
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
大数据分析的技术和方法:从深度学习到机器学习
大数据时代的到来,让数据分析成为了企业和组织中不可或缺的一环。如何高效地处理庞大的数据集并且从中发现潜在的价值是每个数据分析师都需要掌握的技能。本文将介绍大数据分析的技术和方法,包括深度学习、机器学习、数据挖掘等方面的应用,以及如何通过这些技术和方法来解决实际问题。
52 2
|
11天前
|
分布式计算 Hadoop 大数据
大数据技术与Python:结合Spark和Hadoop进行分布式计算
【4月更文挑战第12天】本文介绍了大数据技术及其4V特性,阐述了Hadoop和Spark在大数据处理中的作用。Hadoop提供分布式文件系统和MapReduce,Spark则为内存计算提供快速处理能力。通过Python结合Spark和Hadoop,可在分布式环境中进行数据处理和分析。文章详细讲解了如何配置Python环境、安装Spark和Hadoop,以及使用Python编写和提交代码到集群进行计算。掌握这些技能有助于应对大数据挑战。
|
3月前
|
机器学习/深度学习 存储 人工智能
大数据处理与分析技术:未来的基石
在信息化时代,数据已成为企业发展和决策的基础。而随着数据量的不断增长,传统的数据处理方法已经无法满足现代企业的需求。因此,大数据处理与分析技术的出现成为了新时代的必需品。本文将介绍大数据处理与分析技术的概念,意义、应用场景以及未来发展趋势。
50 3
|
20天前
|
NoSQL 大数据 数据挖掘
现代数据库技术与大数据应用
随着信息时代的到来,数据量呈指数级增长,对数据库技术提出了前所未有的挑战。本文将介绍现代数据库技术在处理大数据应用中的重要性,并探讨了一些流行的数据库解决方案及其在实际应用中的优势。
|
25天前
|
机器学习/深度学习 人工智能 数据可视化
基于Python的数据可视化技术在大数据分析中的应用
传统的大数据分析往往注重数据处理和计算,然而数据可视化作为一种重要的技术手段,在大数据分析中扮演着至关重要的角色。本文将介绍如何利用Python语言中丰富的数据可视化工具,结合大数据分析,实现更直观、高效的数据展示与分析。
|
1月前
|
存储 NoSQL 大数据
新型数据库技术在大数据分析中的应用与优势探究
随着大数据时代的到来,传统数据库技术已经无法满足海量数据处理的需求。本文将探讨新型数据库技术在大数据分析中的应用情况及其所带来的优势,为读者解析数据库领域的最新发展趋势。

相关产品

  • 云原生大数据计算服务 MaxCompute