一种账户余额数据的并行处理方法和系统转让专利

申请号 : CN201410306448.6

文献号 : CN104050291B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 赵仁明辛国茂亓开元房体盈

申请人 : 浪潮(北京)电子信息产业有限公司

摘要 :

本发明公开了一种账户余额数据的并行处理方法,该方法包括:一个或多个执行第一任务的Map节点读取账户余额明细数据的不同分片数据,生成所读取的分片数据中每一条余额记录的第一输出参数和第二输出参数;其中,所述第一输出参数至少包括账户ID,所述第二输出参数设定为账户状态信息,所述账户状态信息至少包括:余额值、交易日期和当天交易序号;一个或多个执行第一任务的Reduce节点读取所述执行第一任务的Map节点处理完毕的不同余额记录,根据所述余额记录的第一输出参数和第二输出参数分别生成各账户的日均余额值记录;其中,第一输出参数相同的余额记录由同一个Reduce节点读取。本发明能够快速获取大数据量下的帐户日均余额的统计结果。本发明还公开了一种账户余额数据的并行处理系统。

权利要求 :

1.一种账户余额数据的并行处理方法,该方法包括:

一个或多个执行第一任务的Map节点读取账户余额明细数据的不同分片数据,生成所读取的分片数据中每一条余额记录的第一输出参数和第二输出参数;其中,所述第一输出参数至少包括账户ID,所述第二输出参数设定为账户状态信息,所述账户状态信息至少包括:余额值、交易日期和当天交易序号;

一个或多个执行第一任务的Reduce节点读取所述执行第一任务的Map节点处理完毕的不同余额记录,根据所述余额记录的第一输出参数和第二输出参数分别生成各账户的日均余额值记录;其中,第一输出参数相同的余额记录由同一个Reduce节点读取;

在所述执行第一任务的Reduce节点根据所述余额记录的第一输出参数和第二输出参数分别生成各账户的日均余额值记录后,还包括:一个或多个执行第二任务的Map节点读取不同账户的日均余额值记录,生成所读取的日均余额值记录的第一输出参数和第二输出参数;其中,所述日均余额值记录的第一输出参数设定为所述日均余额值所在的区间,所述日均余额值记录的第二输出参数设定为1;

一个或多个执行第二任务的Reduce节点读取所述执行第二任务的Map节点处理完毕的不同日均余额值记录,根据所述日均余额值记录的第一输出参数和第二输出参数统计各日均余额值区间的账户数,包括:按照所述第一输出参数中的日均余额值区间,遍历同一日均余额值区间的各条日均余额值记录,将每一条日均余额值记录的第二输出参数进行累加,获得该日均余额值区间的账户数;其中,第一输出参数相同的日均余额值记录由同一个Reduce节点读取。

2.如权利要求1所述的方法,其特征在于:

所述根据所述余额记录的第一输出参数和第二输出参数分别生成各账户的日均余额值记录,包括:

按照所述第一输出参数中的账户ID,遍历同一账户的各条余额记录,根据所述余额记录的第二输出参数确定该账户在查询起止时间范围内的每一天的余额值,将每一天的余额值在所述查询起止时间范围内取平均得到该账户的日均余额值,生成该账户的日均余额值记录。

3.如权利要求2所述的方法,其特征在于:

根据所述余额记录的第二输出参数确定该账户在查询起止时间范围内的每一天的余额值,包括:

从查询起始时间的当日至查询终止时间的当日,判断每一天是否存在余额记录,如存在,将当日交易序号最大的余额记录的余额值作为当日的最终余额值,如不存在,追溯早于当日且具有余额记录的最近日期,将所述最近日期那一天的交易序号最大的余额记录的余额值作为当日的最终余额值。

4.如权利要求1所述的方法,其特征在于:

在一个或多个执行第一任务的Reduce节点读取所述执行第一任务的Map节点处理完毕的不同余额记录之前,还包括:计算每一条余额记录的第一参数的哈希值,建立第一参数的哈希值与所述执行第一任务的Reduce节点的映射关系;其中,所述映射关系用于供所述执行第一任务的Reduce节点根据所述映射关系读取对应的余额记录。

5.如权利要求1所述的方法,其特征在于:

在一个或多个执行第二任务的Reduce节点读取所述执行第二任务的Map节点处理完毕的不同日均余额值记录之前,还包括:计算每一条日均余额值记录的第一参数的哈希值,建立第一参数的哈希值与执行第二任务的Reduce节点的映射关系;其中,所述映射关系用于供所述执行第二任务的Reduce节点根据所述映射关系读取对应的日均余额值记录。

6.如权利要求1所述的方法,其特征在于:

在一个或多个执行第一任务的Map节点读取账户余额明细数据的不同分片数据之前,还包括:

根据查询起止时间确定账户余额明细数据的读取范围,包括:将全量余额明细数据和截止到查询终止时间当天的增量余额明细数据确定为账户余额明细数据的读取范围;

将属于该读取范围内的账户余额明细数据分片,建立每一个分片与执行第一任务的Map节点的映射关系;其中,所述映射关系用于供所述执行第一任务的Map节点根据所述映射关系读取对应的分片数据。

7.一种账户余额数据的并行处理系统,该系统包括:

Map处理模块,包括一个或多个执行第一任务的Map节点;各执行第一任务的Map节点用于读取账户余额明细数据的不同分片数据,生成所读取的分片数据中每一条余额记录的第一输出参数和第二输出参数;其中,所述第一输出参数至少包括账户ID,所述第二输出参数设定为账户状态信息,所述账户状态信息至少包括:余额值、交易日期和当天交易序号;

Reduce处理模块,包括一个或多个执行第一任务的Reduce节点;各执行第一任务的Reduce节点用于读取所述执行第一任务的Map节点处理完毕的不同余额记录,根据所述余额记录的第一输出参数和第二输出参数分别生成各账户的日均余额值记录;其中,第一输出参数相同的余额记录由同一个Reduce节点读取;

所述Map处理模块还包括一个或多个执行第二任务的Map节点,所述Reduce处理模块还包括一个或多个执行第二任务的Reduce节点;

各执行第二任务的Map节点用于读取不同账户的日均余额值记录,生成所读取的日均余额值记录的第一输出参数和第二输出参数;其中,所述日均余额值记录的第一输出参数设定为所述日均余额值所在的区间,所述日均余额值记录的第二输出参数设定为1;

各执行第二任务的Reduce节点用于读取所述执行第二任务的Map节点处理完毕的不同日均余额值记录,根据所述日均余额值记录的第一输出参数和第二输出参数统计各日均余额值区间的账户数,包括:按照所述第一输出参数中的日均余额值区间,遍历同一日均余额值区间的各条日均余额值记录,将每一条日均余额值记录的第二输出参数进行累加,获得该日均余额值区间的账户数;其中,第一输出参数相同的日均余额值记录由同一个Reduce节点读取。

8.如权利要求7所述的系统,其特征在于:

所述执行第一任务的Reduce节点用于根据所述余额记录的第一输出参数和第二输出参数分别生成各账户的日均余额值记录,包括:按照所述第一输出参数中的账户ID,遍历同一账户的各条余额记录,根据所述余额记录的第二输出参数确定该账户在查询起止时间范围内的每一天的余额值,将每一天的余额值在所述查询起止时间范围内取平均得到该账户的日均余额值,生成该账户的日均余额值记录。

9.如权利要求8所述的系统,其特征在于:

所述执行第一任务的Reduce节点用于根据所述余额记录的第二输出参数确定该账户在查询起止时间范围内的每一天的余额值,包括:从查询起始时间的当日至查询终止时间的当日,判断每一天是否存在余额记录,如存在,将当日交易序号最大的余额记录的余额值作为当日的最终余额值,如不存在,追溯早于当日且具有余额记录的最近日期,将所述最近日期那一天的交易序号最大的余额记录的余额值作为当日的最终余额值。

10.如权利要求7所述的系统,其特征在于,所述Reduce处理模块还包括第一任务路由模块:

所述第一任务路由模块,用于在一个或多个执行第一任务的Reduce节点读取所述执行第一任务的Map节点处理完毕的不同余额记录之前,计算每一条余额记录的第一参数的哈希值,建立第一参数的哈希值与所述执行第一任务的Reduce节点的映射关系;其中,所述映射关系用于供所述执行第一任务的Reduce节点根据所述映射关系读取对应的余额记录。

11.如权利要求7所述的系统,其特征在于,所述Reduce处理模块还包括第二任务路由模块:

所述第二任务路由模块,用于在一个或多个执行第二任务的Reduce节点读取所述执行第二任务的Map节点处理完毕的不同日均余额值记录之前,计算每一条日均余额值记录的第一参数的哈希值,建立第一参数的哈希值与执行第二任务的Reduce节点的映射关系;其中,所述映射关系用于供所述执行第二任务的Reduce节点根据所述映射关系读取对应的日均余额值记录。

12.如权利要求7所述的系统,其特征在于,所述Map处理模块还包括分片模块:

所述分片模块,用于在一个或多个执行第一任务的Map节点读取账户余额明细数据的不同分片数据之前,根据查询起止时间确定账户余额明细数据的读取范围,包括:将全量余额明细数据和截止到查询终止时间当天的增量余额明细数据确定为账户余额明细数据的读取范围;将属于该读取范围内的账户余额明细数据分片,建立每一个分片与执行第一任务的Map节点的映射关系;其中,所述映射关系用于供所述执行第一任务的Map节点根据所述映射关系读取对应的分片数据。

说明书 :

一种账户余额数据的并行处理方法和系统

技术领域

[0001] 本发明涉及大数据处理技术领域,尤其涉及的是一种大数据量下的帐户余额数据的并行处理方法和系统。

背景技术

[0002] 数据是企业生产、经营、战略等几乎所有经营活动所依赖的、不可或缺的信息。数据就犹如企业经营者的眼睛一样,通过数据可以反映出经营的问题,就犹如舵手依赖导航一样。随着人类社会全面进入信息时代,数据更是成为与水、石油同等重要的战略资源。目前企业面临着数据量的大规模增长。例如,IDC最近的报告预测称,到2020年,全球数据量将扩大50倍。目前,大数据的规模尚是一个不断变化的指标,单一数据集的规模范围从几十TB到数PB不等。此外,各种意想不到的来源都能产生数据。
[0003] 传统业务数据随时间演变已拥有标准的格式,能够被标准的商务智能软件识别。相较传统的业务数据,大数据具有多层结构,这意味着大数据会呈现出多变的形式和类型。
由于大数据存在不规则和模糊不清的特性,造成很难甚至无法使用传统的应用软件进行分析。
[0004] 目前,企业面临的挑战是从各种形式的复杂数据中挖掘价值。

发明内容

[0005] 本发明所要解决的技术问题是提供一种账户余额数据的并行处理方法和系统,快速获取大数据量下的帐户日均余额的统计结果。
[0006] 为了解决上述技术问题,本发明提供了一种账户余额数据的并行处理方法,该方法包括:
[0007] 一个或多个执行第一任务的Map节点读取账户余额明细数据的不同分片数据,生成所读取的分片数据中每一条余额记录的第一输出参数和第二输出参数;其中,所述第一输出参数至少包括账户ID,所述第二输出参数设定为账户状态信息,所述账户状态信息至少包括:余额值、交易日期和当天交易序号;
[0008] 一个或多个执行第一任务的Reduce节点读取所述执行第一任务的Map节点处理完毕的不同余额记录,根据所述余额记录的第一输出参数和第二输出参数分别生成各账户的日均余额值记录;其中,第一输出参数相同的余额记录由同一个Reduce节点读取。
[0009] 进一步地,该方法还包括下述特点:
[0010] 所述根据所述余额记录的第一输出参数和第二输出参数分别生成各账户的日均余额值记录,包括:
[0011] 按照所述第一输出参数中的账户ID,遍历同一账户的各条余额记录,根据所述余额记录的第二输出参数确定该账户在查询起止时间范围内的每一天的余额值,将每一天的余额值在所述查询起止时间范围内取平均得到该账户的日均余额值,生成该账户的日均余额值记录。
[0012] 进一步地,该方法还包括下述特点:
[0013] 在所述执行第一任务的Reduce节点根据所述余额记录的第一输出参数和第二输出参数分别生成各账户的日均余额值记录后,还包括:
[0014] 一个或多个执行第二任务的Map节点读取不同账户的日均余额值记录,生成所读取的日均余额值记录的第一输出参数和第二输出参数;其中,所述日均余额值记录的第一输出参数设定为所述日均余额值所在的区间,所述日均余额值记录的第二输出参数设定为1;
[0015] 一个或多个执行第二任务的Reduce节点读取所述执行第二任务的Map节点处理完毕的不同日均余额值记录,根据所述日均余额值记录的第一输出参数和第二输出参数统计各日均余额值区间的账户数,包括:按照所述第一输出参数中的日均余额值区间,遍历同一日均余额值区间的各条日均余额值记录,将每一条日均余额值记录的第二输出参数进行累加,获得该日均余额值区间的账户数;其中,第一输出参数相同的日均余额值记录由同一个Reduce节点读取。
[0016] 进一步地,该方法还包括下述特点:
[0017] 根据所述余额记录的第二输出参数确定该账户在查询起止时间范围内的每一天的余额值,包括:
[0018] 从查询起始时间的当日至查询终止时间的当日,判断每一天是否存在余额记录,如存在,将当日交易序号最大的余额记录的余额值作为当日的最终余额值,如不存在,追溯早于当日且具有余额记录的最近日期,将所述最近日期那一天的交易序号最大的余额记录的余额值作为当日的最终余额值。
[0019] 进一步地,该方法还包括下述特点:
[0020] 在一个或多个执行第一任务的Reduce节点读取所述执行第一任务的Map节点处理完毕的不同余额记录之前,还包括:
[0021] 计算每一条余额记录的第一参数的哈希值,建立第一参数的哈希值与所述执行第一任务的Reduce节点的映射关系;其中,所述映射关系用于供所述执行第一任务的Reduce节点根据所述映射关系读取对应的余额记录。
[0022] 进一步地,该方法还包括下述特点:
[0023] 在一个或多个执行第二任务的Reduce节点读取所述执行第二任务的Map节点处理完毕的不同日均余额值记录之前,还包括:
[0024] 计算每一条日均余额值记录的第一参数的哈希值,建立第一参数的哈希值与执行第二任务的Reduce节点的映射关系;其中,所述映射关系用于供所述执行第二任务的Reduce节点根据所述映射关系读取对应的日均余额值记录。
[0025] 进一步地,该方法还包括下述特点:
[0026] 在一个或多个执行第一任务的Map节点读取账户余额明细数据的不同分片数据之前,还包括:
[0027] 根据查询起止时间确定账户余额明细数据的读取范围,包括:将全量余额明细数据和截止到查询终止时间当天的增量余额明细数据确定为账户余额明细数据的读取范围;
[0028] 将属于该读取范围内的账户余额明细数据分片,建立每一个分片与执行第一任务的Map节点的映射关系;其中,所述映射关系用于供所述执行第一任务的Map节点根据所述映射关系读取对应的分片数据。
[0029] 为了解决上述技术问题,本发明还提供了一种账户余额数据的并行处理系统,该系统包括:
[0030] Map处理模块,包括一个或多个执行第一任务的Map节点;各执行第一任务的Map节点用于读取账户余额明细数据的不同分片数据,生成所读取的分片数据中每一条余额记录的第一输出参数和第二输出参数;其中,所述第一输出参数至少包括账户ID,所述第二输出参数设定为账户状态信息,所述账户状态信息至少包括:余额值、交易日期和当天交易序号;
[0031] Reduce处理模块,包括一个或多个执行第一任务的Reduce节点;各执行第一任务的Reduce节点用于读取所述执行第一任务的Map节点处理完毕的不同余额记录,根据所述余额记录的第一输出参数和第二输出参数分别生成各账户的日均余额值记录;其中,第一输出参数相同的余额记录由同一个Reduce节点读取。
[0032] 进一步地,该系统还包括下述特点:
[0033] 所述执行第一任务的Reduce节点用于根据所述余额记录的第一输出参数和第二输出参数分别生成各账户的日均余额值记录,包括:按照所述第一输出参数中的账户ID,遍历同一账户的各条余额记录,根据所述余额记录的第二输出参数确定该账户在查询起止时间范围内的每一天的余额值,将每一天的余额值在所述查询起止时间范围内取平均得到该账户的日均余额值,生成该账户的日均余额值记录。
[0034] 进一步地,该系统还包括下述特点:
[0035] 所述Map处理模块还包括一个或多个执行第二任务的Map节点,所述Reduce处理模块还包括一个或多个执行第二任务的Reduce节点;
[0036] 各执行第二任务的Map节点用于读取不同账户的日均余额值记录,生成所读取的日均余额值记录的第一输出参数和第二输出参数;其中,所述日均余额值记录的第一输出参数设定为所述日均余额值所在的区间,所述日均余额值记录的第二输出参数设定为1;
[0037] 各执行第二任务的Reduce节点用于读取所述执行第二任务的Map节点处理完毕的不同日均余额值记录,根据所述日均余额值记录的第一输出参数和第二输出参数统计各日均余额值区间的账户数,包括:按照所述第一输出参数中的日均余额值区间,遍历同一日均余额值区间的各条日均余额值记录,将每一条日均余额值记录的第二输出参数进行累加,获得该日均余额值区间的账户数;其中,第一输出参数相同的日均余额值记录由同一个Reduce节点读取。
[0038] 进一步地,该系统还包括下述特点:
[0039] 所述执行第一任务的Reduce节点用于根据所述余额记录的第二输出参数确定该账户在查询起止时间范围内的每一天的余额值,包括:从查询起始时间的当日至查询终止时间的当日,判断每一天是否存在余额记录,如存在,将当日交易序号最大的余额记录的余额值作为当日的最终余额值,如不存在,追溯早于当日且具有余额记录的最近日期,将所述最近日期那一天的交易序号最大的余额记录的余额值作为当日的最终余额值。
[0040] 进一步地,该系统还包括下述特点:
[0041] 所述Reduce处理模块还包括第一任务路由模块:
[0042] 所述第一任务路由模块,用于在一个或多个执行第一任务的Reduce节点读取所述执行第一任务的Map节点处理完毕的不同余额记录之前,计算每一条余额记录的第一参数的哈希值,建立第一参数的哈希值与所述执行第一任务的Reduce节点的映射关系;其中,所述映射关系用于供所述执行第一任务的Reduce节点根据所述映射关系读取对应的余额记录。
[0043] 进一步地,该系统还包括下述特点:
[0044] 所述Reduce处理模块还包括第二任务路由模块:
[0045] 所述第二任务路由模块,用于在一个或多个执行第二任务的Reduce节点读取所述执行第二任务的Map节点处理完毕的不同日均余额值记录之前,计算每一条日均余额值记录的第一参数的哈希值,建立第一参数的哈希值与执行第二任务的Reduce节点的映射关系;其中,所述映射关系用于供所述执行第二任务的Reduce节点根据所述映射关系读取对应的日均余额值记录。
[0046] 进一步地,该系统还包括下述特点:所述Map处理模块还包括分片模块:
[0047] 所述分片模块,用于在一个或多个执行第一任务的Map节点读取账户余额明细数据的不同分片数据之前,根据查询起止时间确定账户余额明细数据的读取范围,包括:将全量余额明细数据和截止到查询终止时间当天的增量余额明细数据确定为账户余额明细数据的读取范围;将属于该读取范围内的账户余额明细数据分片,建立每一个分片与执行第一任务的Map节点的映射关系;其中,所述映射关系用于供所述执行第一任务的Map节点根据所述映射关系读取对应的分片数据。
[0048] 与现有技术相比,本发明提供的一种账户余额数据的并行处理方法和系统,基于MapReduce将大规模的帐户余额明细数据分成若干份交给Map节点并行处理,Map阶段对数据按照帐户进行了分类,处理完成后根据帐户id分组并路由给多个Reduce节点并行处理,从而快速获取大数据量下的帐户日均余额的统计结果,处理效率高、可扩展性强。

附图说明

[0049] 图1为本发明实施例的一种账户余额数据的并行处理方法中获取各用户的日均余额值的流程图。
[0050] 图2为本发明实施例的一种账户余额数据的并行处理方法中统计各日均余额值区间的账户数的流程图。
[0051] 图3为本发明实施例的一种账户余额数据的并行处理系统的结构示意图。
[0052] 图4为本发明应用示例的基于MapReduce的账户余额数据的处理架构示意图。

具体实施方式

[0053] 为使本发明的目的、技术方案和优点更加清楚明白,下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
[0054] 如图1所示,本发明实施例提供了一种账户余额数据的并行处理方法,该方法包括:
[0055] S10,一个或多个执行第一任务的Map节点读取账户余额明细数据的不同分片数据,生成所读取的分片数据中每一条余额记录的第一输出参数和第二输出参数;其中,所述第一输出参数至少包括账户ID,所述第二输出参数设定为账户状态信息,所述账户状态信息至少包括:余额值、交易日期和当天交易序号;
[0056] S20,一个或多个执行第一任务的Reduce节点读取所述执行第一任务的Map节点处理完毕的不同余额记录,根据所述余额记录的第一输出参数和第二输出参数分别生成各账户的日均余额值记录;其中,第一输出参数相同的余额记录由同一个Reduce节点读取;
[0057] 该方法还可以包括下述特点:
[0058] 优选地,在一个或多个执行第一任务的Map节点读取账户余额明细数据的不同分片数据之前,还包括:
[0059] 根据查询起止时间确定账户余额明细数据的读取范围,包括:将全量余额明细数据和截止到查询终止时间当天的增量余额明细数据确定为账户余额明细数据的读取范围;
[0060] 将属于该读取范围内的账户余额明细数据分片,建立每一个分片与执行第一任务的Map节点的映射关系;其中,所述映射关系用于供所述执行第一任务的Map节点根据所述映射关系读取对应的分片数据。
[0061] 优选地,所述根据所述余额记录的第一输出参数和第二输出参数分别生成各账户的日均余额值记录,包括:
[0062] 按照所述第一输出参数中的账户ID,遍历同一账户的各条余额记录,根据所述余额记录的第二输出参数确定该账户在查询起止时间范围内的每一天的余额值,将每一天的余额值在所述查询起止时间范围内取平均得到该账户的日均余额值,生成该账户的日均余额值记录。
[0063] 优选地,根据所述余额记录的第二输出参数确定该账户在查询起止时间范围内的每一天的余额值,包括:
[0064] 从查询起始时间的当日至查询终止时间的当日,判断每一天是否存在余额记录,如存在,将当日交易序号最大的余额记录的余额值作为当日的最终余额值,如不存在,追溯早于当日且具有余额记录的最近日期,将所述最近日期那一天的交易序号最大的余额记录的余额值作为当日的最终余额值。
[0065] 优选地,在一个或多个执行第一任务的Reduce节点读取所述执行第一任务的Map节点处理完毕的不同余额记录之前,还包括:
[0066] 计算每一条余额记录的第一参数的哈希值,建立第一参数的哈希值与所述执行第一任务的Reduce节点的映射关系;其中,所述映射关系用于供所述执行第一任务的Reduce节点根据所述映射关系读取对应的余额记录。
[0067] 优选地,每一条余额记录的第一参数的哈希值为将所述第一参数对执行第一任务的Reduce节点总个数取模;
[0068] 优选地,如图2所示,步骤S20后还包括:
[0069] S30,确定每个账户的日均余额值所在的区间,统计每个区间内的账户数;
[0070] 优选地,确定每个账户的日均余额值所在的区间,统计每个区间内的账户数,包括:
[0071] S301,一个或多个执行第二任务的Map节点读取不同账户的日均余额值记录,生成所读取的日均余额值记录的第一输出参数和第二输出参数;其中,所述日均余额值记录的第一输出参数设定为所述日均余额值所在的区间,所述日均余额值记录的第二输出参数设定为1;
[0072] S302,一个或多个执行第二任务的Reduce节点读取所述执行第二任务的Map节点处理完毕的不同日均余额值记录,根据所述日均余额值记录的第一输出参数和第二输出参数统计各日均余额值区间的账户数,包括:按照所述第一输出参数中的日均余额值区间,遍历同一日均余额值区间的各条日均余额值记录,将每一条日均余额值记录的第二输出参数进行累加,获得该日均余额值区间的账户数;其中,第一输出参数相同的日均余额值记录由同一个Reduce节点读取。
[0073] 优选地,在一个或多个执行第二任务的Reduce节点读取所述执行第二任务的Map节点处理完毕的不同日均余额值记录之前,还包括:
[0074] 计算每一条日均余额值记录的第一参数的哈希值,建立第一参数的哈希值与执行第二任务的Reduce节点的映射关系;其中,所述映射关系用于供所述执行第二任务的Reduce节点根据所述映射关系读取对应的日均余额值记录。
[0075] 优选地,每一条日均余额值记录的第一参数的哈希值为将所述第一参数对执行第二任务的Reduce节点总个数取模;
[0076] 其中,所述执行第二任务的Map节点与执行第一任务的Map节点是同一批节点或不同批的节点,也即,Map节点在执行完第一任务后,才可以执行第二任务。同理,所述执行第二任务的Reduce节点与执行第一任务的Reduce节点是同一批节点或不同批的节点,也即,Reduce节点在执行完第一任务后,才可以执行第二任务。
[0077] 如图3所示,本发明实施例提供了一种账户余额数据的并行处理系统,该系统包括:
[0078] Map处理模块,包括一个或多个执行第一任务的Map节点;各执行第一任务的Map节点用于读取账户余额明细数据的不同分片数据,生成所读取的分片数据中每一条余额记录的第一输出参数和第二输出参数;其中,所述第一输出参数至少包括账户ID,所述第二输出参数设定为账户状态信息,所述账户状态信息至少包括:余额值、交易日期和当天交易序号;
[0079] Reduce处理模块,包括一个或多个执行第一任务的Reduce节点;各执行第一任务的Reduce节点用于读取所述执行第一任务的Map节点处理完毕的不同余额记录,根据所述余额记录的第一输出参数和第二输出参数分别生成各账户的日均余额值记录;其中,第一输出参数相同的余额记录由同一个Reduce节点读取。
[0080] 该系统还可以包括下述特点:
[0081] 优选地,所述执行第一任务的Reduce节点用于根据所述余额记录的第一输出参数和第二输出参数分别生成各账户的日均余额值记录,包括:按照所述第一输出参数中的账户ID,遍历同一账户的各条余额记录,根据所述余额记录的第二输出参数确定该账户在查询起止时间范围内的每一天的余额值,将每一天的余额值在所述查询起止时间范围内取平均得到该账户的日均余额值,生成该账户的日均余额值记录。
[0082] 优选地,所述Map处理模块还包括一个或多个执行第二任务的Map节点,所述Reduce处理模块还包括一个或多个执行第二任务的Reduce节点;
[0083] 各执行第二任务的Map节点用于读取不同账户的日均余额值记录,生成所读取的日均余额值记录的第一输出参数和第二输出参数;其中,所述日均余额值记录的第一输出参数设定为所述日均余额值所在的区间,所述日均余额值记录的第二输出参数设定为1;
[0084] 各执行第二任务的Reduce节点用于读取所述执行第二任务的Map节点处理完毕的不同日均余额值记录,根据所述日均余额值记录的第一输出参数和第二输出参数统计各日均余额值区间的账户数,包括:按照所述第一输出参数中的日均余额值区间,遍历同一日均余额值区间的各条日均余额值记录,将每一条日均余额值记录的第二输出参数进行累加,获得该日均余额值区间的账户数;其中,第一输出参数相同的日均余额值记录由同一个Reduce节点读取。
[0085] 优选地,所述执行第一任务的Reduce节点用于根据所述余额记录的第二输出参数确定该账户在查询起止时间范围内的每一天的余额值,包括:从查询起始时间的当日至查询终止时间的当日,判断每一天是否存在余额记录,如存在,将当日交易序号最大的余额记录的余额值作为当日的最终余额值,如不存在,追溯早于当日且具有余额记录的最近日期,将所述最近日期那一天的交易序号最大的余额记录的余额值作为当日的最终余额值。
[0086] 优选地,所述Reduce处理模块还包括第一任务路由模块:
[0087] 所述第一任务路由模块,用于在一个或多个执行第一任务的Reduce节点读取所述执行第一任务的Map节点处理完毕的不同余额记录之前,计算每一条余额记录的第一参数的哈希值,建立第一参数的哈希值与所述执行第一任务的Reduce节点的映射关系;其中,所述映射关系用于供所述执行第一任务的Reduce节点根据所述映射关系读取对应的余额记录。
[0088] 优选地,所述Reduce处理模块还包括第二任务路由模块:
[0089] 所述第二任务路由模块,用于在一个或多个执行第二任务的Reduce节点读取所述执行第二任务的Map节点处理完毕的不同日均余额值记录之前,计算每一条日均余额值记录的第一参数的哈希值,建立第一参数的哈希值与执行第二任务的Reduce节点的映射关系;其中,所述映射关系用于供所述执行第二任务的Reduce节点根据所述映射关系读取对应的日均余额值记录。
[0090] 优选地,所述Map处理模块还包括分片模块:
[0091] 所述分片模块,用于在一个或多个执行第一任务的Map节点读取账户余额明细数据的不同分片数据之前,根据查询起止时间确定账户余额明细数据的读取范围,包括:将全量余额明细数据和截止到查询终止时间当天的增量余额明细数据确定为账户余额明细数据的读取范围;将属于该读取范围内的账户余额明细数据分片,建立每一个分片与执行第一任务的Map节点的映射关系;其中,所述映射关系用于供所述执行第一任务的Map节点根据所述映射关系读取对应的分片数据。
[0092] 应用示例
[0093] 下面给出一个应用例子:统计各账户今年1月1日到1月8日的日均余额,以及各账户日均余额的分布区间。(假设有两个账户:分别是id001和id002)
[0094] 两个账户的原始明细数据如表1所示,包括去年(2013年)的部分全量数据以及今年(2014年)1月1日至1月8日的增量数据。
[0095]日期 账户ID 余额(元) 序号
20140101 002 20 1
20140102 002 10 1
20140102 002 50 2
20140103 002 30 1
20140103 002 15 2
[0096]20140106 002 40 1
20140106 002 50 2
20140106 002 60 3
20140108 002 30 1
20131230 002 90 1
20140106 001 60 1
20140108 001 30 1
20131225 001 90 1
[0097] 表1
[0098] 如图4所示,基于MapReduce启动2个任务,对帐户信息进行并行处理和计算。
[0099] 第一个任务将输入的大规模数据文件分成若干分片交给Map节点并行处理,Map阶段将数据按照<帐户id,账户信息〉的形式进行输出,该步操作对海量的数据进行了分类预处理,将相同帐户的明细数据定向到同一个Reduce节点中合并处理,比如,根据账号id哈希Hash值(针对Reduce节点数量取模)分组并路由给多个Reduce并行处理;Reduce阶段对Map阶段输出的每条帐户的明细数据进行处理,包括:
[0100] a)读取从去年全量文件到查询终止时间当天增量文件;
[0101] b)Map阶段对所有的数据进行分类,输出<帐户id,帐户明细数据信息〉[0102] c)Reduce阶段选出同一个帐户id中明细数据进行组织和处理,确定每一个账户在查询起始时间到终止时间的统计周期内每一天的余额值,然后计算出每个帐户在该统计周期内的日均余额。
[0103] 帐户id001和帐户id002的所有数据分别被两个Reduce节点拉取处理。对每一个账户,Reduce节点从查询起始时间的当日至查询终止时间的当日,判断每一天是否存在余额记录,如存在,将当日交易序号最大的余额记录的余额值作为当日的最终余额值,如不存在,追溯早于当日且具有余额记录的最近日期,将所述最近日期那一天的交易序号最大的余额记录的余额值作为当日的最终余额值。
[0104] 比如,查询起始时间当天(今年1月1日),002账户有余额记录,则将002账户在2014年1月1日交易序号为1的余额记录的余额值“20元”作为002账户在在2014年1月1日的余额值;001账户在2014年1月1日没有余额记录,则将2013年的全量数据中距离今年最近的一条余额记录(2013年12月25日,交易序号为1的余额记录)的余额值“90元”作为001账户在2014年1月1日的余额值。
[0105] 对002账户,第一Reduce节点确定的002账户在查询起止时间范围内每一天的余额值,如表2所示;
[0106]查询日期 余额值(元)
20140101 20
20140102 50
20140103 15
20140104 15
20140105 40
20140106 60
20140107 60
20140108 30
[0107] 表2
[0108] 对001账户,第一Reduce节点确定的002账户在查询起止时间范围内每一天的余额值,如表3所示;
[0109]日期 余额值
20140101 90
20140102 90
[0110]20140103 90
20140104 90
20140105 90
20140106 60
20140107 60
20140108 30
[0111] 表3
[0112] 帐户002截止到2014年1月8日的日均余额计算如下:(20+50+15+15+40+60+60+30)/8=36.25(元);
[0113] 帐户001截止到2014年1月8日的日均余额计算如下:(90+90+90+90+90+60+60+30)/8=75;
[0114] 第二个任务根据第一个任务的计算结果,统计出各账户日均余额值的分布情况。
[0115] 根据第一个任务所输出的日均余额,在第二个任务的Map阶段对日均余额进行判断。例如,设置区间[0,15),[15,50),[50,100]。则帐户002的日均余额所属区间为[15,50),帐户001的日均余额所属区间为[50,100]。对账户002,以区间[15,50)作为第一输出参数(key),1作为第二输出参数(value);对账户001,以区间[50,100]作为第一输出参数(key),1作为第二输出参数(value)。在第二个任务的Reduce端,对每一个区间中的value进行累加并输出,结果即为各区间的账户分布数。
[0116] 上述实施例提供的一种账户余额数据的并行处理方法和系统,基于MapReduce将大规模的帐户余额明细数据分成若干份交给Map节点并行处理,Map阶段对数据按照帐户进行了分类,处理完成后根据帐户id分组并路由给多个Reduce节点并行处理,从而快速获取大数据量下的帐户日均余额的统计结果,处理效率高、可扩展性强。
[0117] 本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现,相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本发明不限制于任何特定形式的硬件和软件的结合。
[0118] 需要说明的是,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。