一种从HBase中全量抽取数据的方法及系统与流程

文档序号:12364554阅读:1075来源:国知局
本发明涉及大数据处理的
技术领域
:,尤其涉及一种从HBase中全量抽取数据的方法,以及从HBase中全量抽取数据的系统。
背景技术
::HBase是一个分布式的、面向列的开源数据库,该技术来源于FayChang所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(FileSystem)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。HBase的表可以逻辑上切分成不同的数据块,各个数据块之间没有数据交集。从HBase表中全量抽取数据可以使用HBase的APIscan(通过scan读取表中数据),不设定scan的起始主键(startRow)和终止主键(stopRow)的值,这样就是全表读取数据。一次只读取一个region(分区)的数据,读完了之后再读取下一个region,是一种串行的方式。在HBase表数据较大的时候,抽取数据不够高效。技术实现要素:为克服现有技术的缺陷,本发明要解决的技术问题是提供了一种从HBase中全量抽取数据的方法,其能够多线程并发地全量高效抽取HBase数据,而且数据抽取时在regionServer间是负载均衡的,防止抽取数据时出现热点对regionServer造成压力。本发明的技术方案是:这种从HBase中全量抽取数据的方法,该方法包括以下步骤:(1)部署在可以访问HBase集群的一台服务器上;(2)该服务器上面,将分区服务器regionserver的机器名与ip的对应信息配置到hosts文件中;(3)先读取HBase的元数据表,获取到region信息;然后根据不同的region信息,构建不同的scan对象,来抽取数据;(4)抽取的数据按照不同的region存放到HDFS(Hadoop分布式文件系统)的不同目录下。本发明将读取一张庞大的表转换成读取多份小的数据块region,根据不同的region信息,构建不同的scan对象,来抽取数据,从而能够多线程并发地全量高效抽取HBase数据,而且数据抽取时在regionServer间是负载均衡的,防止抽取数据时出现热点对regionServer造成压力。还提供了一种从HBase中全量抽取数据的系统,该系统包括:部署模块,其配置来将该系统部署在可以访问HBase集群的一台服务器上;配置模块,其配置来在该服务器上面,将分区服务器regionserver的机器名与ip的对应信息配置到hosts文件中;数据抽取模块,其配置来先读取HBase的元数据表,获取到region信息;然后根据不同的region信息,构建不同的scan对象,来抽取数据;数据存储模块,其配置来将抽取的数据按照不同的region存放到HDFS的不同目录下。附图说明图1所示为根据本发明的从HBase中全量抽取数据的方法的流程图。具体实施方式如图1所示,这种从HBase中全量抽取数据的方法,该方法包括以下步骤:(1)部署在可以访问HBase集群的一台服务器上;(2)该服务器上面,将分区服务器regionserver的机器名与ip的对应信息配置到hosts文件中;hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再将网址提交DNS域名解析服务器进行IP地址的解析。(3)先读取HBase的元数据表,获取到region信息;然后根据不同的region信息,构建不同的scan对象,来抽取数据;(4)抽取的数据按照不同的region存放到HDFS的不同目录下。本发明将读取一张庞大的表转换成读取多份小的数据块region,根据不同的region信息,构建不同的scan对象,来抽取数据,从而能够多线程并发地全量高效抽取HBase数据,而且数据抽取时在regionServer间是负载均衡的,防止抽取数据时出现热点对regionServer造成压力。另外,所述步骤(3)中,region信息包括:region的数据范围,为startRow和stopRow;region所在的regionServer的机器名;根据以上region信息构造map数据结构:key为regionServer的机器名,值为region信息列表。另外,所述步骤(3)中,创建容量大小为N的线程池,用来执行从HBase中抽取数据的任务;region数量为M,线程池大小为N;选择region和读取region的方法如下:(a)若M<=N,则所有region均作为读取对象;(b)若M>N,则循环遍历Map,直到Map为空;根据region信息,将region的startRow,stopRow设定到scan的起始主键和终止主键,这样scan就是针对此region进行读取数据;对每个region信息封装线程类,提交到线程池执行数据读取。另外,所述(b)中,每次遍历Map的逻辑为:从Map中获取一个entry;entry的value为region信息列表;从region信息列表中取出一条记录,并且此记录从列表中移除;若移除一条记录后,次region信息列表为空,则将entry从map中移除。本领域普通技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,包括上述实施例方法的各步骤,而所述的存储介质可以是:ROM/RAM、磁碟、光盘、存储卡等。因此,与本发明的方法相对应的,本发明还同时包括一种从HBase中全量抽取数据的系统,该系统通常以与方法各步骤相对应的功能模块的形式表示。使用该方法的系统,该系统包括:部署模块,其配置来将该系统部署在可以访问HBase集群的一台服务器上;配置模块,其配置来在该服务器上面,将分区服务器regionserver的机器名与ip的对应信息配置到hosts文件中;数据抽取模块,其配置来先读取HBase的元数据表,获取到region信息;然后根据不同的region信息,构建不同的scan对象,来抽取数据;数据存储模块,其配置来将抽取的数据按照不同的region存放到HDFS的不同目录下。另外,所述数据抽取模块中,region信息包括:region的数据范围,为startRow和stopRow;region所在的regionServer的机器名;根据以上region信息构造map数据结构:key为regionServer的机器名,值为region信息列表。另外,所述数据抽取模块中,创建容量大小为N的线程池,用来执行从HBase中抽取数据的任务;region数量为M,线程池大小为N;选择region和读取region的方法如下:(a)若M<=N,则所有region均作为读取对象;(b)若M>N,则循环遍历Map,直到Map为空;根据region信息,将region的startRow,stopRow设定到scan的起始主键和终止主键,这样scan就是针对此region进行读取数据;对每个region信息封装线程类,提交到线程池执行数据读取。另外,所述(b)中,每次遍历Map的逻辑为:从Map中获取一个entry;entry的value为region信息列表;从region信息列表中取出一条记录,并且此记录从列表中移除;若移除一条记录后,次region信息列表为空,则将entry从map中移除。本发明的有益效果如下:1.将读取一张庞大的表,转换成读取多份小的数据块(region)。2.多线程并发读取数据块,快速的抽取HBase数据3.同一时间抽取的region数量在regionserver中是均衡的,防止抽取数据时出现热点对regionServer造成压力。以上所述,仅是本发明的较佳实施例,并非对本发明作任何形式上的限制,凡是依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属本发明技术方案的保护范围。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1