Vectorized Execution Engine in MaxCompute 2.0简介

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: 前言     在《数据库系统中的Code Generation技术介绍》一文中,我们阐述了代码的CPU执行效率对于大规模分布式OLAP系统的重要性。现在简单总结如下: OLAP系统中查询往往比较复杂,比如多表Join, 各种聚合函数以及窗口函数,其中涉及大量的Hash计算(比如采用Hash

文章转自ruanxi

前言

    在《 数据库系统中的Code Generation技术介绍》一文中,我们阐述了代码的CPU执行效率对于大规模分布式OLAP系统的重要性。现在简单总结如下:
  1. OLAP系统中查询往往比较复杂,比如多表Join, 各种聚合函数以及窗口函数,其中涉及大量的Hash计算(比如采用Hash Join, Hash Aggregation),排序(比如采用Merge-Sort Join)操作,CPU开销比较大。
  2. SSD等高性能存储硬件的使用,以及内存计算的普及(比如Spark中利用RDD来Cache部分数据)大大提高了I/O性能,使得CPU日益成为计算的瓶颈。
  3. 在大规模分布式OLAP系统中(比如MaxCompute),因为需要实现分布式Join,聚合以及窗口函数,一个作业可能会由多级Task组成,Task与Task之间可能会有大量的Shuffle/Sort操作,这其中包含的大量的Hash/Compare可能占据作业执行的大量时间。
   面对日益提高的执行效率述求,除了利用Code Generation等技术为SQL Query生成定制化的执行代码以外,整个执行引擎在设计上也需要有相应的考虑和改变。

Volcano Model:Row to Batch

    传统的关系型数据库基本采用 Volcano Model来实现SQL执行引擎。这个模型比较好理解,查询计划中的各个算子(如SELECT, FILTER, JOIN等)实现成一个基类Operator的子类,算子和算子之间根据在查询计划中的数据传输关系形成一个有向无环图(绝大多数时候是一棵树)。除了直接与数据源打交道的算子(如从Storage读数据的TableScan)以外,每个算子都从一个或者多个其他算子读取数据,这些算子成为其“孩子”,这个算子也就是其“孩子”们的“父亲”。Operator基类有如下三个接口: 
  1. Open():做一些初始化工作,包括调用其“孩子”算子的Open()。
  2. Next():调用“孩子”算子的Next()方法获取数据,完成自身的计算逻辑。构造输出数据。
  3. Close():做一些清理工作,包括调用“孩子”算子的Close()方法。
   Volcano Model类型的执行引擎在这行过程中,数据以Record的形式在各个算子之间流动。一个Record即代表从存储层读出的一个数据行,或者某个算子计算过程中产生的中间数据行(下图描述了在Volcano Model中执行“SELECT t1.a + t2.b FROM t1 JOIN t2 ON t1.c = t2.c”中可能出现的Record)。如下图所示:

   Volcano Model的优点在于比较简单直观,SQL的执行流和查询计划对应比较紧密。因为各个算子之间都以固定的接口传递数据,因此相互之间耦合比较低,较容易应对SQL中众多算子复杂组合的场景,因此得到广泛引用。
   在执行效率方面,Volcano Model有明显缺陷。在执行过程中,算子之间通过Next()方法传递数据,而Next()方法往往实现为虚函数(或函数指针),这意味着执行过程中的Function Call的次数与Record数量呈正比,这极大影响了代码的instruction cache performance。此外,在Volcano Model中,需要沿着整个Operator Tree自底向上完成一遍执行,代码的Footprint较大,因此导致代码的 instruction locality 较低,当CPU的 instruction cache较小的时候,在执行过程中可能出现“Cache 颠簸”现象(不同算子之间反复将彼此的指令集从cache中刷出),大大降低代码的执行效率。
   一些改良过的Volcano Model,算子与算子之间以“Batch of Records”传输数据,如下图所示。以Batch的方式传递数据,一方面减少了算子之间的函数调用开销(由Record级别降低为Batch级别),也提高了指令和数据的局部性,有利于程序性能 的提升(靖人在这个方面还发表过一篇Paper, 有兴趣的同学可以参阅( 传送门))。

Vectorized Execution

   上面讲到的“Batch Based Volcano Model”采用了行式的内存布局,即同一个Record中的不同列在内存中连续存放,不同行的同一列在内存中是离散的。 这在关系型计算的场景中,常常不是最优的选项。举一个例子,在一个“SELECT”算子当中,输入数据有“t1.a”和“t1.c”两列,SELECT算子从中取出"t1.a"这一列,  若采用行式的内存布局,那么需要从每一个输入Record中摘出a列来构造新的Record,事实上需要大量的内存拷贝。另一方面,在做类似“SELECT t1.a + 1”这样的表达式计算时,虽然“t1.c”这一列并没有用到,但是仍然会被Laod到CPU Cache当中,事实上降低了"t1.a"这一列的Cache命中率。


   MaxCompute 2.0在基于“Batch of Records”的Volcano Model基础上,引入了列式数据库的思想,数据在算子之间传递,处理的时候,相同列的数据在内存中地址连续。如下图所示。
        
基于列式的内存布局在上面提到的场景下有更好的性能。在“SELECT t1.a FROM t1”的场景中,我们只需要做一次指针赋值就可以完成投影操作,而不需要大量的内存拷贝,而在“SELECT t1.a +1”这种表达式计算场景下,我们也避免了Load冗余数据进CPU Cache,从而提高了CPU的Cache命中率。
   此外,列式的执行框架使得我们能够更好的提高CPU Pipeline效率,以及利用SIMD技术进行计算优化。这个我们会在后续的文章中更深入的介绍。

欢迎加入“数加·MaxCompute购买咨询”钉钉群(群号: 11782920)进行咨询,群二维码如下:

96e17df884ab556dc002c912fa736ef6558cbb51 
相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
7月前
|
消息中间件 分布式计算 大数据
【大数据技术Hadoop+Spark】Flume、Kafka的简介及安装(图文解释 超详细)
【大数据技术Hadoop+Spark】Flume、Kafka的简介及安装(图文解释 超详细)
361 0
|
2月前
|
存储 缓存 分布式计算
大数据-83 Spark 集群 RDD编程简介 RDD特点 Spark编程模型介绍
大数据-83 Spark 集群 RDD编程简介 RDD特点 Spark编程模型介绍
44 4
|
SQL NoSQL Java
Redis学习---大数据技术之Redis(NoSQL简介、Redis简介、Redis安装、五大数据类型、相关配置、持久化)
Redis学习---大数据技术之Redis(NoSQL简介、Redis简介、Redis安装、五大数据类型、相关配置、持久化)
|
2月前
|
存储 缓存 NoSQL
大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等
大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等
73 4
|
4月前
|
存储 分布式计算 数据可视化
大数据概念与术语简介
大数据概念与术语简介
98 2
|
7月前
|
存储 大数据 虚拟化
【云计算与大数据技术】虚拟化简介及虚拟化的分类讲解(图文解释 超详细)
【云计算与大数据技术】虚拟化简介及虚拟化的分类讲解(图文解释 超详细)
748 0
|
7月前
|
消息中间件 分布式计算 大数据
大数据组件之storm简介
大数据组件之storm简介
184 2
|
7月前
|
监控 大数据 数据处理
大数据组件之Storm简介
【5月更文挑战第2天】Apache Storm是用于实时大数据处理的分布式系统,提供容错和高可用的实时计算。核心概念包括Topology(由Spouts和Bolts构成的DAG)、Spouts(数据源)和Bolts(数据处理器)。Storm通过acker机制确保数据完整性。常见问题包括数据丢失、性能瓶颈和容错理解不足。避免这些问题的方法包括深入学习架构、监控日志、性能调优和编写健壮逻辑。示例展示了实现单词计数的简单Topology。进阶话题涵盖数据延迟、倾斜的处理,以及Trident状态管理和高级实践,强调调试、性能优化和数据安全性。
362 4
|
7月前
|
存储 分布式计算 Hadoop
大数据存储技术(1)—— Hadoop简介及安装配置
大数据存储技术(1)—— Hadoop简介及安装配置
343 0
|
7月前
|
机器学习/深度学习 搜索推荐 算法
「机器学习」推荐系统简介——一起来看看你是怎么被大数据杀熟的(四)
「机器学习」推荐系统简介——一起来看看你是怎么被大数据杀熟的(四)
88 0

相关产品

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