利用映射缩减集成事件处理的制作方法_3

文档序号:8516055阅读:来源:国知局
续式处理的结果与映射缩减工具的分批式处理的结果连接在一起。此外,本发明的实施例可以利用诸如CQL的单种高级语言实现这种连接。
[0047]备选的方法可以包括执行流处理的一个应用和执行批处理的另一个单独的应用。可以编写第三个定制应用来尝试把不同类型的处理结果放在一起。这种方法可能涉及使用三种不同的编程语言--一种用于流处理、一种用于批处理、及一种用于连接每种类型的处理结果。
[0048]为了避免使用多种不同的语言,本发明的一种实施例包括将高级CQL查询编译成功能上等效的映射缩减程序。CQL查询的执行结果然后与映射缩减程序的结果合并。CQL查询可以实时地产生结果,而映射缩减程序可以在较大的数据集上执行更深入的分析。因此,合并的结果既是实时的又是深入的。这种合并可以基于被编译为生成系统的实时和深入分析组件两者的单个用户指定的查询来实现。不需要构造用不同语言编写的单独的应用。
[0049]图5根据本发明的实施例说明用于基于单个查询生成连续和批处理组件的技术500的例子的流程图。在方框502,接收到用CQL指定的查询。在方框504,编译器将CQL查询编译成可以被连续事件处理器执行的连续事件处理执行计划。在方框506,编译器将CQL查询编译成功能上等效于连续事件处理执行计划并且可以作为批作业以分布式的方式被映射缩减程序执行的映射任务和缩减任务。在方框508,编译器生成可以连接由连续事件处理器产生的结果和由映射缩减程序产生的结果的合并组件。在方框510,连续事件处理器相对于来自事件流的当前到达事件执行计划,而映射缩减程序相对于之前存储在数据库中的数据执行映射任务和缩减任务。在方框512,合并组件连接由连续事件处理器和映射缩减程序产生的结果。控制传递回方框510。
[0050]生成相应的实时和批运算符
[0051]在示例情景中,用户可能想要对在一组文本中对特定单词的引用数量进行计数。映射缩减工具,诸如Hadoop,可以处理一组文件中的每个文件,以便对特定单词的引用数量进行计数。被映射缩减工具处理的这组文件可能包含几年前从事件流中存储的短文本。例如,除了相对较近的过去(例如,最近的分钟)之外,这组文件可能包含在十年的跨度上从流中接收到的短文本。当这种情况发生时,连续事件处理器可以从诸如Facebook或Twitter的在线应用中接收类似的短实时文本。连续事件处理器可以在那些实时文本被生成之后不久(例如,在用户利用Facebook或Twitter张贴这些文本后立即)对这些实时文本中对特定单词的引用数量进行计数。由映射缩减工具计算的计数可以与由连续事件处理器计算的计数进行连接。
[0052]为了指定要执行的单词计数任务,用户可以使用CQL来指定查询。在语法上,CQL类似于结构化查询语言(SQL)。查询可以大致地采用以下形式,诸如:FR0M locat1n GROUPBY word SELECT count。这种查询可以从指定的位置收集所有的句子、将来自这些句子中的唯一的单词分到不同的组中、然后对每组中的单词的数量进行计数。因此,查询可以利用相对简单的格式来指定。
[0053]接收用户指定的CQL查询的编译器可以将查询分解成单独的运算符。这些运算符可以包括,例如,分组(group-by)运算符、执行计数的聚合(aggregat1n)运算符、也充当源(source)运算符的输出(output)运算符,等等。基于这组运算符,编译器可以生成(a)用于实时事件处理的查询执行计划,和(b)用于处理大型数据集的批作业。参考以上具体的示例单词计数情景,批作业的生成可以包括将各种句子映射到单独的唯一的单词中的映射算符的生成。批作业的生成还可以包括将每组唯一的单词缩减成表示那些单词数量的相应数字的缩减运算符的生成。作为生成查询执行计划的一部分,编译器可以生成将批缩减运算符的结果与连续聚合运算符的结果合并的合并(merge)运算符。批作业然后可以与实时连续查询同时执行。合并运算符获得来自映射缩减组件的批视图和来自连续事件处理器的实时视图。
[0054]图6是根据本发明的实施例说明用于基于查询生成功能上等效的运算符的技术600的例子的流程图。在方框602,查询的当前元素被设置为查询的第一个元素。在方框604,确定当前元素的类型(例如,分组、聚合、选择等)。在方框606,基于当前元素的类型选择连续事件处理运算符类型。在方框608,基于当前元素的类型选择批处理运算符类型(例如,映射、缩减等)。在方框610,生成所选择的连续事件处理运算符类型的运算符,并且将其添加到连续事件处理计划。在方框612,生成所选择的批处理运算符类型的运算符,并且将其添加到批处理计划。在方框614,做出在当前元素之后该查询是否包含任何元素的决定。如果是,则控制传递到方框616。否则,控制传递到方框618。
[0055]在方框616,查询的当前元素被设置为查询的下一个元素。控制传递回到方框604。
[0056]可替代地,在方框618,生成合并运算符,并且将其添加到连续事件处理计划。然后,图6中示出的技术完成。
[0057]无状态和有状态运算符
[0058]一般地,在CQL中存在两组不同的运算符。一组这种运算符是无状态的。利用这种无状态的运算符,一个输入通常被映射到在互连的运算符的图中的一个或多个输出。根据本发明的实施例,无状态CQL运算符对应于批处理领域中的映射运算符。另一组CQL运算符是有状态的。利用这种无状态的运算符,多个输入通常被映射到在互连的运算符的图中的一个输出。根据本发明的实施例,有状态CQL运算符对应于批处理领域的缩减运算符。
[0059]因此,在本发明的一种实施例中,编译器确定CQL查询元素是否将一个输入映射到一个或多个输出。如果是,则编译器确定该元素对应于无状态的事件处理运算符。过滤运算符是无状态的事件处理运算符的例子。响应于确定事件处理运算符是无状态的运算符,编译器生成用于包括在批处理作业中的功能上等效的映射运算符(用选择的映射缩减语言)。可替代地,编译器可以确定CQL查询元素是否将多个输入映射到单个输出。如果是,则编译器确定该元素对应于有状态的事件处理运算符。窗口(window)运算符是有状态的事件处理运算符的例子。响应于确定事件处理运算符是有状态的运算符,编译器生成用于包括在批处理作业中的功能上等效的缩减运算符(用选择的映射缩减语言)。
[0060]CQL查询的元素可以执行特定类型的聚合功能(例如,求和(sum)、平均(average)、计数(count),等等)。在本发明的实施例中,编译器确定CQL查询聚合运算符的特定聚合类型,并且作为响应生成执行相同类型聚合功能的缩减运算符。因此,例如,如果连续事件运算符执行求和操作,则编译器作为响应生成执行求和操作的缩减运算符,但是如果连续事件运算符执行计数操作,则编译器作为响应生成执行计数操作的聚合算符。
[0061]避免合并结果中的重复事件处理
[0062]根据本发明的实施例,以使实时连续处理结果和非实时批处理结果之间不产生重叠的方式设计合并运算符。合并运算符可以包含保护措施,其防止任何数据项由于被实时和非实时两个方面处理而与自身合并。因此,在连接的结果的任何特定迭代过程中,将不会有单个事件被考虑多于一次。在本发明的一种实施例中,在任何特定的迭代过程中,合并运算符只接受来自比指定的时间点(例如,一分钟前)旧的非实时(例如,映射缩减)组件的结果,并且只接受来自不比指定的时间点旧的实时(例如,连续事件处理器)组件的结果。因为处理可以被重复地执行,因此时间点可以随着每次迭代推进。
[0063]例如,在第一次迭代中,合并运算符可以定义大型数据集的边界只包括在当前日期上直到12:50:45发生的事件。合并运算符可以在该第一次迭代中定义由连续事件处理器处理的数据集的边界只包括比当前日期上的12:50:45更近发生的事件。假定用于连续事件处理器的时间窗口是十秒,则对于第二次迭代,这个边界可以从12:50:45推进十秒种到12:50:55ο在第一次迭代过程中(在跨12:50:45到12:50:55的十秒时间间隔中)接收到的事件在它们到达时已被添加到大型数据集,并且已被标记时间戳以指示其从事件流的到达时间。在每次迭代的结束处,边界可以推进一个单位的实时事件处理所需的时间量。这个量可以基于对连续事件处理器可用的存储器的大小。在本发明的一种实施例中,这个时间量不是静态的,而是可以从一个迭代到另一个迭代变化,使得边界可以在不同的迭代之后推进不同的量。在这种实施例中,每次迭代的边界可以基于要被连续事件处理器处理的指定的事件数量,而不是固定的时间上的持续时间。
[0064]因此,在任何特定的迭代过程中,合并运算符确保被连续事件处理器在那个特定迭代过程中处理的事件集合不能包括也被批处理器在那个相同的特定的迭代过程中处理的任何事件,尽管这些事件可以在以后被包括在将由批处理器在随后的迭代过程中处理的事件集合中。本质上,合并运算符可以计算由连续事件处理器和批处理器产生的结果集合的联合(un1n),只是在统一的集合中事件的时间戳不允许重叠。
[0065]应当指出,合并运算符在一些情况下可能不仅仅只做连结(concatenate)或求和实时结果和批结果。例如,如果在处理中包括平均运算符,则合并运算符可以执行更复杂的合并。例如更具体的例子,如果连续事件处理器确定四个数字的平均值是4,并且如果批处理器确定八个数字的平均值是10,则合并运算符将确定所有十二个数字的平均值是(4*4+8*10)/12 = 8。执行的这种合并可以取决于在查询中被执行的聚合操作的类型。
[0066]将CQL查询编译成Pig Latin程序
[0067]Pig Latin是可以被映射缩减使用的语言。在本发明的一种实施例中,CQL查询的编译可以包括在Pig Latin中生成模拟运算符。基于这些模拟运算符,功能上等效的PigLatin程序可以被编译器自动地生成,同时编译用于被连续查询处理器使用的CQL查询。映射缩减工具可以在连续查询处理器的CQL查询的执行的同时执行Pig Latin程序。
[0068]但是,在本发明的备选实施例中,不生成Pig Latin运算符。相反,可以生成可被映射缩减工具使用的本地(native)运算符。本发明的实施例不限于其中生成Pig Latin程序的实施例。
[0069]硬件概述
[0070]图3是说明可以根据本发明实施例使用的系统环境300的组件的简化框图。如所示出的,系统环境300包括一个或多个客户端计算设备302、304、306、308,它们被配置为操作客户端应用,诸如web浏览器、专有客户端(例如,Oracle Forms),等等。在各种实施例中,客户端计算设备302、304、306和308可以与服务器312交互。
[0071]客户端计算设备302、304、306、308可以是通用个人计算机(作为例子,包括运行各种版本的Microsoft Windows和/或Apple Macintosh操作系统的个人计算机和/或膝上型计算机)、蜂窝电话或PDA(运行诸如Microsoft Windows Mobile的软件,并且启用因特网、电子邮件、SMS、Blackberry或其它通信协议),和/或运行任何各种商业上可用的UNIX或类-UNIX操作系
当前第3页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1