为Hbase数据库上运行的MapReduce分配Map task的方法及装置的制造方法
【专利摘要】本发明提供一种为Hbase数据库上运行的MapReduce分配Map的方法及装置,用以解决目前由于大量数据集中于少数几个map task中,导致任务效率低的问题,该方法包括:将Hbase数据库的主键Rowkey所标识的范围划分成多个区间;为每个区间分配一个预先创建的扫描scan对象;在MapReduce运行时为每个scan对象分配一个Map task,该方案提高了程序运行的效率。
【专利说明】为Hbase数据库上运行的MapReduce分配Map task的方法及装置
技术领域
[0001 ] 本发明涉及通讯领域,特别是涉及一种为Hbase数据库上运行的MapReduce分配Map task的方法及装置。
【背景技术】
[0002]Hadoop是目前业界使用最多,最成熟的开源大数据存储和计算平台,它包含了很多组件,其中MapReduce(简称MR)是hadoop平台上的编程模型,适用于大数据量下的分布式计算。HBase是一个开源的非关系型分布式数据库(NoSQL),它运行于HDFS(DistributedFile System,Hadoop分布式文件系统)文件系统之上,为Hadoop提供类似于BigTable(大规模分散数据库)规模的服务,Hbase的jar包里提供了 API (Appl i cat 1n ProgrammingInterface,应用程序编程接口),可以使用MapReduce来读取或者写Hbase。其中,Table InputFormatBase类提供了对表数据的大部分操作,其子类TableInputFormat则提供用于处理表数据并生成键值对的功能,TableInputFormat类将数据表按照Reg1n分割成split,既有多少个Reg1n就有多个split。在MR job中每个split对应一个map task,据官方网站介绍,map task的数量即mapred.map.tasks的参数值,用户不能直接设置这个参数。
[0003]在hbase上进行MR统计时,由于大量数据集中于少数几个map中,导致任务效率低、运行时间长,以及单个map task(map task的数量即mapred.map.tasks的参数值,用户不能直接设置这个参数),占用资源多,容易失败等弊端。
【发明内容】
[0004]本发明提供一种为Hbase数据库上运行的MapReduce分配Map task的方法及装置,用以解决目前由于大量数据集中于少数几个Map task中,导致任务效率低的问题。
[0005]根据本发明的一个方面,提供了一种为Hbase数据库上运行的MapReduce分配Maptask的方法,包括:将Hbase数据库的主键Rowkey所标识的范围划分成多个区间;为每个区间分配一个预先创建的扫描scan对象;在MapReduce运行时为每个scan对象分配一个Maptask。
[0006]其中,将Hbase数据库的主键Rowkey所标识的范围划分成多个区间,包括:将Rowkey所标识的范围平均划分成多个连续的区间。
[0007]进一步的,上述方法还包括:在Rowkey所标识的范围划分成多个区间之前,仓Il建第一 scan对象;为第一 scan对象设置共用属性;在Rowkey所标识的范围划分成多个区间之后,以第一 scan对象为副本创建与区间对应的第二 scan对象,并将区间的开始与结束位置参数加入到第二 scan对象中。
[0008]其中,将Hbase数据库的主键Rowkey所标识的范围划分成多个区间,包括:将Rowkey划分为接收到的外部输入的数目或预设的数目个连续的区间。
[0009]进一步的,上述方法还包括:在为每个区间分配一个预先创建的scan对象之后,将分配的所有scan对象提交给MapReduce;当在Hbase上进行MapReduce统计时,根据统计到的scan对象的数量确定同时执行的Map task的数量。
[0010]根据本发明的第二个方面,提供了一种为Hbase数据库上运行的MapReduce分配Map task的装置,包括:划分模块,用于将Hbase数据库的主键Rowkey所标识的范围划分成多个区间;第一分配模块,用于为每个区间分配一个预先创建的扫描scan对象;第二分配模块,用于在MapReduce运行时为每个scan对象分配一个Map task。
[0011]其中,上述划分模块具体用于:将Rowkey所标识的范围平均划分成多个连续的区间。
[0012]进一步的,上述装置还包括:第一创建模块,用于在将Rowkey所标识的范围划分成多个区间之前,创建第一 scan对象;设置模块,用于为第一 scan对象设置共用属性;第二创建模块,用于在将Rowkey所标识的范围划分成多个区间之后,以第一scan对象为副本创建与区间对应的第二 scan对象,并将区间的开始与结束位置参数加入到第二 scan对象中。
[0013]其中,上述划分模块具体用于:将Rowkey划分为接收到的外部输入的数目或预设的数目个连续的区间。
[0014]进一步的,上述装置还包括:提交模块,用于在为每个区间分配一个预先创建的scan对象之后,将分配的所有scan对象提交给MapReduce;确定模块,用于当在Hbase上进行MapReduce统计时,根据统计到的scan对象的数量确定同时执行的Map task的数量。
[0015]本发明有益效果如下:
[0016]本实施例提供的方法,对Hbase数据库的主键Rowkey所标识的范围划分为多个区间,并为每个区间创建一个scan对象,在MapReduce运行时为每个scan对象分配一个Maptask,使得Map task的数量增加,从而在Map阶段可以实现多个Map task并行执行,使得Map阶段的时间被大幅度缩短,进而提高了效率。
【附图说明】
[0017]图1是本发明实施例1中提供的为Hbase数据库上运行的MapReduce分配Map task的方法的流程图;
[0018]图2是本发明实施例2中提供的为Hbase数据库上运行的MapReduce分配Map task的方法的流程图;
[0019]图3是本发明实施例3中提供的为Hbase数据库上运行的MapReduce分配Map task的装置的结构框图。
【具体实施方式】
[0020]为了解决现有技术由于大量数据集中于少数几个Maptask中,导致任务效率低的问题的问题,本发明提供了一种为Hbase数据库上运行的MapReduce分配Map task的方法及装置,以下结合附图以及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不限定本发明。
[0021]实施例1
[0022]本实施例提供了一种为Hbase数据库上运行的MapReduce分配Map task的方法,该方法用于为Hbase数据库上运行的mapreduce程序分配Map task的数量,图1是该方法的流程图,如图1所示,该方法包括如下步骤:
[0023]步骤101:将Hbase数据库的主键Rowkey所标识的范围划分成多个区间;
[0024]步骤102:为每个区间分配一个预先创建的scan对象;
[0025]其中,scan是在Hbase数据中进行查询时所用的数据结构,其中指定了查询的起始和结束位置。
[0026]步骤103:在MapReduce运行时为每个scan对象分配一个Map task。
[0027]其中,Map(映射)Reduce(归纳)是hadoop平台上的编程模型,用于大规模数据集(大于1TB)的并行运算,其中,Map task是用来把一组键值对映射成一组新的键值对。
[0028]其中,将Hbase数据库的主键Rowkey所标识的范围划分成多个区间,具体可以包括:将Hbase数据库的主键Rowkey所标识的范围平均划分成多个连续的区间;或更进一步的包括:将Rowkey划分为接收到的外部输入的数目或预设的数目个连续的区间,即,划分后的区间个数可以通过预设经验值或用户输入指定的数值来确定。
[0029]其中,在上述步骤101至103的基础上,上述方法还可以进一步包括:
[0030]在将Hbase数据库的主键Rowkey所标识的范围划分成多个区间之前,创建第一s can对象;
[0031 ]为该第一 scan对象设置共用属性;在将Hbase数据库的主键Rowkey所标识的范围划分成多个区间之后,以第一scan对象为副本创建与划分后的各区间对应的第二scan对象,并将划分后的各区间的开始与结束位置参数加入创建的各第二scan对象中,基于此,与划分后的各区间对应的各第二 scan对象在均具有第一 scan对象的共用属性的基础上,还具有其对应的区间的开始与结束位置参数。
[0032]进一步的,上述方法还可以包括:
[0033]在为每个区间分配一个预先创建的scan对象之后,将分配的所有scan对象提交给MapReduce;
[0034]当在Hbase上进行MapReduce统计时,根据统计到的scan对象的数量确定同时执行的Map task的数量。
[0035]本实施例提供的方法,对Hbase数据库的主键Rowkey所标识的范围划分为多个区间,并为每个区间创建一个scan对象,在MapReduce运行时为每个scan对象分配一个Maptask,使得Map task的数量增加,从而在Map阶段可以实现多个Map task并行执行,使得Map阶段的时间被大幅度缩短,进而提高了效率。
[0036]实施例2
[0037]本实施例在上述实施例1的基础上对本发明提供的为Hbase数据库上运行的MapReduce分配Map task的方法进行进一步说明:
[0038]将一个跨度大的Rowkey范围(例如00000000?10000000),平均划分成多个连续的小rowkey区间(例如,00000000?01000000 ,01000000?02000000,……,09000000?10000000)。为每个小rowkey区间创建一个scan对象提交查询,作为MapReduce程序运行统计分析的数据源。在MapReduce程序运行时会为每个创建的这些scan分配I个map与之对应,一个小rowkey区间对应一个scan,一个scan对应一个map,本实施例中小:row指划分之后的rowkey 区间。
[0039]这样,通过控制划分的rowkey区间的个数,可以实现控制map个数的目的。
[0040]如图2所示,以伪代码片段为例对rowkey的划分以及scan的创建进行说明:
[0041 ]步骤一:创建 scanO
[0042]Scan scan0 = new ScanO ;
[0043]步骤二:设置一些公有属性,此处设置的公有属性与现有技术中创建scan后设置的公有属性相同,例如,可以包括表名、缓存大小等信息。
[0044]scan0.setAttribute(设置一些共有属性);
[0045]scan0.set其他的公用参数;
[0046]步骤三:将rowkey划分成连续的多个小区间;
[0047]for(int i = 0; i〈map个数;i++) {
[0048]String StartRow =第i个小Rowkey区间开始;
[0049]String StopRow =第i个小Rowkey区间结束;
[0050]步骤四:创建多个scan,将小rowkey区间加入scan中
[0051]Scan scani =new Scan(scanO);
[0052]设置scani 的开始 rowkey 为 startRow;
[0053]设置scani 的结束 rowkey 为s topRow;
[0054]将scani添加到一个列表scanList;}
[0055]步骤五:将这些s can—起提交给MR;
[0056]TableMapReduceUtil.1nitTableMapperJob(scanList,其他的一些参数);
[0057]通过本方案增加了maptask的个数后,大幅度缩短程序的运行时间,提高了运行效率:使得map阶段可以有多个map task并行执行,在map阶段用时缩短到原来的1/3?I/10,效率提升3?10倍;同时,通过增加了map task的个数后,提高了程序运行的稳定性:由于单个map task更简洁精焊,大大降低了map task失败的几率,使得程序运行更加稳定。
[0058]实施例3
[°°59] 本实施例提供了一种为Hbase数据库上运行的mapreduce分配Map task的装置,该装置用于实现上述实施例1以及实施例2提供的为Hbase数据库上运行的mapreduce分配Maptask的方法,图3是本实施例提供的为Hbase数据库上运行的mapreduce分配Map task的装置的结构框图,如图3所示,该装置30包括如下组成部分:
[0060]划分模块31,用于将Hbase数据库的主键Rowkey所标识的范围划分成多个区间;
[0061]第一分配模块32,用于为划分后的每个区间分配一个预先创建的scan对象;
[0062]第二分配模块33,用于在MapReduce运行时为每个scan对象分配一个Map task。
[0063]其中,上述划分模块31具体用于:
[0064]将Hbase数据库的主键Rowkey所标识的范围平均划分成多个连续的区间。
[0065]进一步的,上述装置30还包括:
[0066]第一创建模块,用于在将Hbase数据库的主键Rowkey所标识的范围划分成多个区间之前,创建第一 scan对象;设置模块,用于为第一 scan对象设置共用属性;第二创建模块,用于在将Hbase数据库的主键Rowkey所标识的范围划分成多个区间之后,以第一 scan对象为副本创建与划分后的区间对应的第二 scan对象,并将各划分后的区间的开始与结束位置参数加入第二scan对象中。
[0067]其中,上述划分模块31具体可以用于:将Rowkey划分为接收到的外部输入的数目或预设的数目个连续的区间。
[0068]进一步的,上述装置30还可以包括:提交模块,用于在为每个区间分配一个预先创建的scan对象之后,将分配的所有scan对象提交给MapReduce ;确定模块,用于当在Hbase上进行MapReduce统计时,根据统计到的scan对象的数量确定同时执行的Map task的数量。
[0069]本实施例提供的方案,对Hbase数据库的主键Rowkey所标识的范围划分为多个区间,并为划分后的每个区间创建一个scan对象,在MapReduce运行时为每个scan对象分配一个Map task,使得Map task的数量增加,从而在Map阶段可以实现多个Map task并行执行,使得Map阶段的时间被大幅度缩短,进而提高了效率。
[0070]尽管为示例目的,已经公开了本发明的优选实施例,本领域的技术人员将意识到各种改进、增加和取代也是可能的,因此,本发明的范围应当不限于上述实施例。
【主权项】
1.一种为Hbase数据库上运行的MapReduce分配Map task的方法,其特征在于,包括: 将Hbase数据库的主键Rowkey所标识的范围划分成多个区间; 为每个所述区间分配一个预先创建的扫描scan对象; 在MapReduce运行时为每个所述scan对象分配一个Map task。2.根据权利要求1所述的方法,其特征在于,所述将Hbase数据库的主键Rowkey所标识的范围划分成多个区间,包括: 将所述Rowkey所标识的范围平均划分成多个连续的区间。3.根据权利要求1所述的方法,其特征在于,所述方法还包括: 在将所述Rowkey所标识的范围划分成多个区间之前,创建第一 scan对象; 为所述第一 scan对象设置共用属性; 在将所述Rowkey所标识的范围划分成多个区间之后,以所述第一 scan对象为副本创建与所述区间对应的第二 scan对象,并将所述区间的开始与结束位置参数加入到所述第二scan对象中。4.根据权利要求1所述的方法,其特征在于,所述将Hbase数据库的主键Rowkey所标识的范围划分成多个区间,包括: 将所述Rowkey划分为接收到的外部输入的数目或预设的数目个连续的区间。5.根据权利要求1至4任意一项所述的方法,其特征在于,所述方法还包括: 在为每个所述区间分配一个预先创建的scan对象之后,将分配的所有scan对象提交给所述 MapReduce ; 当在Hbase上进行MapReduce统计时,根据统计到的scan对象的数量确定同时执行的Map task的数量。6.一种为Hbase数据库上运行的MapReduce分配Map task的装置,其特征在于,包括: 划分模块,用于将Hbase数据库的主键Rowkey所标识的范围划分成多个区间; 第一分配模块,用于为每个所述区间分配一个预先创建的扫描scan对象; 第二分配模块,用于在MapReduce运行时为每个所述scan对象分配一个Map task。7.根据权利要求6所述的装置,其特征在于,所述划分模块具体用于: 将所述Rowkey所标识的范围平均划分成多个连续的区间。8.根据权利要求6所述的装置,其特征在于,所述装置还包括: 第一创建模块,用于在将所述Rowkey所标识的范围划分成多个区间之前,创建第一s can对象; 设置模块,用于为所述第一 scan对象设置共用属性; 第二创建模块,用于在将所述Rowkey所标识的范围划分成多个区间之后,以所述第一scan对象为副本创建与所述区间对应的第二 scan对象,并将所述区间的开始与结束位置参数加入到所述第二scan对象中。9.根据权利要求6所述的装置,其特征在于,所述划分模块具体用于: 将所述Rowkey划分为接收到的外部输入的数目或预设的数目个连续的区间。10.根据权利要求6至9任意一项所述的装置,其特征在于,所述装置还包括: 提交模块,用于在为每个所述区间分配一个预先创建的scan对象之后,将分配的所有scan对象提交给所述MapReduce ; 确定模块,用于当在Hbase上进行MapReduce统计时,根据统计到的scan对象的数量确定同时执行的Map task的数量。
【文档编号】G06F17/30GK105956043SQ201610265163
【公开日】2016年9月21日
【申请日】2016年4月26日
【发明人】戚永峰
【申请人】海尔优家智能科技(北京)有限公司