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

文档序号:8412592阅读:279来源:国知局
基于MapReduce的FP-Growth的负载均衡并行计算方法
【技术领域】
[0001 ] 本发明涉及一种负载均衡的并行计算方法,尤其是一种基于MapReduce的FP-Grwoth的负载均衡并行计算方法,属于数据挖掘的技术领域。
【背景技术】
[0002]关联规则挖掘反映一个事物与其他事物之间的相互依存性和关联性,是数据挖掘技术中一个重要课题。关联规则挖掘需要经历两个步骤,即频繁项集的产生和关联规则的生成,关联规则挖掘的总体性能主要由第一阶段决定。经典的关联规则挖掘算法主要有Apr1ri算法、FP-Growth算法和Eclat算法,前两者采用水平数据格式进行挖掘,后者采用垂直数据格式进行挖掘。FP-Growth算法较Apr1ri算法而言,采用分治策略对数据库进行挖掘,不产生候选项集,它采用FP-Tree存放数据库的重要信息,只需扫描两次数据库,然后将关键的信息以FP-Tree的形式存放在内存中,避免了多次扫描数据库带来的巨大开销。
[0003]Hadoop是一个开源的、能够并行处理大规模数据的分布式计算平台。MapReduce是Hadoop的核心组件之一,是一个高性能的分布式编程模型和计算框架,用于对海量数据进行并行分析和处理。MapReduce把所有任务都进行统一的操作,即任务的分解与结果的合并,主要包括两个重要的核心操作:Map和Reduce (映射和规约),Map函数将大规模数据拆分为多个小的数据集并发送到多台机器(节点)上进行并行运算,Reduce函数则将各机器(节点)上Map函数的运行结果进行合并得出结果。
[0004]随着社会的进步和科学技术的发展,数据呈爆炸式增长,以单机形式进行关联规则挖掘的FP-Growth算法已经远不能满足海量数据的存储以及挖掘等问题,而一些现有的FP-Growth并行算法解决了数据库的划分以及后续的并行计算这两个问题,但是算法在并行计算效率、内存消耗、通信消耗以及FP-Tree稀疏程度差异导致的性能差异等方面存在明显的差异和不足,这些都与数据库事务集划分时欠缺负载均衡考虑有着很大的关系。

【发明内容】

[0005]本发明的目的是克服现有技术中存在的不足,提供一种基于MapReduce的FP-Growth的负载均衡并行计算方法,其具有较好的负载均衡能力以及执行效率。
[0006]按照本发明提供的技术方案,一种基于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项集中所有项的频繁模式聚合输出。
[0007]所述步骤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文件中,以便多台节点共享。
[0008]与现有技术相比,本发明的优点:本发明利用频繁I项集FList中每一项的在条件模式树中的前缀路径的总长度作为该项的负载,并进行降序排列,然后指定划分成的组数M,使得每一组内包括的各项的负载之和基本相等,从而实现频繁I项集FList的均衡划分和各计算节点之间的负载均衡策略,从而解决了各个计算节点间负载不均的情况,有更好的负载均衡能力和执行效率。
【附图说明】
[0009]图1为本发明的流程示意图。
【具体实施方式】
[0010]下面结合具体附图和实施例对本发明作进一步说明。
[0011]如图1所示:为了具有较好的负载均衡能力以及执行效率,本发明负载均衡并行计算方法包括如下步骤:
步骤1、输入所需的数据库事务集D以及最小支持度计数,并将所述数据库事务集D分成连续不同的分区,且数据库事务集D的子事务集存储在多台节点上;
将数据库事务集D划分成连续的几部分,分别存储于不同的计算节点上。被划分的每一部分子事务集称为数据分片,该过程直接由Hadoop完成,用户只需将数据库事务集拷贝到HDFS上,Hadoop框架会将输入的文件划分为多个数据分片(Blook)存储于不通的节点上,并为每个数据分片保存副本,从而自动完成数据分片过程。
[0012]步骤2、第一次扫描数据库事务集D,并行计算每台节点上的项的支持度计数,且将所有节点计算的项的支持度技术合并,以得到全部频繁I项集FList ;
本发明实施例中,通过第一对MapReduce函数统计出整个数据库事务集D中每一项的支持度计数,从而得到频繁I项集FList。其中每一个Map函数的输入对应一个数据分片Shard。Map函数的输入键值对格式为<key=lineNo,value=T>,其中IineNO表示当前的行号,T表示当前行对应的事务。对于每一条事务T,Map函数的输出格式为<key=item, value=l>,其中item表示T中出现的每一项。Hadoop会将所有具有相同key值的Map输出键值对合并后作为Reduce的输入,Reduce函数的输入格式为<key=item,
value={I, I, 1......}>。Reduce 的输出格式为 <key=item, value=itemCount>,其中,
itemCount表示对应的项item所出现的次数,即支持度计数。
[0013]步骤3、将频繁I项集FList的项根据负载均衡的方法划分成M组,以得到长度为M的新列表GList,新列表GList中每一组的组号为gidi (I彡i彡M);
本发明实施例中,对频繁I项集FList进行划分的目的在于需要根据新列表GList对数据库事务集D进行分组,对频繁I项集FList的划分将直接影响到下一步中所划分的各个事务组的负载是否均衡,从而影响整个并行算法的执行效率。本发明以实现被划分的事务组之间的负载均衡为前提对频繁I项集FList进行划分,将原来较大的数据库化整为散,分散到各个节点上,从而实现并行计算,所以在划分频繁I项集FList之前,要先估算每一个事务组的负载。
[0014]对于事务组DBCgidi),将挖掘对应的GListgidi中所包含的所有项的条件模式树的递归次数之和作为该组的负载。因此,需要先估算频繁I项集FList中每一项的负载,再划分频繁I项集FList。
[0015]每一项所对应的条件模式树的前缀路径的最大值为该项在频繁I项集FList中的位置n,若某一项所对应的条件模式树前缀路径的最大值为n,那么挖掘该项的频繁模式所做的最大递归次数为n-l+n-2+......+1= (nX (n_l))/2,即每一项的挖掘负载可估算为
(nX (n-l))/20
[0016]根据上述说明,则对频繁I项集FList进行划分,得到新列表GList的过程包括如下步骤:
步骤3.1、计算频繁I项集FList中每项的负载,按照负载降序排列,以得到排列表SList ;
步骤3.2、根据指定的组数M,将排列表SList中的前M项初始化为新列表GList中的
M组,且新列表GList中的每组与排列表SList中的每项呈--对应;
步骤3.3、将排列表SList中未被分到新列表GList中组的第一项添加到新列表GList中负载最小的组内,并将添加的项的负载值进行累加,并更新新列表GList中组的负载;步骤
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1