MaxCompute2.0索引优化实践

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 摘要:2017云栖大会阿里云大数据计算服务(MaxCompute)专场,阿里云高级专家戴谢宁带来MaxCompute的索引与优化实践分享。本文主要从MaxCompute数据模型开始谈起,接着分享了哈希分片和区域分片,着重分析了索引优化和join优化,并且列出了应用实例,最好作出了简要总结。

摘要:2017云栖大会阿里云大数据计算服务(MaxCompute)专场,阿里云高级专家戴谢宁带来MaxCompute的索引与优化实践分享。本文主要从MaxCompute数据模型开始谈起,接着分享了哈希分片和区域分片,着重分析了索引优化和join优化,并且列出了应用实例,最好作出了简要总结。

 

以下是精彩内容整理:

MaxCompute 除了是计算引擎之外,它也是个存储引擎,阿里巴巴99%数据都在这个平台上。那么,怎么去优化存储效率,从而提高计算效率是我们一直努力的目标。

ae437d4c9e1812f5b12f7a0d63130ad572227f75


MaxCompute的数据模型


1b5721b5098f6f0b94000f3970b428f75250d1f3

目前MaxCompute的数据模型包括:项目,表,分区。在分区下,分区下没有定义数据组织方式,数据无序存放。

那么,在分区下能否通过定义数据分片、排序和索引提高效率?答案是肯定的。

在MaxCompute2.0中,我们提供了两种切片方式,哈希分片和区域分片。

哈希分片 Hash Clustering

1f6f62d9790eddcf4f14e14a2071a164a760a8c3

哈希分片是指用户在创建table时,可以指定几个column作键值的链,MaxCompute可以按照这几个column做hash function,将hash value相同的record记录放到同一个分片中去,不同的颜色代表不同的record出来相同的hash值。同时,我们通过语法定义每一个切片数据是不是要有序存放,如果指定sorted by 子句,就会要求数据排序存放。这样就会呈现出两个效果,一是在每个file里建立index,一是在分片以上还有top level index,上层索引信息规定了表有多少个分片、哈希方式是什么、依据哪几个列,这些都可以帮助到我们后面的查询。

区域分片 Range Clustering

9f289c3c63be8c636fb69e594f3c45c953f82574

区域分片比哈希分片更加灵活高级,它的基本思想是指定区域分片的column后,语法为range clustered by ,MaxCompute根据column值域分布作全排序,根据值域分布按照合理方式进行切分,切分的原则包括分片大小、分片差异合理化,减少并行处理时遇到的种种数据问题。图中9个record,我们对其进行全排序,把它切到四个片上,同样也有个sorted by 的子句指定每个分片数据如何存放,有序存放会建立两个级别的索引,一是文件级别索引,一是上层索引,上层索引维护了每个分片,每个分片对应某个range和区间。

基于索引的查询优化

c7eb702becf22b5dbf013bf949349188dfe6478d

那么如何进行优化呢?例如id<3,如果id列刚好是我做的数据分片和排序索引,谓词会下推到存储层,利用谓词信息去做过滤信息,首先会到上层索引做一级索引,一级索引拥有所有分片的信息,id<3查询条件很快可以确定把bucket2和bucket3两个分片去掉;同时,我们还可以将谓词推到文件下面去,bucket1中有小于3和等于3的,还可以在文件内部进一步过滤,将数据量再减少,如果没有做数据分片index之前,对于id<3 懂得查询,需要去扫整个表,把所有数据全部读一遍,现在不需要读整个表,直接可以通过index把一大堆数直接去掉,效率也是非常可观的。

27f7955f57b1942eec2eea809071210e26fe1d54

图为TPC-H Q6查询,TPC-H是数据库和大数据领域的标准测试集,我们在100GB的测试数据集上拿到了数据,左边时间是使用index的时间,右边是没有使用index的时间,可以看到提升了10倍左右,无论是query的执行时间,还是CPU的使用时间和IO的使用时间,都会大大减少,通过index减少了很多IO操作,减少了很多数据装载。

Join优化

47c3a15a87f160f9b06e75236dafb08b33c602fa

除了在filter上应用index,还有对join的优化。Sort merge join是指有两个数据源在一个机器上将数据join完,一般是将数据源用哈希方式分到N个分片中去,保证join key相同的record会落到相同的分片上,每个分片内部对两个数据源进行排序,排序后再做merge join,就可以把key值相同的找出来,这个过程很复杂,也非常耗时,需要将数据进行哈希运算,再把数据传到另外一个机器上去,你需要先写在一个机器上,另外一个机器再从机器上读取,需要二次磁盘IO,这个过程叫做data shuffle。

099ed647610af2af8edd0763e26a4307cce31dc0

如图,两个table scan从数据磁盘加载进来,streaming read和streaming write来做data shuffle,如果数据已经做完分片和排序,并且把组织结构都存放在磁盘上面,在做join时就不需要再进行shuffle和排序过程,这就是join优化。演化如右图,如果M1和M2已经做了哈希分片排序,可以直接做如图执行计划。

TPC-H Q4

2eee52a2c0a5002a33502ffdd91109a667b9db43

没有哈希分片之前,执行计划如右边图中所示,共有7个stage,多个join和shuffle过程,如果把表改成哈希分片表,并且在join key上做哈希分片,只需要3个stage即可完成,简化了执行计划,基本上都提升了2倍效率。

应用实例

淘宝交易记录查询

82cd59a3f889236df4b3462b228c227db12aace2

淘宝交易量巨大,百亿级甚至千亿级的数据,查找单笔订单信息,这是一个大海捞针的操作。原有系统在改造以前执行如图,共有一千多个worker去扫描表,400多亿条记录,最后找到26条记录,共用1分48秒。

213a687bb9fa8398e7bb0248479f3887298c2e01

以id为主键,对表进行数据哈希切片排序,同样查询只需要4个mapper,扫描一万条记录6秒钟即可。

淘系交易表增量更新

e4ad0d16ad9363cdcc86d56dd97ee69624cc39c5

淘宝中有核心交易表,这是集团内部很多BU都会引用的数据来源,对它的正确性要求非常高。我们经常会有增量更新的操作,按周期性以增量表数据插入或者更新到原来表中,全量表数据量巨大,记录数在百亿、千亿,增量表可能是十分之一甚至百分之一,每次更新需要对原表和增量表进行shuffle,非常耗时。图中M1和M2在做增量表的shuffle和全量表的shuffle,增量表需要1分49秒,全量表共用2000个worker做了33分钟。

b8938e2adb9101aa956a514c84aa1c96336cffe3

全量表哈希分片后排序存储,更新时只需要按增量表shuffle,避免了对全量表的多次shuffle,整个join执行时间从60分钟降低到22分钟。

总结

我们通过对数据进行分片和排序,并建立索引,MaxCompute可以更好的理解数据。

查询条件谓词下推,减少了表扫描的IO量,以及运行时过滤操作的时间。

利用数据分片和排序特性,直接避免了多次对数据Shuffle的操作,简化了执行计划,节约资源,节省时间。


6c4b69af9fd1b465628b63fcee73224de0b62357


MaxCompute招聘信息:DT时代,与坚持梦想者同行!


阿里巴巴大数据-玩家社区 https://yq.aliyun.com/teams/6/

---阿里大数据博文,问答,社群,实践,有朋自远方来,不亦说乎……

bba01b493e1c5d904e882b1c380673c6ebe49a98

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
目录
相关文章
|
24天前
|
SQL 分布式计算 运维
如何对付一个耗时6h+的ODPS任务:慢节点优化实践
本文描述了大数据处理任务(特别是涉及大量JOIN操作的任务)中遇到的性能瓶颈问题及其优化过程。
|
2月前
|
分布式计算 搜索推荐 物联网
大数据及AI典型场景实践问题之通过KafKa+OTS+MaxCompute完成物联网系统技术重构如何解决
大数据及AI典型场景实践问题之通过KafKa+OTS+MaxCompute完成物联网系统技术重构如何解决
|
2月前
|
人工智能 分布式计算 架构师
大数据及AI典型场景实践问题之基于MaxCompute构建Noxmobi全球化精准营销系统如何解决
大数据及AI典型场景实践问题之基于MaxCompute构建Noxmobi全球化精准营销系统如何解决
|
2月前
|
SQL 监控 大数据
"解锁实时大数据处理新境界:Google Dataflow——构建高效、可扩展的实时数据管道实践"
【8月更文挑战第10天】随着大数据时代的发展,企业急需高效处理数据以实现即时响应。Google Dataflow作为Google Cloud Platform的强大服务,提供了一个完全托管的流处理与批处理方案。它采用Apache Beam编程模型,支持自动扩展、高可用性,并能与GCP服务无缝集成。例如,电商平台可通过Dataflow实时分析用户行为日志:首先利用Pub/Sub收集数据;接着构建管道处理并分析这些日志;最后将结果输出至BigQuery。Dataflow因此成为构建实时数据处理系统的理想选择,助力企业快速响应业务需求。
114 6
|
2月前
|
存储 分布式计算 数据处理
MaxCompute 的成本效益分析与优化策略
【8月更文第31天】随着云计算技术的发展,越来越多的企业选择将数据处理和分析任务迁移到云端。阿里云的 MaxCompute 是一款专为海量数据设计的大规模数据仓库平台,它不仅提供了强大的数据处理能力,还简化了数据管理的工作流程。然而,在享受这些便利的同时,企业也需要考虑如何有效地控制成本,确保资源得到最优利用。本文将探讨如何评估 MaxCompute 的使用成本,并提出一些优化策略以降低费用,提高资源利用率。
55 0
|
2月前
|
存储 运维 Cloud Native
"Flink+Paimon:阿里云大数据云原生运维数仓的创新实践,引领实时数据处理新纪元"
【8月更文挑战第2天】Flink+Paimon在阿里云大数据云原生运维数仓的实践
236 3
|
3月前
|
存储 搜索推荐 数据建模
阿里巴巴大数据实践之数据建模:构建企业级数据湖
阿里巴巴通过构建高效的数据湖和实施先进的数据建模策略,实现了数据驱动的业务增长。这些实践不仅提升了内部运营效率,也为客户提供了更好的服务体验。随着数据量的不断增长和技术的不断创新,阿里巴巴将持续优化其数据建模方法,以适应未来的变化和发展。
|
2月前
|
人工智能 分布式计算 大数据
大数据及AI典型场景实践问题之“开发者藏经阁计划”的定义如何解决
大数据及AI典型场景实践问题之“开发者藏经阁计划”的定义如何解决
|
2月前
|
大数据 RDMA
神龙大数据加速引擎MRACC问题之MRACC-Spark利用eRDMA近网络优化插件来提升性能如何解决
神龙大数据加速引擎MRACC问题之MRACC-Spark利用eRDMA近网络优化插件来提升性能如何解决
33 0
|
2月前
|
SQL 存储 分布式计算
神龙大数据加速引擎MRACC问题之RDMA技术帮助大数据分布式计算优化如何解决
神龙大数据加速引擎MRACC问题之RDMA技术帮助大数据分布式计算优化如何解决
28 0

热门文章

最新文章

相关产品

  • 云原生大数据计算服务 MaxCompute
  • 下一篇
    无影云桌面