一种消除大数据规范关系连接冗余的优化方法与流程

文档序号:13282252阅读:714来源:国知局

本发明涉及数据优化技术领域,尤其涉及一种消除大数据规范关系连接冗余的优化方法。



背景技术:

mapreduce是一种用于处理大数据的分布式计算框架,其数据处理的流程分为map、shuffle、reduce即映射、洗牌、归约三个阶段。在map阶段,原始数据源根据其数据特征被划分成若干数据块,每个数据块由集群中的节点进行map逻辑处理,结果以key/value即键/值对的形式输出。shuffle阶段负责对key/value对进行排序及分组,map阶段的排序发生在将节点内存缓冲区的key/value写入到本地磁盘spill文件,及将多个本地磁盘spill文件合并为一个spill文件时,排序的过程为:首先根据key所属的partition即分区排序,然后每个partition再按key进行排序。map阶段完成后,每个partition会被拷贝到对应的reduce节点中,由于reduce节点会接受来自多个map节点的数据,故shuffle在reduce阶段的任务就是将来自不同map节点的partition按key值进行归并排序后,将key/value根据key值分组为[key,list(value1,value2…valuen)],value即值,n为正整数,排序后的结果将作为reduce阶段的任务输入。reduce阶段负责对[key,list<value1,value2…valuen]按特定逻辑进行归约处理,并将结果输出。

hadoopmapreduce是googlemapreduce框架的开源实现,通过对hadoopmapreduce进行扩展,可以将hbase与mapreduce进行集成,从而使得hbase数据表和外界数据源可以以mapreduce的方式进行双向交互,从而提高数据的处理速度和效率。hbase是建立在hadoop之上,具有高可靠性、高性能、列存储、可伸缩、实时读写特点的数据库系统,能够为海量的数据提供高性能的数据维护及查询服务。现有的mapreduce在对规范的一对多关系进行连接操作时,一方关系的各个属性值均会被多次重复存储。现有技术中的数据连接方式具体为,一方关系m(mkey,matt1,matt2,...,mattn),多方关系为s(skey,mkey,satt,svalue),其中mkey为多方关系s的外码,(mkey[m],mattl[m],matt2[m],...,mattn[m]),m∈[1,n]表示一方关系m的一个元组,多方关系s中的satt属性的取值范围为{sattl,satt2,...,sattn},n为正整数,svalue的取值范围为{svaluel,svalue2,...,svaluen},n为正整数,且svaluel,svalue2,...,svaluen为按照1至n从小到大排序的整型值。现有技术中使用mkey对关系m和s进行连接操作,并根据svalue值进行连接及二次排序后的结果下所示,

(mkey[1]matt1[1]matt2[1])...mattn[1])satt1svalue1

(mkey[1]matt1[1]matt2[1])...mattn[1])satt2svalue2

(mkey[1]matt1[1]matt2[1])...mattn[1])satt3svalue3

(mkey[1]matt1[1]matt2[1])...mattn[1])satt4svalue4

(mkey[2]matt1[2]matt2[2])...mattn[2])satt4svaluel

(mkey[2]matt1[2]matt2[2])...mattntn[2])satt3svalue3

(mkey[2]matt1[2]matt2[2])...mattn[2])satt1svalue4

(mkey[3]matt1[3]matt2[3])...mattn[3])satt4svalue3

(mkey[3]matt1[3]matt2[3])...mattn[3])satt1svalue7

...

例如其中的svaluel、svalue2、svalue3、svalue4在连接及排序的过程中,mkey[1]matt1[1]matt2[1]...mattn[1]等属性值被重复使用了4次,因此产生了在连接结果中产生了大量冗余,连接结果的查询效率较低。



技术实现要素:

本发明提供了一种消除大数据规范关系连接冗余的优化方法,该方法可以有效消除一对多关系中的数据冗余,提高对连接结果的查询效率。

本发明所采用的技术方案是,一种消除大数据规范关系连接冗余的优化方法,其特征在于,包括以下步骤:

s1,自定义组合键的类型为{字符类型;数值类型;};设置{firstkey;secondkey;}为一组合键;设置m为一方关系,s为多方关系,所述的firstkey存储一方关系m的mkey及各个matt组成的字符串,所述的mkey为firstkey中的第一个子字符串,所述的matt为一方关系m的属性值;所述的secondkey存储多方关系s的svalue值,所述的svalue为多方关系s中需要排序的数值类型值;

将一方关系m的格式存储为m(mkey,matt1,matt2,...,mattn),多方关系s的格式存储为s(skey,mkey,satt,svalue);其中mkey为一方关系m的主键同时也是s的外键;将(mkey[m],matt1[m],matt2[m],...,mattn[m])表示为一方关系m的一个元组,m∈[1,n],n为正整数,m表示一方关系m的一个元组,skey为多方关系s的主键,satt为多方关系s的属性值,satt的取值范围为{satt1,satt2,...,sattn};svalue的取值范围为{svalue1,svalue2,...,svaluen},n为正整数,所述的svalue1,svalue2,...,svaluen为按序号1至n从小到大依次排序的数值类型值;

s2,实现map端的连接,首先将一方关系m的存储文件m.dat复制到执行map任务的各个节点的内存中,m.dat文件的存储格式在map节点内存中以hashmap结构保存;其次扫描多方关系s中的每一条记录,同时在hashmap中查找是否有相同的mkey的记录,如果有,则进行连接后输出,输出结果的格式为<{组合键}、{属性值}>,该组合键存储了一方关系m的主键和m的所有属性值及与其相对应的多方关系s的svalue值,该属性值集合存储了多方关系s的属性值和svalue值;

s3,重新定义分区函数、排序依据及分组函数;

首先,定义分区函数,取mkey的哈希值与最大的整数按位求与后,得到一个整数结果,将该整数与集群中map结点的个数取余数,该余数的值就是mkey对应的分区;

其次,定义排序依据,在map和reduce阶段对处于同一个分区的连接结果排序时,首先按firstkey中的mkey进行主键排序,主键排序以mkey的字符串比较结果决定其大小,再按secondkey中的svalue值进行二次排序,svalue值比较以参与排序的两个svalue值的差值小于零、等于零、大于零来决定大小并进行依次排序;

最后,定义分组函数,根据组合键中的firstkey的mkey值,按字符串比较规则,相等的mkey被分在同一个组,在reduce阶段将具有相同组合键的连接结果分在同一组,形成<{组合键}、list{属性值}>;

s4,将s3中reduce阶段的连接结果写入hbase表中;首先对组合键进行分解,取出firstkey中的mkey作为hbase表的行键;然后将firstkey中的其它属性值依次以m:matt[m],m∈[1,n]列存储;将已经按svalue值排序好的集合list{属性值}以s:sattr[k]列存储为对应的svalue[k]值,k∈[1,n],n为正整数,将集合list{属性值}中的每一个属性值,以sattr[k]+“\t”+svalue[k]的字符串形式追加到字符串变量seq,字符串变量seq用于存储排序后的连接结果;最后增加m:seq列,存储seq字符串变量值,保存连接结果。

采用以上技术方案后,本发明与现有技术相比具有以下优点:

通过对二次排序算法进行优化,重新定义map阶段的分区过程、shuffle阶段的排序及分组过程,使得map阶段的输出为包含一方关系属性值和多方关系排序值的组合键及包含多方关系属性值的集合,reduce阶段将组合键进行分解,提取一方关系的主码作为hbase表的行键,并将组合键中一方关系的各个属性值,多方关系属性值集合及排序后的连接结果分别写入hbase表中对应的列,从而既实现了连接的语义,又消除了冗余,由于以hbase表存储连接结果,从而可以利用hbase提供的各类方法进行数据检索,提高了对连接结果的查询效率。

具体实施方式

一方关系m(mkey,matt1,matt2,...,mattn),多方关系为s(skey,mkey,satt,svalue),其中mkey为多方关系s的外码,(mkey[m],matt1[m],matt2[m],...,mattn[m]),m∈[1,n]表示一方关系m的一个元组,多方关系s中的satt属性的取值范围为{satt1,satt2,...,sattn},n为正整数,svalue的取值范围为{svalue1,svalue2,...,svaluen},n为正整数,且svalue1,svalue2,...,svaluen为按照1至n从小到大排序的整型值。本发明利用mapreduce将具有相同属性的文件进行连接操作,根据参与连接的文件大小可选择使用reduce端连接、map端连接、semi(半)连接及reduce端与bloomfilter连接,连接的结果可以写入文本文件,也可以直接写入hbase数据表。由于hbase表是按列存储的,在定义表结构时只需要定义列族即columnfamily,对属于列族的列的数量没有限制,以columnfamily:qualifier的形式表示一个列名,qualifier可以是任意的字节数组。因此可以以s:satt[k]列,k∈[1,n],s为多方关系名,satt[k]为s中的satt在连接结果中的值,用来存储连接结果中的多方关系中svalue属性的值。对于连接结果中的一方关系m,提取mkey[m],m∈[1,n]为hbase表的行键,以m:matt[m]列,m∈[1,n],m为一方关系名,matt[m]为m中的matt属性名,用来存储一方关系在连接结果中和mkey[m]对应的(matt1[m],matt2[m],…,mattn[m])属性值,从而使得一方关系的连接结果只存储了一次,既实现了连接的语义,又消除了冗余。hbase存储列值时默认按列名进行排序,增加m:seq列存储排序后的svalue[t]值及其与satt[k],k∈[1,n]的对应关系。经过二次排序后的连接结果在hbase表中的存储结构如下所示,

实验环境为包含有4个节点的hadoop集群,1个主节点,4个数据节点,主节点也为数据节点。

下面以学生,学生选课关系模拟规范的一对多关系来具体说明本发明,选取的模拟数据如下所示,

任务在集群中运行后,将实验结果写入到hbase表中的结果下所示,

从实验结果看,每个学生的属性值即学号只存储了一次,每个学生所选课程存储了多次,如学号201012001的学生的连接结果为201012001column=std:courseseq,timestamp-14822333387867,value=maths:98,database:88;networks:77;arts:67,因此本发明中的方法既实现了连接的语义,又消除了冗余,二次排序的学生成绩可直接通过查询std:courseseq列得到,因此本发明消除了数据冗余,提高了对连接结果的查询效率。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1