`
jewel0516
  • 浏览: 12364 次
  • 性别: Icon_minigender_2
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

阿里云大数据利器Maxcompute-使用mapjoin优化查询

 
阅读更多

大数据计算服务(MaxCompute,原名 ODPS)是一种快速、完全托管的 GB/TB/PB 级数据仓库解决方案。
https://help.aliyun.com/document_detail/27800.html?spm=5176.7840267.6.539.po3IvS
主要有三种操作数据的方式SQL,UDF,MapReduce,了解hadoop的同学就比较熟悉这些东西了。

 那么Maxcompute的SQL和标准SQL最大的区别就是在Maxcompute中SQL会被解析成MapReduce去执行,当然也可以直接去写MapReduce去计算数据,UDF就是当自带的一些sql引用的函数不能满足业务计算的时候,自己通过代码编写一个函数,sql执行的时候引用。

由此可见实际上底层的计算都是依靠MapReduce这个计算引擎去执行。首先了解下什么是MapReduce。一份数据很大的时候在MaxCompute上是分布式存储的,也就是会分开存放到很多服务器,当一个任务执行的时候会从这些数据所在的服务器上启动一个进程读取这些数据,进行计算等操作,还会启动一个进程把这些数据进行汇总分析并输出。那前者进程叫做Map,后者进程叫做Reduce,合起来叫MapReduce任务。
使用sql操作数据的时候,会经常用到join。比如select * from A a join B b on a.id=b.id,这句sql在转换成MapReduce任务执行的时候:
1,map任务读数据,并对两个表的数据打上不同的tag用来区分
2,reduce端接收打标记的数据,将不同标记的表数据相同关联字段的数据放在一起输出
假设有两个表,我们暂且叫做Big表和Small表,其中Big表数据量比较大,分布式存在n台实例服务器上,Small表存在于一台服务器就放下了。
首先MaxCompute会启动一些Map的进程(Map任务)去读取这些数据分别打上标记,Map的个数是由一个参数控制的这里暂时不解释了。注意对于读取Big表的每个Map任务有可能在其他服务器上,那么这时候就需要到数据所在的服务器上把数据拉过来,Small表也会启动一个或者几个map任务读取文件系统中的数据,读取完成后会到Reduce端接收数据进行关联,判断关联字段相等的就放在一起输出,达到关联效果。
我们可以看一个例子,我准备了一个相对大的表train_user_lt,5G大小,数据大概7亿条。
准备了一个比较小的表map_join_test,只有3条数据。

select a.* from train_user_lt a left outer join map_join_test b on a.user_id = b.user_id;

执行了这句sql,如图
logview
这个执行的过程图是Maxcompute特有的可以帮助用户来查看任务执行的过程等叫做logview,是一个在ODPS Job提交后查看和Debug任务的工具https://help.aliyun.com/document_detail/27987.html
从图中可以看出分为三部分
1,大的表train_user_lt启动了39个map任务去读取数据707025259条
2,小的表启动一个map任务读取3条数据。
3,reduce阶段接收了3+707025259=707025262条数据,输出了707025259条数据,left outer join按照左边的大表输出。
但是看下消耗的时间是40分钟,这样来说算是很长的时间的。那么怎么优化提高速度呢,有没有一种比较方便,比较直接暴力的方式进行优化呢
那么本文的重点就来了--Mapjoin:
MAPJION会把小表全部读入内存中,把小表拷贝多份分发到大表数据所在实例上的内存里,在map阶段直接拿另外一个表的数据和内存中表数据做匹配,由于在map是进行了join操作,省去了reduce运行的效率会高很多。
使用的条件就是当一个大表和一个或多个小表做join时。SQL会将用户指定的小表全部加载到执行join操作的程序的内存中,从而加快join的执行速度。需要注意,在Maxcompute使用mapjoin时:
left outer join的左表必须是大表;
right outer join的右表必须是大表;
inner join左表或右表均可以作为大表;
full outer join不能使用mapjoin;
mapjoin支持小表为子查询;
使用mapjoin时需要引用小表或是子查询时,需要引用别名;
在mapjoin中,可以使用不等值连接或者使用or连接多个条件;
目前MaxCompute 在mapjoin中最多支持指定8张小表,否则报语法错误;
如果使用mapjoin,则所有小表占用的内存总和不得超过512MB。请注意由于MaxCompute 是压缩存储,因此小表在被加载到内存后,数据大小会急剧膨胀。此处的512MB限制是加载到内存后的空间大小;
多个表join时,最左边的两个表不能同时是mapjoin的表。
那么为什么说left outer join的左表必须是大表呢,
因为左表是大表的时候,会拿小表的全部数据和大表所在的实例服务器中的数据匹配一遍,刚好小表就在内存里。如果是左表是小表,那么需要把大表所有的数据拉过来跟小表匹配一遍,试想一下性能会如何。
来看下写法

select /* + mapjoin(b) */  a.* from train_user_lt a left outer join map_join_test b on a.user_id = b.user_id;
//就是在sql语句前加一个标记说这是mapjoin,把小表别名写在括号里

看下优化后的效果
222
任务变成了两个部分,map端直接读取数据和内存里的小表进行关联,然后输出,少了一步reduce。也就是说关联从reduce转到map端进行join,省去了reduce这一步,所以叫做:mapjoin。
看下执行时间1分钟20多秒。之前是40分钟。当然我这边测试是把两个比较极端的数据进行比较,所以效果比较明显。由此看来大表关联小表的时候可以使用mapjoin进行优化查询。
那么mapjoin除了优化性能,还可以干什么呢。
MaxCompute SQL不支持支持在普通join的on条件中使用不等值表达式、or ,like等逻辑等复杂的join条件,但是在mapjoin中可以进行如上操作。例如

    select /*+ mapjoin(a) */
        a.total_price,
        b.total_price
    from shop a join sale_detail b
    on a.total_price < b.total_price or a.total_price + b.total_price < 500;

总结:mapjoin看似很小的操作变化,实际上可以带来很大效率提升,另外还可以解决一些不等关联的业务场景。
正如马云经常说的一句话:
small is beautiful,small is powerful !

分享到:
评论

相关推荐

    大数据平台 MaxCompute 公有云多租户设计-4-4 百度点石联邦学习技术的应用与实践.zip

    在本资料中,我们主要探讨的是大数据平台MaxCompute在公有云环境下的多租户设计,以及百度点石联邦学习技术的应用与实践。MaxCompute作为阿里巴巴集团开发的分布式大数据处理平台,其多租户设计是确保云服务高效、...

    大数据解决方案-鹿豹座大数据解决方案优势.docx

    而传统企业则可以利用大数据作为转型升级的利器,适应互联网时代的新竞争态势,制定更加明智的商业策略。 鹿豹座大数据解决方案所提供的是一整套包括数据采集、预处理、存储、挖掘、建模到结果可视化等环节在内的...

    大数据 欧阳辰-实时大数据分析之利器Druid

    在当前的大数据环境下,实时分析已成为企业数据处理的核心需求之一。Druid,作为一款开源的实时分析数据存储系统,因其独特的架构和技术优势,逐渐...对于追求高性能实时分析的大数据环境,Druid无疑是一把“利器”。

    ArcGIS的大数据利器

    ArcGIS的大数据利器 ArcGIS的大数据利器 ArcGIS的大数据利器

    大数据-算法-在中职卫校数学教学中实施发展性学生评价的实验研究.pdf

    大数据与算法在教育领域中发挥着越来越重要的作用,尤其是在当前教育环境下,中职卫校数学教学的改革与创新中,这两者成为了提升教学质量的利器。本篇研究报告就大数据与算法在中职卫校数学教学中实施发展性学生评价...

    大数据利器2018版

    当下最流行的各类大数据、云计算开源资源列表,如:hadoop、spark、flink、hbase、redis等

    GITC 大数据

    大数据 欧阳辰-实时大数据分析之利器Druid.pdf 大数据 赵天烁_魅族大数据可视化平台建设之路.pdf 大数据 陈涛-喜马拉雅数据计算平台xql.pdf 大数据 高鹏 数据分析领域的黑马-ClickHouse-新浪-高鹏-2017年11月24...

    大数据-算法-潇潇风雨入秋多吐出胸中墨几何省略华书法空间构成分析和创作风格研究.pdf

    在数字时代的浪潮中,大数据与算法已成为剖析和解读各种现象的利器,即便是艺术这个看似与技术无缘的领域,也渐渐地被数据的波澜所触及。本文将探讨大数据技术与算法在艺术分析领域的应用,以及它们如何助力我们理解...

    直击智能时代大数据核心价值-视频教程网盘链接提取码下载 .txt

    大数据技术基础22讲,直击大数据核心价值,抓住智能时代掘金利器。串联起数据生产、数据收集 、数据传输、 数据存储、 数据挖掘 、数据分析、数据应用这条数据流转的链条,为你讲解大数据体系,共分 5 个模块,共 22...

    编程利器--ed

    【编程利器--ed】是一款强大的文本编辑工具,它在功能上超越了EdiPlus 3.0,成为了许多程序员和Web开发者的心头好。这款编辑器不仅具备了基础的文本编辑功能,还针对多种编程语言提供了丰富的支持,包括但不限于C/...

    徐老师大数据-ZooKeeper

    001.ZooKeeper简介.mp4、徐老师大数据-002.ZooKeeper下载与安装.mp4、徐老师大数据-003.ZooKeeper分布式集群配制与Leader宕机测试.mp4、徐老师大数据-004.ZooKeeper分布式集群配制与nc Linux命令的网络通信利器.mp4...

    hadoop大数据课件-足球大数据案例.pptx

    本课件“hadoop大数据课件-足球大数据案例”深入探讨了如何利用Hadoop等大数据技术来优化足球比赛的各个方面。以下是7种足球大数据应用的详细说明: 1. **比赛统计**:通过对比赛中的各种数据进行收集和分析,如控...

    hue-3.11大数据监控利器

    "hue-3.11大数据监控利器"这一标题暗示了Hue 3.11版本在大数据监控领域的显著作用,它可能包含了丰富的数据查询、分析和可视化功能,旨在提升大数据处理的效率和洞察力。 Hue 3.11是其发展中的一个重要里程碑,可能...

    hue-4.1大数据监控利器

    Hue是大数据生态系统中的一款重要工具,它为用户提供了友好的Web界面,用于交互式地查询、管理和监控Hadoop、Spark等大数据处理框架。Hue 4.1版本是该工具的一个稳定版本,提供了丰富的功能和改进,使得大数据监控变...

    hue-4.2大数据监控利器

    Hue是大数据生态系统中的一款重要工具,它为用户提供了友好的Web界面,用于交互式地查询、分析和管理Hadoop集群中的数据。Hue 4.2是其一个稳定版本,对于大数据监控和管理工作来说,是一个非常实用的利器。在这个...

    Arc GIS的 大数据 利器

    GIS和大数据是当今信息技术的两个非常重要的领域,它们在处理海量的时空信息方面有着广泛的应用。ArcGIS GeoAnalytics Server的推出,是ESRI公司为了满足日益增长的时空大数据分析需求而推出的强大工具,它结合了GIS...

    2021阿里云开发者大会演讲PPT汇总.zip

    2021阿里云开发者大会涵盖开发与运维、云原生、大数据、人工智能、数据库、低代码等领域,本资料供大家学习参考。 阿里云开发者大会主论坛: 云原生推动全云开发与实践 云上大数据与AI开发范式的演进 AIoT云端一体...

    vue-baidu-map,百度地图切图工具,瓦片图制作利器

    百度地图切图工具,瓦片图制作利器,结合vue-baidu-map制作瓦片图,可直接生成瓦片图内容,生成对应的瓦片图内容的HTML

    阿里云 专有云企业版 V3.7.1 大数据应用加速器DTBoost 产品简介 20190124.pdf

    阿里云专有云企业版V3.7.1大数据应用加速器DTBoost是企业级大数据处理的利器,通过其高性能、高扩展性和易用性,为企业提供了强大的数据处理加速能力,同时,严格的法律条款和通用约定保障了产品的安全和合规使用。

    ip-guard网络监控-管理利器--完美破解406用户[2

    ip-guard网络监控-管理利器--完美破解406用户[2

Global site tag (gtag.js) - Google Analytics