我们知道数据分析的第一步是准备数据,所以在前面的课程里,我们介绍了元数据。今天这篇文章,主要介绍大数据量组合数据集在永洪中的应用实例:Mapsidejoin。

什么是Mapsidejoin?按照字面意思,Mapsidejoin就是M—节点—组合 。在了解Mapsidejoin之前,首先我们要了解一下MapReduce模型以及产品的四个节点CNMR的作用,通过MapReduce模型中,Mapsidejoin和Reducesidejoin的对比,了解在大数据量数据集进行组合时,Mapsidejoin的优点。

Yonghong中集群节点介绍

Client Node —C节点是客户端访问节点,客户通过访问C节点来提交任务。

Naming Node —N节点相当于集群的大脑,除了监控集群其他节点外,还要收集客户通过C节点提交的任务进行分配等等。

Map Node — M节点是存储数据文件的节点

Reduce Node —R节点是用来做汇总计算的计算

MapReduce模型介绍

百度百科对MapReduce的定义感觉还是比较全面的,简单的概括一下:MapReduce是一个基于集群的计算平台,是一个简化分布式编程的计算框架,是一个将分布式计算抽象为Map和Reduce两个阶段的编程模型。而Yonghong在进行组合数据集计算时用到的就是MapReduce模型。

适用场景:多M节点的分布式集群,大数据量数据的组合包括大表join小表,大表join大表。

1、为什么要使用Mapsidejoin
在MapReduce模型中,对于组合计算可以分为Map-side-join 和Reduce-side-join两种,下面用一个例子简单介绍一下:

假设我们有两张表:表1人员表为大表,表2地区表为小表,如下图所示:

我们想通过id把表1的name和表2的Address连接起来 ,那么就需要以id为连接列,做inner join, 连接对应的id为id=1,id=2,id=3,id=4。

假如现在我们的集群里面有Map1和Map2两个Map节点,那么当我们将表1和表2入集市以后,经过数据的拆分存储,我们可能会出现以下情况:

► 情况1:可以进行Mapsidejoin

如上图所示,经过拆分后的表1和表2,连接列id=1-4 对应的数据存放在了同一个节点,在join时,Map节点会检测连接列数据是否已经完成对应,如果此时数据对应后就可以在Map节点上进行join,Map节点将join后的结果发送给Reduce节点,Reduce节点将结果进行汇总计算就可以了。

► 情况2:不能进行Mapsidejoin时会进行Reducesidejoin

上图所示, 经过拆分存储后的数据显示表1的id1,2存放在了Map1节点;而表2的id1,2 存放在了Map2 节点上面;这个时候在join时Map节点检测到对应的数据不在同一个节点上,就会将所有的数据拿到Reduce节点重新进行全量的join。

以上两种情况简单的说明了Mapsidejoin 和 Reducesidejoin。

2、Mapsidejoin和Reducesidejoin的优点

Map端join的好处是可以提前过滤掉join中需要排除的大量数据,会减少数据的传输,因此Mapsidejoin 适用于大数据量join的场景。
Reduce端做join优点是比较灵活,缺点是需要做大量数据传输和整个join过程都比较耗时,因此Reducesidejoin适用于小数据量的场景。
此外, 由于当数据量巨大时,做join是非常消耗资源的,对于非Mapsidejoin的形式,无论是直连数据库压到数据库做join,还是数据集市的形式去做Reducesidejoin,都会对节点造成极大压力,容易造成产品很卡的情况,再严重就会造成OOM,宕机等。所以我们需要使用Mapsidejoin来规避这种场景, 当数据量大的时候,我们可以部署多个M节点,通过将数据先导入集市,存放在集群中的多个M节点,然后在M节点上面进行计算来实现Mapsidejoin,这样能把C,R节点的压力平均分到M节点上面,解决大数据量join可能带来的使用压力,让资源的利用更加高效。

那么我们怎么实现Mapsidejoin呢 ?如何保证数据经过拆分后,连接列对应的数据一定存放在同一个Map节点上面呢?下面介绍永洪Mapsidejoin的两种实现方式。

永洪Mapsidejoin的两种形式

事实表——维度表

适用场景(大表join小表)

在分布式系统中,当有星形数据(一个大表,若干个小表)需要join的时候,可以将小表的数据复制到每个Map节点,执行Mapsidejoin, 而无须到Reduce节点进行连接操作,从而提升表连接的效率。

在MPP集市中,我们将大表以普通的增量导入形式入集市,将所有小表在增量导入时勾选维度表的形式,如下图所示:

此时勾选维度表的小表会全量生成在每一个Map节点。

以上面表1人员表,表2地区表的为例:表1增量导入正常拆分,表2以增量导入维度表形式入集市。

如图所示,此时在每一个M节点上,因为表2全量存储,所以表1和表2对应的id数据就一定能在同一个M节点找到。

但是事实表——维度表的形式也有局限性,比如两个以上的大表做join时,就需要将其中的一个或多个大表,存放到每一个M节点上,大数据量的大表进行维度表存储本来就会加大资源消耗,而且大表作为维度表,无法压到内存中进行计算,因此无法使用Mapsidejoin。

所以针对这种情况,我们采取分片列来支持大表join大表的使用场景。

分片列

适用场景(大表join大表)

在8.5.1版本之前,我们只能用维度表join事实表的形式去做Mapsidejoin,在一些用户场景中,无法提前进行数据表关联做成宽表模型入集市,同时也不满足Mapsidejoin(或broadcast join)计算的要求,因此需要在集市中做分布式join的计算支持。

具体场景有:

1)业务上需要,比如:部分汇总后再进行关联,某时间段内产品销售额大于特定值时的产品报修批次分布;特定值进行关联,选择某个时间段里面最后出现的数据和另外的表关联;自关联,本月数据和上月数据关联计算等等;这些场景下(一般是雪花模型或更复杂)如果提前join会导致数据膨胀,从而产生非常多的冗余数据,但实际使用时因为有过滤条件则不会产生太多数据;

2)数据量较大的事实表需要频繁增量更新,且全量数据join成宽表入集市的时间开销太大;

3)自服务场景下,是否要关联表,以及关联什么字段存在不确定性,需要保留原始细节表来进行自助查询。

分片列的Mapsidejoin实现逻辑其实和上面情况1的图片类似。

我们通过增量导入分片列的形式将表1和表2的关联列使用hash算法,保证两张表的id对应的数据经过拆分后一定会存储在同一个Map节点上面,这样经过拆分的大表就可以压到内存中计算。

操作步骤:

1、将需要组合的大表以增量导入的形式入集市,同时需要勾选分片列属性,选择分片列为链接列。比如表1在增量导入集市时要勾选分片列为id ,表2也需要同样的操作。

2、将生成的数据集市数据集进行组合,Map节点在检测数据时会自动使用Mapsidejoin形式连接。

小结

一定要记住使用Mapsidejoin的前提是分布式集群多M节点且大数据量数据集市的数据集做join。

最后我们用一张图片来简单的回顾一下Mapsidejoin的两种形式。

大表join大表用分片列
大表join小表用事实表——维度表

以上就是我们对于Mapsidejoin的应用介绍。

数据集干货:一文读懂Mapsidejoin相关推荐

  1. 汇总同一时间段的数据_数据集干货:一文读懂Mapsidejoin

    我们知道数据分析的第一步是准备数据,所以在前面的课程里,我们介绍了元数据.今天这篇文章,主要介绍大数据量组合数据集在永洪中的应用实例:Mapsidejoin. 什么是Mapsidejoin?按照字面意 ...

  2. 干货|一文读懂 Spring Data Jpa!

    有很多读者留言希望松哥能好好聊聊 Spring Data Jpa!其实这个话题松哥以前零零散散的介绍过,在我的书里也有介绍过,但是在公众号中还没和大伙聊过,因此本文就和大家来仔细聊聊 Spring D ...

  3. 干货|一文读懂中国7大支付体系(附27页流程图)

    https://www.sohu.com/a/113516411_468675 作者|金融监管研究院资深研究员 AHan:孙海波,欢迎个人转发,谢绝媒体等第三方转载. 前言 支付体系主要由支付工具.支 ...

  4. 干货 | 一文读懂数据分析

    文章目录 一.常用数据分析 二.产品运营分析 三.市场分析 四.流量分析 五.电商和销售分析 六.其他 一.常用数据分析 产品运营分析:以移动端APP为主体,以AAARR模型为主,包括Acquisit ...

  5. 技术干货 | 一文读懂GPU显卡10个重要参数

    作为平行世界的核心算力基础,GPU支持 3D 高速图形渲染.超高清视频编解码和高性能科学计算等组合工作负载,理解其性能与生态的发展至关重要. GPU显卡经常以下图形式(以NVIDIA几种显卡为列)这种 ...

  6. 腾讯资深架构师干货总结:一文读懂大型分布式系统设计的方方面面

    1.引言 我们常常会听说,某个互联网应用的服务器端系统多么牛逼,比如QQ.微信.淘宝.那么,一个大型互联网应用的服务器端系统,到底牛逼在什么地方?为什么海量的用户访问,会让一个服务器端系统变得更复杂? ...

  7. 量子计算机芯片的制造过程,全干货!一文读懂芯片制造及量子芯片!

    原标题:全干货!一文读懂芯片制造及量子芯片! 最近两个月,因为一系列事情,大家对国内芯片产业的关注度日益增加. 那么,什么是芯片?如何制造芯片?涉及到多少高科技?目前的芯片产业将会有哪些挑战? 在这里 ...

  8. stata 将数据集变量名称导出_一文读懂空间计量经济学及stata操作

    在Stata 15中,推出了最新的空间计量官方命令,均以sp开头,表示 spatial data),可以处理横截面与面板形式的空间数据.本文主要为大家介绍空间计量命令之spregress的使用. 一. ...

  9. 你真的懂数据分析吗?一文读懂数据分析的流程、基本方法和实践

    导读:无论你的工作内容是什么,掌握一定的数据分析能力,都可以帮你更好的认识世界,更好的提升工作效率.数据分析除了包含传统意义上的统计分析之外,也包含寻找有效特征.进行机器学习建模的过程,以及探索数据价 ...

最新文章

  1. 泛亚凭借一粒薏米-农业大健康·田亚:对话农民丰收节交易会
  2. java类的结构:构造器 —(13)
  3. 一步步编写操作系统 22 硬盘操作方法
  4. c语言枚举常量,浅述C语言中枚举enum的用法
  5. 余承东回应“卸任”传闻:服务还未拼尽全力,岂敢先溜
  6. mysql amp;amp;_浅析mysql交互式连接amp;非交互式连接
  7. Python 学习资源汇总
  8. 计算机基础(2)——重装系统(2)——win10(1)——MediaCreationTool制作WIN10安装U盘,安装纯净版win10的通用教程
  9. 第十一章 软件能力成熟度模型
  10. python 操作微信 群发_python实现给微信公众号发送消息的方法
  11. java applet插件_Atitit.java的浏览器插件技术 Applet japplet attilax总结
  12. 白细胞膜囊泡包裹在金纳米粒表面|DNA纳米结构的细胞膜囊泡|靶向细胞膜的多肽药物外泌体纳米载药
  13. 信道容量 Channel capacity
  14. MATLAB 快速标注序列日期
  15. java程序的开发步骤,全套教学资料
  16. 消息 无法为JSP编译类:org.apache.jasper.JasperException
  17. STM32开发实例 基于STM32单片机的畜牧大棚监测系统
  18. UG12软件使用配置
  19. Raspberry Pi 3 Model B+ (树莓派3B+)快速上手
  20. Java代码调用阿里人脸比对接口

热门文章

  1. 大数据时代的“找油利器”
  2. MySQL 性能 细节 考量 (更新中......)
  3. 进入保护模式(四)设置一些公用的方法
  4. window系统JAVA开发环境的搭建
  5. 电子政务“云”成大势
  6. (转)Java中的private、protected、public和default的区别
  7. [老老实实学WCF] 第二篇 配置WCF
  8. MapReduce 计数器简介
  9. HornetQ之JMS2.0 (实例讲解)
  10. 用MDT 2012为企业部署windows 7(十一)--抓取标准模板机镜像