当前位置: 首页 > 编程日记 > 正文

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

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

0f4a681d89dbe0d9478d037d4d26d075.png

什么是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地区表为小表,如下图所示:

bdedc733c9c7bbbbee790acc39171324.png

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

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

► 情况1:可以进行Mapsidejoin

090b8a0cdcc2b9e7152a35f37c42b8e4.png

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

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

c6ae83947b7fb62a297640307221b788.png

上图所示, 经过拆分存储后的数据显示表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集市中,我们将大表以普通的增量导入形式入集市,将所有小表在增量导入时勾选维度表的形式,如下图所示:

72fdbeb766bc24f8a9f6f02ef2412c4d.png

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

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

7427f7ccf02dc483a0863ccebcfcc20a.png

如图所示,此时在每一个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的图片类似。

090b8a0cdcc2b9e7152a35f37c42b8e4.png

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

操作步骤:

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

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

小结

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

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

046689cd589c7430dce3a4b9ebd6244c.png

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

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

相关文章:

【强烈推荐】国土档案管理信息系统产品使用说明书系列目录【附下载地址】...

<<国土档案管理信息系统>>产品使用说明书系列目录【附下载地址】——通过知识共享树立个人品牌。《国土档案管理信息系统》在线视频讲解一、记大型商业软件<<国土档案管理信息系统>>之系统简介记大型商业软件 > 之系统简介 ——通过知识共享树立个人…

zip函数的使用

s [[1, 10], [1.2, 11], [2, 5], [5, 15]] data zip(*s) x_list data[0] y_list data[1] x_min min(x_list) x_max max(x_list) y_min min(y_list) y_max max(y_list) box [x_min, x_max, y_min, y_max] print(box) # [1, 5, 5, 15] 转载于:https://www.cnblogs.com/…

计算机网络基础 1.0 -- 概述

概念理解 报文&#xff1a;在网络中发送的数据块成为报文在发送报文之前&#xff0c;通常会把数组分组&#xff0c;每个组都有个包头和数据组成&#xff0c;包头中包含了诸如目标地址和源地址等重要信息&#xff0c;这样才保证了数据能够有目的的在网络中的传输主机是用户用来…

字符串循环同构的最小表示法(转)

循环字符串的最小表示法的问题可以这样描述&#xff1a; 对于一个字符串S&#xff0c;求S的循环的同构字符串S’中字典序最小的一个。 由于语言能力有限&#xff0c;还是用实际例子来解释比较容易&#xff1a;设Sbcad&#xff0c;且S’是S的循环同构的串。S’可以是bcad或者cad…

周长相等的正方形面积一定相等_必考单元:三年级下册面积计算公式+知识点+测试卷(附答案),重点内容,收藏练习!...

《面积》公式 知识点面积和面积单位&#xff1a;1.常用的面积单位有&#xff1a;(平方厘米)、(平方分米)、(平方米)。2.理解面积的意义和面积单位的意义。面积&#xff1a;物体表面或封闭图形的大小&#xff0c;叫做它们的面积。1平方米&#xff1a;边长是1米的正方形&#xff…

sql server 2000 版本查询

确定已安装的 SQL Server 2000 Database Components 版本 使用 isql、osql 或查询分析器&#xff0c;对数据库引擎实例执行以下查询之一。 SELECT SERVERPROPERTY(ProductLevel) SELECT VERSION SELECT SERVERPROPERTY(Produc…

ubuntu16创建开机启动服务

1、cd /etc/init.d/ 2、sudo touch zookeeper&#xff08;举例&#xff09; 3、给服务赋权限&#xff1a;sudo chmod x zookeeper 4、执行sudo vim zookeeper 命令写入执行脚本&#xff08;启动脚本中的启动命令对应服务的启动命令&#xff09; #! /bin/sh### BEGIN INIT INFO …

Effective C++ 1.0 -- 概述

声明 对象声明&#xff0c;函数声明&#xff0c;类型声明&#xff0c;是告诉编译器某个东西的 名称和类型&#xff0c;但是略去了实现 细节&#xff0c;因为定义在其他的地方。 external int x; //对象&#xff08;object&#xff09;声明 std:size_t numDigits(int num…

寻找连通域算法_【车牌识别算法】

车牌识别技术要求能够将运动中的汽车牌照从复杂背景中提取并识别出来&#xff0c;通过车牌提取、图像预处理、特征提取、车牌字符识别等技术&#xff0c;识别车辆牌号、颜色等信息。目前车牌识别技术主要分为端到端识别与车牌分割识别两种识别算法。端对端识别技术端到端车牌识…

SQL 2005 删除带有默认值约束的列

在sqlserver 2005中要删除某一列: alter table [表名] drop column [列名] 但是如果该列被创建了默认值约束&#xff0c;我们就只能先删除默认值约束&#xff0c;然后才能删除该列。 第一种方法&#xff1a; 1、删除默认值约束: DECLARE name varchar(100) SELECT nameb.name F…

apple hosts

2019独角兽企业重金招聘Python工程师标准>>> #Apple #125.56.202.7 swcnd.apple.com 203.69.138.34 a1.phobos.apple.com 203.69.138.34 a2.phobos.apple.com 203.69.138.34 a3.phobos.apple.com 203.69.138.34 a4.phobos.apple.com 203.69.138.34 a5.phobos.apple.…

thymeleaf 的常见属性

转载于:https://www.cnblogs.com/hwgok/p/9637723.html

继承和多态 1.0 -- 继承概念(is-a、has-a,赋值兼容规则,隐藏重定义)

普通继承和访问权限 当一个继承没有虚拟继承或者是多重继承时&#xff0c;就是一个简单的继承的时候&#xff0c;这个时候就是一个普通的继承。 普通继承的内存空间是&#xff1a;子类的对象中&#xff0c;包含了父类的成员变量&#xff0c;同时也可以调用父类的成员函数&…

c++标准库 及 命名空间std

1、命名空间std  C标准中引入命名空间的概念&#xff0c;是为了解决不同模块或者函数库中相同标识符冲突的问题。有了命名空间的概念&#xff0c;标识符就被限制在特定的范围(函数)内&#xff0c;不会引起命名冲突。最典型的例子就是std命名空间&#xff0c;C标准库中所有标识…

aop point 只能获取到map嘛_面试被问了几百遍的 IoC 和 AOP ,还在傻傻搞不清楚?...

这篇文章会从下面从以下几个问题展开对 IoC & AOP 的解释什么是 IoC&#xff1f;IoC 解决了什么问题&#xff1f;IoC 和 DI 的区别&#xff1f;什么是 AOP&#xff1f;AOP 解决了什么问题&#xff1f;AOP 为什么叫做切面编程&#xff1f;首先声明&#xff1a;IoC & AOP…

HTML学习笔记_002_如何学习HTML

.htm 还是 .html 文件后缀&#xff1f; 当您保存 HTML 文件时&#xff0c;既可以使用 .htm 也可以使用 .html 文件后缀。我们在实例中使用 .htm。这只是长久以来形成的习惯而已&#xff0c;因为过去的很多软件只允许三个字母的文件后缀。 不过对于新的软件&#xff0c;使用 .ht…

设计1.0 -- iterator 和const_iterator底层的模拟实现

本文概要&#xff1a; 本文主要是模拟实现STL中迭代器和const迭代器的&#xff0c;主要阐述的一个问题就是&#xff0c;为什么我们在设计迭代器的时候需要使用三个模板参数呢 在设计迭代器的时候&#xff0c;我们有下面的代码 #include<iostream> using namespace std…

关于python缩进的描述中_关于Python程序中与“缩进”有关的说法中,以下选项中正确的是()...

关于Python程序中与“缩进”有关的说法中,以下选项中正确的是()答&#xff1a;缩进在程序中长度统一且强制使用同文学或同音乐主题的民歌&#xff0c;《_______》是其中之一。此曲经民间艺人丁喜才改编后&#xff0c;由上海音乐学院鞠秀芳于50年代在国际上唱红答&#xff1a;五…

使用Newtonsoft.Json

首先是前一段某博友对于循环引用的问题的解决&#xff1a;http://www.cnblogs.com/Gryzor/archive/2013/05/06/3062373.html 其次是时间到底是UTC还是Local的问题&#xff1a;http://www.cnblogs.com/leonwang/archive/2013/05/29/javascript-datetime.html 对于第二条&#xf…

回击质疑 HP StoreOnce用高性能说话

四五年以前&#xff0c;记者曾经两次参观过惠普位于英国西南部港口城市布里斯托尔的存储研究中心&#xff0c;那里是惠普数据备份和保护产品的大本营&#xff0c;同时也是惠普磁带产品与HP StoreOnce产品家族的诞生地。就在惠普刚刚发布升级版的HP StoreOnce B6200以及Catalyst…

windows10配置jenkins

1、下载pscp.exe并拷贝到c:\window\system32&#xff0c;此工具用于上传文件至linux服务器 下载地址&#xff1a;https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html 2、下载jenkins.war 下载地下&#xff1a;https://jenkins.io/download/ 3、设置环境变量JENKI…

STL模拟实现1.0 -- list和iterator模拟实现和简单分析

引言 C 标准模本库《STL》中有很多优秀的代码实现&#xff0c;不然怎么能叫做C标准模板库呢&#xff0c;其中一个实现就是有一个容器&#xff0c;叫做list。所谓容器其实就是存储相同类型数据的一个存储集合&#xff0c;list的底层实现其实就是一个链表。 我们的普通数组在使…

hdc mfc 画扇形图_使用echarts绘制条形图和扇形图

使用echarts绘制条形图和扇形图简单举例说明下echarts如何绘制条形图和扇形图代码示例echarts绘制条形图和扇形图var mychart1echarts.init(document.getElementById(chart1),light);// 指定图表的配置项和数据var option {title: {text: ECharts 入门示例},tooltip: {},legen…

Java学习笔记45:Java 线程与主线程之间的变量关系

运行下面的代码&#xff1a; package com.test.www;public class Test {public static int count 0;public static void inc() {//这里延迟1毫秒&#xff0c;使得结果明显try {Thread.sleep(1);} catch (InterruptedException e) {}count;}public static void main(String[] a…

会计的思考(36):会计--企业运营的数码相机

新浪网上看到一张图片&#xff0c;拍的是2009年12月3日的武汉市&#xff0c;整个城市在笼罩在一片污浊空气当中&#xff0c;让人震惊。虽然我在深圳&#xff0c;但也清楚好不到哪去。 震惊之余&#xff0c;感谢新浪&#xff0c;更感谢某位摄影师&#xff0c;让我们了解到生活的…

spring cloud连载第二篇之Spring Cloud Config

Spring Cloud Config Spring Cloud Config为分布式服务提供了服务侧和客户侧的外部配置支持。通过Spring Cloud Config你可以有一个统一的地方来管理所有应用的外部配置。 默认服务端存储实现用的是git&#xff0c;因此&#xff0c;它很容易支持配置环境的标签版本&#xff0c;…

CodeOnly

关于设置[Key]标志 要先添加 程序集的引用 在添加 using System.ComponentModel.DataAnnotations; 命名控件转载于:https://www.cnblogs.com/since87/archive/2013/06/09/3129399.html

继承和多态 2.0 -- 继承的六个默认成员函数

本文重要介绍普通继承中如何写派生类的六个默认成员函数&#xff0c;主要是针对在派生类中&#xff0c;如何调用基类的六个默认成员函数 需要说明的一点就是&#xff0c;如果子类中没有调用父类的函数时&#xff0c;系统会自动生成一个。 构造函数 子类中有父类的成员&#…

js 让鼠标右下角有一排小字_js布局中一排大字下面接着一排小字怎么打出来?...

展开全部可以使用 TypewriterJS 实现效果是这样 ,百度图片少了一部分&#xff0c;可以通过链接32313133353236313431303231363533e78988e69d8331333433626438看效果链接: 网页链接示例在这里: 网页链接文档地址: 网页链接使用步骤引用 TypewriterJShtmlcss.article__title {fon…

Hudson神奇的环境变量

Hudson神奇的环境变量 http://blog.sina.com.cn/s/blog_798f21a00100z6zw.html转载于:https://blog.51cto.com/myloveworld/950156