MaxCompute复杂数据分布的查询优化实践

摘要: 2017年中国大数据技术大会于12月7-9日在北京新云南皇冠假日酒店隆重举行, 大会就大数据时代社会各行业的智能化进程和行业实践展开深入讨论。 在12月8日的“大数据分析与生态系统”分论坛上,来自阿里巴巴计算平台事业部的高级技术专家少杰,以“MaxCompute 复杂数据分布的查询优化实践”为题,为现场来宾分享了阿里云MaxCompute最新技术与实践的洞察与经验。

2017年中国大数据技术大会于12月7-9日在北京新云南皇冠假日酒店隆重举行, 大会就大数据时代社会各行业的智能化进程和行业实践展开深入讨论。

在12月8日的“大数据分析与生态系统”分论坛上,来自阿里巴巴计算平台事业部的高级技术专家少杰,以“MaxCompute 复杂数据分布的查询优化实践”为题,为现场来宾分享了阿里云MaxCompute最新技术与实践的洞察与经验。
图片描述

概述
数据分布的问题在大数据处理领域由来已久。很不幸,如今流行的大数据处理系统仍然没有很好地解决这个问题。在MaxCompute 2.0全新的优化器中,我们引入了复杂数据分布,添加了分区剪枝、分布上拉、下推以及分布对齐等优化措施。本文将从数据分布的历史和原理开始,介绍我们的思路和解决办法。

理解数据分布
提到数据分布,很多人会想到MPP DBMS。的确,我们通常说只有MPP DBMS才需要考虑数据分布优化。先考虑一个流行的分布式数据库分类学:

Shared Everything: 区别于后两类,这一类基本不是分布式的。
Shared Disk: 数据库服务器可以横向扩展,他们本身没有存储器,通过SAN或NAS技术连接到后端同样可以横向扩展的统一存储。受限于这层网络连接,数据库服务器的扩展能力非常有限。Oracle RAC等商业分布式数据库属于这类。
Shared Nothing: 区别于Shared Disk,这种架构让数据库服务器和存储落在相同的物理节点上(co-located),使得物理节点之间不share任何信息,这大幅减少了网络IO。MPP DBMS和Hadoop属于这类。
图片描述
显然,只有Shared Nothing的数据库才需要考虑数据分布,你需要预知怎样把数据分布到不同的物理节点(而不是像Shared Disk那样放在统一存储),会使后续的操作代价更小。例如,在Greenplum中,必须在建表时指定partition key,系统会按照指定的key(哈希)分布数据。如果Join的两张表都按照join key来partition,这个Join就不需要网络IO。如果其中一张表使用了另一组partition key,那么可能要做一次re-partition。
这就是为什么要理解数据分布的原因:它对应用优化和系统优化都是非常重要的。MPP DBMS在数据分布上都有比较深的积累。但是为什么Hadoop这种大数据处理系统没有这类优化?是因为他们需要更强的扩展能力(以及非结构化数据支持,我们不展开这个话题)。
区别于MPP,Hadoop并不是在物理上强制数据和计算在相同节点,如果这么做,系统的横向扩展能力仍然受限。特别是动态扩展能力,考虑正在运行的一个50个节点的Greenplum集群,我们基本无法做到快速地加入例如2个节点还能高效工作。Hadoop在这方面是很在行的,它的解决办法主要是:
1、存储计算分离
2、去中心化的设计支持高效的peer to peer读写(HDFS)
这就是为什么你在Hive中创建一张表时,无须像Greenplum中那样指定partition key,同时Hive在Join的效率低于Greenplum的原因。

数据分布优化的目的
如上文所述,大数据分布式系统在存储系统上通常倾向随机分布,这提升了扩展性,牺牲了性能。但是重新审视这个权衡,在存储系统上随机分布并不意味着我们不能利用数据分布优化查询。分布优化的目的是希望尽可能的利用已经存在的分布,并尽可能满足未来要求的分布。这种优化包括:

1、分区剪枝:利用数据分布特性,我们可以做分区剪枝来减少数据读取。例如,哈希分布对于点查询,范围分布对于区间查询可以应用分区剪枝。
2、消除重分布:如果当前的分布满足后续算法的要求,我们可以消除额外的重分布操作。众所周知,重分布(在Hadoop中叫做shuffle)是分布式算法最主要的消耗。
3、避免数据倾斜:可以使用更好的数据分布算法避免数据倾斜。例如,某些单值重复率很高(end-biased)的数据集,使用范围分布而不是哈希分布可能会有效避免数据倾斜带来的性能影响。

定义
数据分布类型
数据分布类型和对应的意义和范例如下所示:
图片描述
图片描述

实现
在不破坏Volcano优化器语义的前提下,我们把分布特性实现为一种physical property,称作distribution。和其他property一样,它有required property和delivered property成对的属性。例如,对于sorted merge join,它对所有输入会施加一个Partial Ordered的required property,同时自身会deliver一个Partial Ordered property,这使得它的后继操作有机会利用这个property,避免一次重新分布。考虑以下查询:
图片描述

此时Join如果被实现为Sorted Merge Join,它可能会deliver一个Hash[uid]的property,这正好被Aggregate要求,那么这里我们就可以省去一次不必要的重分布操作。
要做到类似的优化效果,我们需要关注下列问题:
1、收集分布特性
2、(局部关系代数编译)选择合适的分布特性
3、(全部代价计算上)规避不合适的分布特性
收集分布特性
产生数据分布有3种途径:
1、用户指定:就像MPP那样,可以在DDL中引入partition key,允许用户指定数据分布。当然区别于MPP,这种分布仅要求在分布式文件系统上的目录结构,并不能关联具体的物理节点。
2、SQL逻辑:SQL逻辑可能产生一次运行时的数据分布。例如distribute by字句声明了一次运行时的数据分布。
3、算法的副作用:每个分布式算法可能产生一次运行时数据分布。例如,sorted merge join可以保证它的输出数据满足按join key的有序和哈希分布的特征。

有若干算法要求一种特殊的数据分布:
1、Aggregate:Sorted Aggregate要求grouping key的Hash分布。
2、Join:Sorted Merge Join和Hash Join都要求输入按照join key的相同Hash分布。
3、Sort:Order by要求sort key上的Range分布,或Singleton分布。
选择合适的分布特性
即使给定了一系列required和delivered distribution property, 确定某个操作的分布仍然不是容易的事情。区别于ordering property(仅有排序列和升降序的属性),distribution property的变化很多,这些变化的原因包括:
1、满足要求的分布有多种选择。例如group by a, b, c这个aggregate,对输入有按a, b, c的Partial Ordered的要求,它对ordering的要求是a, b, c有序,但是满足它的分布可以是Hash(a), Hash(b), Hash(a,b), Hash(a,b,c), RNG(a)等不同的组合。
2、能利用的实现分布有多种选择。例如join a and b on a.id = b.id这个join,如果a服从Hashid, b服从Hashid,对于Sorted Merge Join,它可以选择要求Hashid,或Hashid,甚至任意Hash(id)。
这些复杂度加大了最优计划的搜索空间。事实上,最优计划是相对于关系代数数量的一个NPC问题。为了缩小搜索空间,我们引入了启发式的分支选择算法。在编译一个关系代数时,不仅需要满足后继操作的要求,还要考虑前序操作提供满足的分布的可能性,后者被实现为称作Pulled Up Property的模块。

图片描述

Pulled Up Property猜测并筛选可能的前序delivered property,用于在编译时减少搜索宽度。考虑上图的查询,在Join编译时,因为Sink的需求下推,它被要求提供一个Hashc1。Pulled Up Property则从前序操作猜测可能会提供Hashc1和Hashc1,综合考虑,Join可能会直接要求Hashc1,从而减少了Hashc1和Hashc1这两个分支。

规避不合适的分布特性
数据倾斜(Skew)是指在分布中少量节点被分配了大部分数据,导致整个算法退化为单机操作。低并发(Under Partition)是指分布指定了过少的节点,是的分布式资源不能被有效利用。我们希望能避免这两种情况。
很显然,更好的统计信息会帮助我们规避这两种情况。Skew和Under Partition的情况下,需要对代价估计做相应的惩罚,降低他们被选为最优计划的可能性。我们定义”好”的分布是每个节点处理的数据量在一个预设的范围,低于或高于这个范围都会被施加惩罚。估计这个数据量的依据包括:
1、输入数据记录数(row count)
2、重复度最高的数据(top values)
3、直方图(histogram)

总结
在这篇文章中,我们介绍了数据分布优化的问题和意义,并解释了MaxCompute在数据分布优化上的实践。这一优化效果已经体现在MaxCompute最新的发布中。
从我们的测试来看,这个优化有相当显著的效果。我们对TPC-H进行了适当分区后,整体性能提升在20%的量级。即使没有对表数据分区,对用户完全透明的运行时分区优化也有很好的效果。在我们线上运行的环境中,14%的查询因为这个优化减少了至少一次数据重分布。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/523201.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 主机信息 总览

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…

这项技术,风头正劲,BAT要力捧!程序员:我彻底慌了...

人工智能离我们还遥远吗?近日,海底捞斥资1.5亿打造了中国首家火锅无人餐厅;阿里酝酿了两年之久的全球首家无人酒店也正式开始运营,百度无人车彻底量产。李彦宏称,这是中国第一款能够量产的无人驾驶乘用车。而阿里的这家…

joi模块验证日期格式_python datetime模块详解

一、datetime模块介绍通过print(dir(datetime)),我们可以看到模块内属性和类:[MAXYEAR, MINYEAR, __builtins__, __cached__, __doc__, __file__, __loader__, __name__, __package__, __spec__, date, datetime, datetime_CAPI, sys, time, timedelta, …

AliOS Things 基于组件化思想的多bin特性

摘要: 今年杭州云栖大会上,AliOS Things正式发布,其中有一个基于组件化思想的多bin特性,这是AliOS Things有专利保护的多bin fota升级解决方案的核心 今年杭州云栖大会上,AliOS Things正式发布,其中有一个基…

数据库风云:老骥伏枥,新秀辈出

戳蓝字“CSDN云计算”关注我们哦!作者:姜洪军“在数据库技术方面,亚马逊落后甲骨文10至20年”。2018年10月23日,甲骨文(Oracle)创始人、执行董事长拉里埃里森,在甲骨文举办的一次大会的主题演讲…

解读阿里云oss-android/ios-sdk 断点续传(多线程)

摘要: oss sdk 断点续传功能使用及其相关原理 前言 移动端现状 随着移动端设备的硬件水平的不断提高,如今的cpu,内存等方面都大大的超过了一般的pc电脑,因此在现今的程序中,合理的使用多线程去完成一些事情是非常有必…

云钻还在吗 苏宁怎么解除实名认证_快手7天怎么养号,5步简易养号方案送上

今天我们聊一聊,新注册的快手号,7天怎么养号?为什么要养号?什么情况下需要养号?一般来说,新账号、播放量不高、很少热门、违规等情况,都需要养号。养号有什么作用?养号的作用很多&am…

将html表格导出到excel表格,table2excel-将HTML表格内容导出到Excel中_html/css_WEB-ITnose...

简要教程jquery-table2excel是一款可以将HTML表格的内容导出到微软Excel电子表格中的jQuery插件。该插件可以根据你的需要导出表格中的内容,不需要的行可以不导出。它文件体积小,使用非常方便。注意导出的Excel文件的格式,默认导出为.xlsx格式…

RDS读写分离,海量数据一键搞定

简介 RDS为用户提供高透明,高可用,高性能,高灵活的读写分离服务。在最近的版本我们基于短连接的用户进行了优化,使得短连接的用户负载均衡更加完善合理。RDS读写分离有如下特性: 易用/透明性 用户只需要在原来的只读…

7 行代码优雅地实现 Excel 文件导出功能?

文章目录一、前言二、Apache poi、jxl 的缺陷三、阿里出品的 EasyExcel,安利一波四、EasyExcel 解决了什么五、快速上手5.1 添加依赖5.2 七行代码搞定 Excel 生成六、特殊场景支持七、Web 下载示例代码八、需要注意的点九、总结一、前言 关于导出 Excel 文件&#…

Docker精华问答 | 用dockerfile制作镜像

Docker 是个划时代的开源项目,它彻底释放了计算虚拟化的威力,极大提高了应用的维护效率,降低了云计算应用开发的成本!使用 Docker,可以让应用的部署、测试和分发都变得前所未有的高效和轻松!1Q:…

日志服务Flink Connector《支持Exactly Once》

摘要: Flink log connector是阿里云日志服务推出的,用于对接Flink的工具,包含两块,分别是消费者和生产者,消费者用于从日志服务中读数据,支持exactly once语义,生产者用于将数据写到日志服务中&…

两个瓶子水怎样一样多_同事每天比我多睡两个小时!省下70万买了地铁站附近房子 杭州姑娘却感叹买房时一定是脑子进了水……...

都市快报讯 你上下班路上要多久?这个问题最近引起网友热议。 昨天,杭州市城乡建设发展研究院发布11月份城区交通运行分析:从上个月起,杭州的交通运行已经开启“冬季模式”,晚高峰出行进一步集中,拥堵程度环…

为什么电路交换不适合计算机网络,电路交换技术不适合计算机数据通信

5.2 分组交换原理上一节介绍了计算机网络的组成和网络的体系结构,其中通信子网的基本任务就是将数据信息从源点传送到S的点,在源点与目的点之间可能要经过许多个链路和中继节点。链路的功能是传输,而中继节点的功能是交换,也就是从…

Kibana:数据分析的可视化利器

摘要: 阿里云Elastisearch集成了可视化工具Kibana,用户可以使用Kibana的开发工具便捷的查询和分析存储在Elastisearch中的数据。除了柱状图、线状图、饼图、环形图等经典可视化功能外,还拥有地理位置分析、数据图谱分析、时序数据分析等高级功…

Kubernetes监控在小米的落地

戳蓝字“CSDN云计算”关注我们哦!转自:小米云技术作者:郭如意本文介绍了高可用、持久存储、可动态调整的Kubernetes监控方案的实现过程。小米的弹性调度平台(Ocean)以及容器平台主要基于开源容器自动化管理平台kuberne…

智能机器人建房子后房价走势_深圳建二手房价引导制度,学习长沙意图明显,距离稳准狠差点意思...

#深圳建二手房价引导制度#大家好,我是勇谈。9月17日,深圳市司法局就《深圳市房地产市场监管办法(修订征求意见稿)》公开征求意见。《征求意见稿》共九章108条。对于修订监管办法的必要性,深圳市司法局也给出了自己的答案“《办法》的相关规定…

idea解决maven pom依赖下载失败

流程1 第一步:打开cmd窗口,进入repository本地仓库 执行命令: 进入本地仓库: cd %userprofile%\.m2\repository第二步:执行以下命令: for /r %i in (*.lastUpdated) do del %i流程2 mvn -U idea:idea

6位技术大咖11月倾心巨献,大数据+安全主题的技术分享合集【阿里云MVP 干货集锦】...

摘要: 大家好,阿里云 MVP 11月大数据安全主题分享新鲜出炉,快来一睹为快吧!哪些MVP的分享最吸引你,你最想支持哪个MVP? 我们将开启为期一周的最人气内容评选,我们将在MVP评论内容下抽取评论最佳…

淤泥管道机器人_丛台区设备管道清洗超高效率

丛台区设备管道清洗超高效率后,施工前对施工人员安全措施安排完毕后,对检查井内剩余的砖、石、部分淤泥等残留物进行人工清理,直到清理完毕为止。  CCTV管道检测是指管道闭路电视检测系统可以实现排水管道的内窥检测工作:可以检…