深入MaxCompute理解数据、运算和用户的大脑:基于代价的优化器

回顾大数据技术领域大事件,最早可追溯到06年Hadoop的正式启动,而环顾四下,围绕着数据库及数据处理引擎,业内充斥着各种各样的大数据技术。这是个技术人的好时代,仅数据库领域热门DB就有300+,围绕着Hadoop生态圈的大数据处理技术更是繁花似锦。在云栖社区2017在线技术峰会大数据技术峰会上,阿里云大数据计算平台架构师林伟做了题为《MaxCompute的大脑:基于代价的优化器》的分享,为大家分享阿里巴巴大数据计算服务的大脑——基于代价的优化器的设计和架构。

MaxCompute简介

大数据计算服务(MaxCompute)是一种快速、完全托管的PB/EB级数据仓库解决方案,MaxCompute具备万台服务器扩展能力和跨地域容灾能力,是阿里巴巴内部核心大数据平台,承担了集团内部绝大多数的计算任务,支撑每日百万级作业规模。MaxCompute向用户提供了完善的数据导入方案以及多种经典的分布式计算模型,能够更快速的解决用户海量数据计算问题,有效降低企业成本,并保障数据安全。

MaxCompute的研发思路主要分为以下四个方面:

高性能、低成本和大规模。希望打造的MaxCompute平台能够提运算的高性能,尽可能降低用户的使用成本,并且在规模上面能够达到万台机器以及多集群的规模。

稳定性,服务化。希望MaxCompute平台能够提供稳定性和服务化的方式,使得用户不用过多地考虑分布式应用的难度,而只需要注重于用户需要进行什么样的计算,让系统本身服务于用户,并能够提供稳定性,服务化的接口。

易用性,服务于数据开发者。希望MaxCompute平台是易用的,并且能够很方便地服务于数据开发工程师,不需要数据工程师对于分布式的场景进行很深的理解,而只要关注于需要用这些数据进行什么样的运算就可以,接下来就是由MaxCompute平台帮助数据开发工程师高效并且低成本地执行自己的想法。

多功能。希望MaxCompute能够具有更多的功能,不仅仅是支持流计算、图计算、批处理和机器学习等,而希望更多种类的计算能够在MaxCompute平台上得到更好的支持。

MaxCompute的大脑——优化器

基于以上的研发思路,MaxCompute平台需要拥有一个更加强大的大脑,这个大脑需要更加理解用户的数据,更加理解用户的计算,并且更加理解用户本身,MaxCompute的大脑需要能够帮助用户更加高效地优化运算,通过系统层面去理解用户到底需要进行什么样的运算,从而达到之前提到的各种目的,使得用户能够从分布式场景中脱离出来,不必去考虑如何才能使得运算高效地执行,而将这部分工作交给MaxCompute的大脑,让它来为用户提供更智能的平台,这也就是MaxCompute所能够为用户带来的价值。

那么MaxCompute的大脑究竟是什么呢?其实就是优化器。优化器能够将所有信息串联在一起,通过理解系统中数据的相关性以及用户的企图,并通过机器的能力去充分地分析各种各样的环境,在分布式场景中以最高效的方式实现对于用户运算的执行。在本次分享中以离线计算作为主要例子来对于MaxCompute的大脑——优化器进行介绍。

首先对于离线计算的概念进行简单介绍,MaxCompute离线计算架构设计如上图所示。在计算层面往往会存在一个类似高级语言的脚本语言,MaxCompute提供的是类SQL的脚本语言,将脚本语言通过FrontEnd提交进来,之后经过处理转化成为逻辑执行计划,逻辑执行计划在Optimizer(优化器)的指导下翻译成更加高效的物理执行计划,并通过与Runtime的连接之后由伏羲分布式调度系统将物理执行计划分解到运算节点上进行运算。

上述过程的核心就在于如何充分地理解用户的核心计划并通过优化得到高效的物理执行计划,这样的过程就叫做优化器Optimizer。目前开源社区内的Hive以及Spark的一些优化器基本上都是基于规则的优化器,其实对于优化器而言,单机系统上就存在这样的分类,分成了基于规则的优化器和基于代价的优化器。

全文点击:http://click.aliyun.com/m/13440/

时间: 2024-10-16 20:36:07

深入MaxCompute理解数据、运算和用户的大脑:基于代价的优化器的相关文章

CBO优化器实用理解

对于CBO的理解: RBO-----基于规则的优化器 CBO-----基于代价的优化器 CBO计算执行计划的代价(cost),并从中选择cost最低的执行方案,它依赖数据库对象的统计信息,统计信息的及时性和准确性都会影响CBO作出最优的决策,因为RBO死板的认定规则,对数据不敏感,规则是死的,数据是活的,而且数据具有变化性和时效性,所以RBO生成的执行计划是不准确的,不是最优的.CBO选择的执行计划是建立在统计信息的基础上,统计信息的及时性和准确性影响着CBO作出最优决策. CBO优化器根据SQ

Python 第2周 - Python基础-模块\数据运算

内容 模块初识 数据运算 bytes数据类型 python数据类型 列表的使用 元组与购物车操作 购物车程序练习 字符串常用操作 字典的使用 三级菜单实例 本周作业-购物车优化 一.模块初识 Python 库分两种:标准库(不需要安装,直接导入就可以直接使用的库).第三方库(必须安装才能使用如django).注意:编写代码时,模块名字不要跟库名字相同.系统自带模块简单举例:  sys库: 1.打印系统环境变量 sys.path: 1 import sys 2 print ("sys.path&q

大数据运算模型 MapReduce 原理

大数据运算模型 MapReduce 原理 2016-01-24 杜亦舒 MapReduce 是一个大数据集合的并行运算模型,由google提出,现在流行的hadoop中也使用了MapReduce作为计算模型 MapReduce 通俗解释 图书馆要清点图书数量,有10个书架,管理员为了加快统计速度,找来了10个同学,每个同学负责统计一个书架的图书数量 张同学 统计 书架1王同学 统计 书架2刘同学 统计 书架3...... 过了一会儿,10个同学陆续到管理员这汇报自己的统计数字,管理员把各个数字加

python修行之路(三 模块初识及数据运算类型)

在python修行路上,果不其然的遇到了第一个困处,开始看不懂代码,开始出现理解苦难的现象,这是小白修行路上的正常现象.其实自己是很慌的,感觉很无助,能做的就是把自己学的慢慢记录下来,理一个自己的逻辑,尽量写清楚,写的通俗易懂,为与我类似的修行者做参考. 一.模块初识 Python的强大之处在于他有非常丰富和强大的标准库和第三方库,使用时安装调用就好,现在先象征性的学习2个简单的. sys模块--sys pass功能#!/usr/bin/env python# -*- coding: utf-8

python3基础3--数据类型--数据运算--表达式if -else-while-for

一.python3 数据类型 1.1 数字 例如:1,2,3,4等 1.2  int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647在64位系统上,整数的位数为64位,取值范围为-2**63-2**63-1,即-9223372036854775808-9223372036854775807 1.2.1 long(长整型) 跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但

7、包装类、System、Math、Arrays、大数据运算

基本类型封装 基本数据类型对象包装类概述 *A:基本数据类型对象包装类概述 *a.基本类型包装类的产生 在实际程序使用中,程序界面上用户输入的数据都是以字符串类型进行存储的.而程序开发中,我们需要把字符串数据,根据需求转换成指定的基本数据类型,如年龄需要转换成int类型,考试成绩需要转换成double类型等 *b.八种基本类型对应的包装类 char Character int Integer byte Byte short Short long Long float Float double D

使用Stack堆栈集合大数据运算

使用Stack堆栈集合大数据运算 package com.sta.to; import java.util.Iterator; import java.util.Stack; public class DaMax { public void jiaFa(String value1, String value2) { /** * 更多资料欢迎浏览凯哥学堂官网:http://kaige123.com * @author 小沫 */ // 把字符串用toCharArray拆成字符 char[] c1

PHP 基于laravel框架获取微博数据之二 用户数据的使用

开始抓取微博数据的时候,只是想获得一条热门微博下的所有评论,因为里面有不少图片广告,所以想试试能不能分析出热门微博评论里的异常用户. 使用PHP的Laravel框架后,通过队列.命令等各种功能,最后构架了一套完整的微博用户数据抓取平台,经过一段时间的运行积累了大量数据,那么使用这些数据能做什么呢? 微博数据分析很早就有人在做了,网上采集分析工具貌似有很多,搜索一下想找一些微博数据分析的具体方案.世事变幻,发现很多几年前的微博数据分析平台都不能用了,可能微博数据分析和微博一样在商业上还是没有什么更

数据运算

数据运算: + - * / % ** // 取整数,返回商的整数部分,如9/2输出结果4,9.0/2.0输出结果4.0 >>> 9//24>>> 9.0//2.04.0>>> 9.0//2.53.0>>> 9.0//2.43.0>>> 9.0//2.33.0>>> 9.0//2.24.0>>> 9.0//2.14.0>>> ==!=  <>>&l