基于MapReduce的FP-Growth的负载均衡并行计算方法_2

文档序号:8412592阅读:来源:国知局
3.4、重复上述步骤3,直至排列表SList中的所有项都完成分组;
步骤3.5、将得到的新列表GList保存在HDFS文件中,以便多台节点共享。
[0017]本发明实施例中,gidi对应的组记作GList gidi,而GListgidi组中的每一项记作a j,a j e GListgidi, I 彡 j 彡 GListgid1.length。
[0018]步骤4、第二次扫描数据库事务集D,根据新列表GList将数据库事务集D也划分为M组,划分得到数据库事务集D的组号与新列表GList内的组号相对应,若一条事务包含GListgidi中的项,则将该条事务对应的部分发送到组号为gidj^事务组DB;在数据库事务集D划分结束后,对每一个事务组DB创建其本地FP-Tree,并根据本地FP-Tree挖掘对应的GListgidi,以得到频繁I项集中所有项的频繁模式;
本步骤中,通过第二对MapReduce函数完成,其中Map函数的任务是根据频繁I项集FList的划分情况对数据库事务集D进行分组,从而得到一组彼此间相互独立的事务组DB,Reduce函数负责对本节点上的独立事务集进行FP-Growth挖掘。
[0019]Map函数:生成M组相互独立的事务组DB,将本地节点上的所有事务发送到合适的分组上。Map函数输入键值对仍为<key=lineNo,value=T>。Map函数的操作如下:
I)、将新列表GList加载到本地节点,根据新列表GList生成一个hashMap,其key为新列表GList中的项,value为该项对应的组号gidp
[0020]2)、对于读入的每一条事务T,将其按照频繁I项集FList中项的顺序进行排序并删除T中不存在于频繁I项集FList中的项。
[0021]3)、设排好序的事务T=Utem1, item2,......,itemj,从后向前遍历T中的每一项
itenij,从η开始直到j等于I时循环结束。若Uemj存在于hashMap的某条键值对key-value中,则将hashMap中所有与键值对key-value的value值相同的键值对删除。然后将事务T中的前j项发送到键值对key-value的value值所对应的组中。
[0022]Map 函数的输出键值对为〈key= gidj, value= { Item1,......,item」} >,其中 gidi
表示该条事务要被分发到的事务组的组号,{ Item1,……,itemj表示不是将整条事务发送到相应的分组上,而是只发送Uemj之前的部分,发送的原则为:事务T所包含的项都属于新列表GList中的哪些组,事务T相应的部分就被发送到哪些组。通过对哈希表中条目的删除,以确保同一条事务不会被重复发送到同一个分组上。这样所有包含组GListgidi*项的事务,其对应的部分都被发送到组号为gidj^事务组DB Cgidi)中,那么对事务组DBQidi)进行FP-Tree挖掘就可以得到所有组GListgidi中项的模式。不同的组GList _中包含的项互不相同,每一个分组得到的频繁模式都是不同的,所以每一个事务组DB都是独立的,分组间互相不依赖。
[0023]Reduce函数:对本地事务集进行频繁模式挖掘。当所有Map任务都执行完毕后,由于Hadoop会自动合并具有相同key值的Map结果,所以Reduce的输入为〈key= gid^Value=DIKgidi)),其中事务组DIKgidi)表示组号为gidjA分组所对应的独立事务集,该事务集是由全部被分发到该组的事务所组成的。每个Reduce任务一个接一个地处理Hadoop分配给它的事务集。Reduce函数的操作如下:
I)、加载新列表GList,用于生成groupMap,groupMap中的key表示组号gic^,value表示该组所对应的所有项GListgidi。
[0024]2)、扫描事务组DB (gidi)中的每一条记录,仓彳建本地TP树:localFP_Tree。
[0025]3)、递归调用Growth算法,与传统Growth算法不通,在第一次调用Growth(FP-Tree,nul I)时,只遍历组GLiStgidi中项,而不是遍历整个表头,这是由于每个事务组只需挖掘其对应的组GLiStgidi中所包含的项的频繁模式。
[0026]Reduce 的输出为 <key=pattern,value=sup (pattern) >o 其中 pattern 表不频繁模式,sup (pattern)表示该频繁模式出现的次数。
[0027]步骤5、将每台节点上得到的频繁I项集中所有项的频繁模式聚合输出。
[0028]针对各计算节点的结果进行一次结果合并,即可得到FP-Growth并行算法下的最终结果。
[0029]本发明针对传统FP-Growth算法在单机计算节点上计算能力和存储能力有限的问题,提出了基于MapReduce的并行化计算方法,同时针对并行化过程中各个数据块之间数据划分不精确、各计算节点上受FP-Tree稀疏程度差异导致各节点计算计算效率、内存消耗、通信消耗存在明显差异等问题,提出了一种基于MapReduce的FP-Growth的负载均衡并行算法。
[0030]相比于传统单机算法和普通的并行算法,本发明利用频繁I项集FList中每一项的在条件模式树中的前缀路径的总长度作为该项的负载,并进行降序排列,然后指定划分成的组数M,使得每一组内包括的各项的负载之和基本相等,从而实现频繁I项集FList的均衡划分和各计算节点之间的负载均衡策略,从而解决了各个计算节点间负载不均的情况,有更好的负载均衡能力和执行效率。
【主权项】
1.一种基于MapReduce的FP-Growth的负载均衡并行计算方法,其特征是,所述负载均衡并行计算方法包括如下步骤: 步骤1、输入所需的数据库事务集D以及最小支持度计数,并将所述数据库事务集D分成连续不同的分区,且数据库事务集D的子事务集存储在多台节点上; 步骤2、第一次扫描数据库事务集D,并行计算每台节点上的项的支持度计数,且将所有节点计算的项的支持度技术合并,以得到全部频繁I项集FList ; 步骤3、将频繁I项集FList的项根据负载均衡的方法划分成M组,以得到长度为M的新列表GList,新列表GList中每一组的组号为gidj (I ^ i ^ Μ); 步骤4、第二次扫描数据库事务集D,根据新列表GList将数据库事务集D也划分为M组,划分得到数据库事务集D的组号与新列表GList内的组号相对应,若一条事务包含GListgidi中的项,则将该条事务对应的部分发送到组号为gidj^事务组DB;在数据库事务集D划分结束后,对每一个事务组DB创建其本地FP-Tree,并根据本地FP-Tree挖掘对应的GListgidi,以得到频繁I项集中所有项的频繁模式; 步骤5、将每台节点上得到的频繁I项集中所有项的频繁模式聚合输出。
2.根据权利要求1所述的基于MapReduce的FP-Growth的负载均衡并行计算方法,其特征是,所述步骤3包括如下步骤: 步骤3.1、计算频繁I项集FList中每项的负载,按照负载降序排列,以得到排列表SList ; 步骤3.2、根据指定的组数M,将排列表SList中的前M项初始化为新列表GList中的M组,且新列表GList中的每组与排列表SList中的每项呈--对应; 步骤3.3、将排列表SList中未被分到新列表GList中组的第一项添加到新列表GList中负载最小的组内,并将添加的项的负载值进行累加,并更新新列表GList中组的负载;步骤3.4、重复上述步骤3,直至排列表SList中的所有项都完成分组; 步骤3.5、将得到的新列表GList保存在HDFS文件中,以便多台节点共享。
【专利摘要】本发明涉及一种基于MapReduce的FP-Grwoth的负载均衡并行计算方法,其包括如下步骤:步骤1、将数据库事务集D分成连续不同的分区,且子事务集存储在多台节点上;步骤2、并行计算支持度计数,得到全部频繁1项集FList;步骤3、将频繁1项集FList的项根据负载均衡的方法划分成M组,以得到新列表GList;步骤4、根据新列表GList将数据库事务集D也划分为M组,在数据库事务集D划分结束后,对每一个事务组DB创建其本地FP-Tree,并根据本地FP-Tree挖掘对应的GListgidi,以得到频繁1项集中所有项的频繁模式;步骤5、将每台节点上得到的频繁1项集中所有项的频繁模式聚合输出。本发明具有较好的负载均衡能力以及执行效率。
【IPC分类】G06F17-30
【公开号】CN104731925
【申请号】CN201510138318
【发明人】杨勇, 陈曙东
【申请人】江苏物联网研究发展中心
【公开日】2015年6月24日
【申请日】2015年3月26日
当前第2页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1