基于任务粒度的MapReduce报表任务执行方法

文档序号:6522604阅读:231来源:国知局
基于任务粒度的MapReduce报表任务执行方法
【专利摘要】本发明涉及一种基于任务粒度的MapReduce报表任务执行方法,包括以下步骤:S10、验证数据报表任务Jobi的合法性以及优先级,将数据报表任务放入Job队列中;S20、基于最小粒度分割,依次对每一Jobi进行子任务划分,得到包含所有子任务的集合Set1;S30、去除集合Set1中重复的子任务,得到集合Set2;S40、对集合Set2中的子任务进行最大粒度合并,得到集合Set3;S50、根据hadoop即时计算能力以及集合Set3的子任务数量创建运算单元;S60、由运算单元执行集合Set3的子任务。本发明可以自适应寻找报表计算任务队列中的可复用的子任务,并执行分割和合并,有效提高计算效率。
【专利说明】基于任务粒度的MapReduce报表任务执行方法
【【技术领域】】
[0001]本发明涉及一种基于任务粒度的MapReduce报表任务执行方法。
【【背景技术】】
[0002]在大数据时代,数据量成爆炸式增长,这导致了对数据的计算处理和有效存储提出了极高的要求。Hadoop生态圈的提出为海量数据的大规模计算和分布式可靠存储提供了一个强大的工具。在Hadoop中,MapReduce是一个为海量数据的批量分析和计算提供了一个可靠、易用、可规模化的关键组件,特别是广泛用于基于海量日志数据的报表计算。然而,在现实使用中,MapReduce框架下的报表计算任务的执行受到了 Hadoop集群的处理能力以及集群内部各节点之间数据传输速度的制约,特别是在多任务执行的情况下,MapReduce任务的执行不可避免地出现竞争。
[0003]针对相同数据集的报表计算任务往往有如下特点:(1)由于计算所基于的是同一个数据集,导致相同的数据可能会被多个MapReduce任务执行完全相同的读取过程,由于Hadoop Distributed File System的读写性能是影响MapReduce计算性能的关键因素之一,所以针对相同数据的多个报表计算任务会重复读取一个数据集导致性能下降;(2)Hadoop的MapReduce任务执行机制缺乏相应策略,现在原生的hadoop集群对于MapReduce多任务的执行没有做出任何优化,如果存在相同或者可复用的报表计算任务,该任务仍会被执行多次;(3)基于相同数据集的报表计算任务通常是基于相同的计算条件的,因此,多个报表计算任务的某些计算子任务可以被`合并。
[0004]现有常用方法是没有进行任何优化,导致hadoop计算性能浪费。另一个方法是使用Pig或者hive等工具来优化数据报表计算过程,但是pig和hive都是基于单个任务的优化,无法对一个任务的队列进行整体优化,且Pig和hive的优化取决于它们的脚本语句,对脚本编写者的要求更高。

【发明内容】

[0005]本发明旨在解决上述现有技术中存在的问题,提出一种基于任务粒度的MapReduce报表任务执行方法。
[0006]本发明提出的基于任务粒度的MapReduce报表任务执行方法包括以下步骤:S10、验证数据报表任务Jobi的合法性以及优先级,将数据报表任务放入Job队列中,其中,I^i ^K, K为所述数据报表任务的个数;S20、基于最小粒度分割,依次对每一 Jobi进行子任务划分,得到包含所有子任务的集合Set1 ;S30、去除集合Set1中重复的子任务,得到集合Set2 ;S40、对集合Set2中的子任务进行最大粒度合并,得到集合Set3,其中,每一 Jobi依赖于集合Set3中的若干子任务;S50、根据hadoop即时计算能力以及集合Set3的子任务数量创建运算单元;S60、由所述运算单元执行集合Set3的子任务。
[0007]本发明提出的基于任务粒度的MapReduce报表任务执行方法可以自适应寻找报表计算任务队列中的可复用的子任务,并执行分割和合并,最大限度地利用Hadoop集群的计算能力和数据读写能力,有效地提高了计算效率。
【【专利附图】

【附图说明】】
[0008]图1为本发明提出的基于任务粒度的MapReduce报表任务执行方法流程图。
[0009]图2为本发明提出的基于任务粒度的MapReduce报表任务执行方法环境架构图。
[0010]图3为本发明一实施例的基于任务粒度的MapReduce报表任务执行方法步骤示意图。
【【具体实施方式】】
[0011]下面结合具体实施例及附图对本发明作进一步详细说明。下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明的技术方案,而不应当理解为对本发明的限制。
[0012]在本发明的描述中,术语“内”、“外”、“纵向”、“横向”、“上”、“下”、“顶”、“底”等指
示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明而不是要求本发明必须以特定的方位构造和操作,因此不应当理解为对本发明的限制。
[0013]本发明提供一种基于任务粒度的MapReduce报表任务执行方法,如图1所不,该方法包括以下步骤:S10、验证数据报表任务Jobi的合法性以及优先级,将数据报表任务放入Job队列中,其中,I < i < K,K为所述数据报表任务的个数;S20、基于最小粒度分割,依次对每一 Jobi进行子任务划分,得到包含所有子任务的集合Set1 ;S30、去除集合Set1中重复的子任务,得到集合Set2 ;S40、对集合Set2中的子任务进行最大粒度合并,得到集合Set3,其中,每一 Jobi依赖于集合Set3中的若干子任务;S50、根据hadoop即时计算能力以及集合Set3的子任务数量创建运算单元;S60、由所述运算单元执行集合Set3的子任务。
[0014]以应用于Hadopp环境下的MapReduce框架下基于任务粒度的数据报表任务优化执行方法为例,本发明所公开的框架由Waitress、Manager、TaskExecutor> Worker四个模块组成,模块之间拓扑结构反映了框架的执行流程。其中,一个Mapreduce框架下的数据报表计算任务可以被分割为多个子任务,该Mapreduce任务的执行可以被分解为由这些子任务所组成的拓扑结构的执行;对于一组数据报表计算任务,先对每个数据报表计算任务执行最小粒度的 分割,得到若干的子任务,然后去掉重复的子任务,接着执行最大粒度的合并,得到最终执行的子任务序列。
[0015]具体地,Waitress模块负责验证数据报表任务的合法性和优先级,报告具体的任务执行进度给任务递交者Manager模块维护了两个队列:Job队列和Task队列,任务递交者递交的MapReduce任务称为Job,经过优化后生成MapReduce任务称为Task ;Manage模块一方面负责动态处理Job队列,根据Job队列的变化,动态地分割和合并相关Job,把Job队列优化为一个Task队列;TaskExecutor模块负责执行Task队列,TaskExecutor模块根据hadoop的即时计算能力动态创建多个worker,由worker负责执行一个具体的Task。
[0016]优选地,可使TaskExecutor模块维护了一个缓存池TaskResultCache,其中存储了历史Task的执行结果,如果Task队列中存在一个Task,其执行结果已经被缓存在TaskResultPool中,则该Task可以避免被执行。[0017]Worker为一个负责执行task的线程或者进程,负责监视Hadoop中该Task的执行,并把Task的执行情况反馈给TaskExecutor模块。
[0018]例如对于数据报表任务Job队列IJob1, Job2,…},每个Jobi都可以基于最小粒度分割被分割为一个由若干Task组成的集合Seti=Itaskil, taski2,…},该Jobi的执行结果为taskn, taski2,…执行结果的并集Job队列(Job1, Job2,…}中,对所有的Jobi执行分割操作,得到若干个Task集合,基于最大粒度合并合并这些集合,得到无重复项的Task集合Setall=Itask1, task2,…};对集合Setall,将其划分为若干个子集Set' ^Set' 2,...,任意Jobi的执行依赖于某些子集的执行,然后对于一个子集Set, i,合并该子集包含的所有Task为一个独立的MapReduce任务taskj',贝丨J Job队列(Job1, Job2,...}被处理为Task队列{task' j, task/ 2,…}。对于一个Jobi,如果依赖于{task' i; task/ f.},其执行结果等于task' i, task/」,…执行结果的并集。
[0019]图2所示为Hadopp环境下的MapReduce框架下基于任务粒度的数据报表任务优化执行方法环境架构图。
[0020]如图3所示,在一实施例中,以一 Job队列IJob1, Job2,Job3}为例,在执行最小粒度分割时,Job1 被分割为 Set1= {task3、task4、taskj , Job2 可以为分割为 Set2= Itask1' task2、task3},Job3 可以被分割为 Set3=ItaskptaskiJ Ctask^task5 都是不可再分割的 Mapreduce任务),合并它们并去掉重复 task,得到 Setall=Set1 U Set2 U Set3=Itask1, task2, task3,task4, taskj,然后执行最大粒度合并,合并tash和task2为新的子任务task12,合并task4和task5为新的子任务task45, task3保留独立,则Job1依赖于task3和task45, Job2依赖于 task12 和 task3, Job3 则是 task12。至此得到的新的 Task 队列为{Task12, Task45, Task3},Task的队列中的任务排序可以由任务递交者的优先级决定。
`[0021]TaskExecutor面孔根据Hadoop集群的计算状态从Task队列中取出一个任务,首先检查是否在TaskResultCache中已经存在,如果没有,则生成一个worker,然后把该任务交由worker向Hadoop集群递交执行,并由worker持续监视执行状态。
[0022]最终,Job1的执行结果就是task3和task45的执行结果的并集Job2的执行结果就是task12和task3的执行结果的并集;Job3的执行结果就是task12的执行结果。
[0023]以租车交易记录的报表计算任务为例,一原始无序的数据集中的每一个数据项为一个出租车交易记录:{号牌号码,经度,纬度,汇报时间,车辆状态,车牌种类,上车时间,下车时间,营业里程,计时时间,消费金额,空驶里程,所属出租车公司}。假设有Jobl的报表计算条件为{出租车类型=红的,交易日期类型=工作日,所属出租车公司=公司A,单次交易营运时间={7,12},单次交易营运里程〈100km,单车单天营运交易数={100,200},单车单天营运金额>800,单车单天行驶里程>200km,营业日期范围= {2012-02-01,2012-03-15} ;Job2的报表计算条件为{出租车类型=红的,交易日期类型=周末,所属出租车公司=所有,单次交易营运时间={8,20},单次交易营运里程〈100km,单车单天营运交易数={100,200},单车单天营运金额>1000,单车单天行驶里程>200km,营业日期范围={2012-02-01,2012-03-15}。如果没有任何优化,则Hadoop计算集群会对同样一个数据集基于不同的计算条件执行完全相同的操作,无法避免对数据集的重复读写和重复计算。
[0024]而采用本发明所提出的优化执行方法,则首先对每个Job执行最小粒度的分割,例如Job1被分割为九个Task,每个Task的计算条件分别为{出租车类型=红的}、{交易日期类型=工作日}、{所属出租车公司=公司A}、{单次交易营运时间={7,12}}、{单次交易营运里程〈100km}、{单车单天营运交易数={100,200}}、{单车单天营运金额>800}、{单车单天行驶里程>200km}、{营业日期范围={2012-02-01,2012-03-15}};同理,对Job2执行最小粒度分割而生成一组Task。接着,执行最大粒度的合并,生成一个由Task1,Task2, Task3组成的Task队列,其中Task1计算条件为{出租车类型=红的,单次交易营运里程〈100km,单车单天营运交易数={100,200},单车单天行驶里程>200km,营业日期范围= {2012-02-01,2012-03-15}} ;Task2计算条件为{交易日期类型=工作日,所属出租车公司=公司A,单次交易营运时间={7,12},单车单天营运金额>800} ;Task3计算条件为{交易日期类型=周末,所属出租车公司=所有,单次交易营运时间={8,20},单车单天营运金额>1000}。TaskExecutor模块从Task队列中取得Task,然后检查是否在TaskResultCache中是否已经存在该task的执行结果,如果没有,贝U仓Il建一个worker,交由worker执行。最终,可知Job1的执行结果为Task1和Task2执行结果的并集;Job2的执行结果为Task1和Task3执行结果的并集;worker执行完毕之后,TaskExecutor模块会把Task1, Task2和Task3的执行结果进行缓存。
[0025]本发明提出的基于任务粒度的MapReduce报表任务执行方法可以自适应寻找报表计算任务队列中的可复用的子任务,并执行分割和合并,最大限度地利用Hadoop集群的计算能力和数据读写能力,有效地提高了计算效率。
[0026]虽然本发明参照当前的较佳实施方式进行了描述,但本领域的技术人员应能理解,上述较佳实施方式仅用来解释和说明本发明的技术方案,而并非用来限定本发明的保护范围,任何在本发明的精神和原则范围之内,所做的任何修饰、等效替换、变形、改进等,均应包含在本发明的权利要求保护范围之内。
【权利要求】
1.一种基于任务粒度的MapReduce报表任务执行方法,包括以下步骤: S10、验证数据报表任务Jobi的合法性以及优先级,将数据报表任务放入Job队列中,其中,I < i < K,K为所述数据报表任务的个数; S20、基于最小粒度分割,依次对每一 Jobi进行子任务划分,得到包含所有子任务的集合 Set1 ; S30、去除集合Set1中重复的子任务,得到集合Set2 ; S40、对集合Set2中的子任务进行最大粒度合并,得到集合Set3,其中,每一 Jobi依赖于集合Set3中的若干子任务; S50、根据Hadoop即时计算能力以及集合Set3的子任务数量创建运算单元; S60、由所述运算单元执行集合Set3的子任务。
2.根据权利要求1所述的基于任务粒度的MapReduce报表任务执行方法,其特征在于,将集合Set3子任务的执行结果存入缓存池中。
3.根据权利要求2所述的基于任务粒度的MapReduce报表任务执行方法,其特征在于,在所述缓存池中对集合Set3的子任务进行检索,若相应子任务执行结果已存在,则不创建相应子任务的运算单元;若相应子任务执行结果不存在,则创建相应子任务的运算单元。
4.根据权利要求1至 3任意一项所述的基于任务粒度的MapReduce报表任务执行方法,其特征在于,所述运算单元为线程或者进程。
5.根据权利要求1所述的基于任务粒度的MapReduce报表任务执行方法,其特征在于,集合Set3中的每一子任务为集合Set2中若干子任务的并集。
6.根据权利要求1所述的基于任务粒度的MapReduce报表任务执行方法,其特征在于,所述运算单元与集合Set3的子任务--对应。
【文档编号】G06F9/50GK103699441SQ201310656006
【公开日】2014年4月2日 申请日期:2013年12月5日 优先权日:2013年12月5日
【发明者】邹瑜斌, 张帆, 白雪, 闫茜, 须成忠 申请人:深圳先进技术研究院
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1