1.一种消除大数据规范关系连接冗余的优化方法,其特征在于,包括以下步骤:
S1,自定义组合键的类型为{字符类型;数值类型;};设置{firstKey;secondKey;}为一组合键;设置M为一方关系,S为多方关系,所述的firstKey存储一方关系M的mkey及各个matt组成的字符串,所述的mkey为firstKey中的第一个子字符串,为一方关系M的主键,所述的matt为一方关系M的属性值,matt的取值范围为{matt1,matt2,...,mattn},n为正整数,表示属性值的个数;所述的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],...,matt n[m])表示为一方关系M的一个元组,mkey[m]为Hbase表的行键,m∈[1,n],{matt1[m],matt2[m],...,mattn[m]}是与mkey[m]对应的属性值,SKEY为多方关系S的主键,SATT为多方关系S的属性值,SATT的取值范围为{satt1,satt2,...,sattn};SVALUE的取值范围为{SVALUE1,SVALUE2,...,SVALUEn},所述的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结点的个数取余数,该余数的值为Reduce,就是mkey对应的分区;
其次,定义排序依据,在Map和Reduce阶段对处于同一个分区的连接结果排序时,首先按firstKey中的mkey进行主键排序,主键排序以mkey的字符串比较结果决定其大小,再按secondKey中的SVALUE值进行二次排序,SVALUE值比较以参与排序的两个svalue值的差值小于零、等于零、大于零来决定SVALUE值比较的大小并进行依次排序;
最后,定义分组函数,根据组合键中的firstKey的mkey值,按字符串比较规则,相等的mkey被分在同一个组,在Reduce阶段将具有相同组合键的连接结果分在同一组,形成<{组合键},List{属性值}>;
S4,将S3中Reduce阶段的连接结果写入HBase表中;首先对组合键进行分解,取出firstKey中的mkey作为HBase表的行键;然后将firstKey中的其它属性值依次以M:MATT[m],m∈[1,n]列存储,MATT[m]为一方关系M中的MATT的属性名;将已经按SVALUE值排序好的集合List{属性值}以S:satt[k]列存储为对应的SVALUE值,satt[k]为多方关系S中的SATT在连续结果中的值,k∈[1,n],n为正整数,将集合List{属性值}中的每一个属性值,以satt[k]+“\t”+SVALUE值的字符串形式追加到字符串变量seq,字符串变量seq用于存储排序后的连接结果;最后增加M:seq列,存储seq字符串变量值,保存连接结果。