CN104077420A - 一种数据导入HBase数据库的方法和装置 - Google Patents

一种数据导入HBase数据库的方法和装置 Download PDF

Info

Publication number
CN104077420A
CN104077420A CN201410346370.0A CN201410346370A CN104077420A CN 104077420 A CN104077420 A CN 104077420A CN 201410346370 A CN201410346370 A CN 201410346370A CN 104077420 A CN104077420 A CN 104077420A
Authority
CN
China
Prior art keywords
character string
data
list
stored
hbase
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201410346370.0A
Other languages
English (en)
Other versions
CN104077420B (zh
Inventor
李勇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Jingdong Shangke Information Technology Co Ltd
Original Assignee
Beijing Jingdong Shangke Information Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Jingdong Shangke Information Technology Co Ltd filed Critical Beijing Jingdong Shangke Information Technology Co Ltd
Priority to CN201410346370.0A priority Critical patent/CN104077420B/zh
Publication of CN104077420A publication Critical patent/CN104077420A/zh
Application granted granted Critical
Publication of CN104077420B publication Critical patent/CN104077420B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/25Integrating or interfacing systems involving database management systems
    • G06F16/258Data format conversion from or to a database

Abstract

本发明实施方式提出一种数据导入HBase数据库的方法和装置。方法包括:利用输入输出(IO)流方式将各种类型的输入源数据整合为字符串,读取输入输出流以获取预定缓冲区大小的字符串;将所读取的字符串转换为Put对象,根据Put对象的行主键确定该Put对象所属的区域服务器;从多张Put对象列表中确定Put对象被写入的选中Put对象列表,以在各个Put对象列表中都均匀分布有多个区域服务器,其中每张Put对象列表中分别包含有待存储Put对象与所属区域服务器之间的对应关系;针对每个Put对象列表分别启动写任务,以将所述Put对象列表中待存储Put对象所对应的数据导入所述Put待存储对象所属的区域服务器。本发明实现了一种安全高效的大数据导入HBase数据库的方案。

Description

一种数据导入HBase数据库的方法和装置
技术领域
本发明属于数据库处理技术领域,特别是一种数据导入HBase数据库的方法和装置。
背景技术
HBase是一个分布式的、面向列的开源数据库,该技术来源于Chang etal所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。
HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。HBase是Apache的Hadoop项目的子项目。在云计算浪潮下,HBase已经承载了很多大数据系统的存储和查询的业务需求,且已经得到业界的广泛认同。在大数据处理领域有一个需求是把大数据批量导入到HBase数据库中,这个操作往往是在凌晨完成。
在现有技术中,读取HDFS文件,按行把数据转换成HBase能识别的Put对象,然后把一批Put对象放入内存中的ArrayList<Put>列表中,当这个列表达到设置的阈值时,调用HBase数据库的批量写入接口把该列表数据写入HBase数据库,完成后清空该列表。循环上述操作直到文件读取完毕。
然而,现有技术不能保证充分利用HBase数据库的分布式集群处理能力,如果从文件中连续读取的n行数据转换成HBase的n个Put对象后,n个Put全部落到HBase集群的一个区域服务器(RegionServer)上,则实际上此次操作没有利用到HBase集群的分布式特性,性能较差。只要n个Put没有尽量多的分布在不同的RegionServer上都会出现对HBase集群分布式特性利用不足的问题。
现有技术不能充分利用导入服务器的性能,在把一批Put对象写入HBase集群大量做网络交互时只是等待其完成,而没有利用这段时间继续组织一批新的Put对象列表。
现有技术没有完善的安全机制,例如没有统一的对输入流的管理规范,没有统一的对异常数据、异常连接等情况的处理方法,有可能导致导入过程中出现错误或者数据缺失。
发明内容
本发明实施方式提出一种数据导入HBase数据库的方法,充分利用HBase集群的分布式特性,从而提高服务端写入性能。
本发明实施方式提出一种一种数据导入HBase数据库的装置,充分利用HBase集群的分布式特性,从而提高服务端写入性能。
本发明实施方式的技术方案如下:
一种数据导入HBase数据库的方法,该方法包括:
利用输入输出IO流方式将各种类型的输入源数据整合为字符串,读取所述输入输出流以获取预定缓冲区大小的字符串;
将所读取的字符串转换为Put对象,根据所述Put对象的行主键确定该Put对象所属的区域服务器;从多张Put对象列表中确定所述Put对象被写入的选中Put对象列表,以在各个Put对象列表中都均匀分布有多个区域服务器,其中每张Put对象列表中分别包含有待存储Put对象与所属区域服务器之间的对应关系;
针对每个Put对象列表分别启动写任务,以将所述Put对象列表中待存储Put对象所对应的数据导入所述Put待存储对象所属的区域服务器。
所述利用IO流方式将各种类型的输入源数据整合为字符串包括下列中的至少一个:
利用IO流方式将文本文件数据整合为字符串;
利用IO流方式将Hadoop分布式文件系统文件整合为字符串;
利用IO流方式将网络源数据整合为字符串。
所述读取所述IO流以获取预定缓冲区大小的字符串包括:
采用while循环的方式读取所述IO流以获取预定缓冲区大小的字符串;该方法还包括:当所述while循环终止后,关闭所述IO流。
在将所读取的字符串转换为Put对象之前,该方法进一步包括:验证所读取的字符串是否符合预先设定的业务预期,如果是,则开始将所读取的字符串转换为Put对象;如果不是,则退出本流程。
所述针对每个Put对象列表分别启动写任务,以将Put对象列表中待存储Put对象所对应的数据导入所述待存储Put对象所属的区域服务器包括:
当Put对象列表中待存储Put对象数目达到预先设置的门限值时,启动对应于该Put对象列表的单独写任务,在单独写任务中处理所述Put对象列表,以将所述Put对象列表中待存储Put对象所对应的数据导入所述待存储Put对象所属的区域服务器,其中通过线程池维护各个Put对象列表的各自单独写任务。
该方法进一步包括:在出现异常时,执行下列操作中的至少一个:打印异常日志;发送报警邮件;发送报警短信。
一种数据导入HBase数据库的装置,包括输入流处理模块、数据处理模块和批量写HBase模块,其中:
输入流处理模块,用于利用输入输出IO流方式将各种类型的输入源数据整合为字符串,读取所述输入输出流以获取预定缓冲区大小的字符串;
数据处理模块,用于将所读取的字符串转换为Put对象,根据所述Put对象的行主键确定该Put对象所属的区域服务器;从多张Put对象列表中确定所述Put对象被写入的选中Put对象列表,以在各个Put对象列表中都均匀分布有多个区域服务器,其中每张Put对象列表中分别包含有待存储Put对象与所属区域服务器之间的对应关系;
批量写HBase模块,用于针对每个Put对象列表分别启动写任务,以将所述Put对象列表中待存储Put对象所对应的数据导入所述待存储Put对象所属的区域服务器。
输入流处理模块,用于处理下列中的至少一个:
利用IO流方式将文本文件数据整合为字符串;
利用IO流方式将Hadoop分布式文件系统文件整合为字符串;
利用IO流方式将网络源数据整合为字符串。
输入流处理模块,用于采用while循环的方式读取所述IO流以获取预定缓冲区大小的字符串;该方法还包括:当所述while循环终止后,关闭所述IO流。
数据处理模块,用于在将所读取的字符串转换为Put对象之前,该方法进一步包括:验证所读取的字符串是否符合预先设定的业务预期,如果是,则开始将所读取的字符串转换为Put对象;如果不是,则退出本流程。
批量写HBase模块,用于当Put对象列表中待存储Put对象数目达到预先设置的门限值时,启动对应于该Put对象列表的单独写任务,在单独写任务中处理所述Put对象列表,以将所述Put对象列表中待存储Put对象所对应的数据导入所述待存储Put对象所属的区域服务器,其中通过线程池维护各个Put对象列表的各自单独写任务。
还包括:
统一异常情况处理模块,用于:在出现异常时,执行下列操作中的至少一个:打印异常日志;发送报警邮件;发送报警短信。
从上述技术方案可以看出,本发明的实施方式中,利用输入输出IO流方式将各种类型的输入源数据整合为字符串,读取所述输入输出流以获取预定缓冲区大小的字符串;将所读取的字符串转换为Put对象,根据所述Put对象的行主键确定该Put对象所属的区域服务器;从多张Put对象列表中确定所述Put对象被写入的选中Put对象列表,以在各个Put对象列表中都均匀分布有多个区域服务器,其中每张Put对象列表中分别包含有待存储Put对象与所属区域服务器之间的对应关系;针对每个Put对象列表分别启动写任务,以将所述Put对象列表中待存储Put对象所对应的数据导入所述Put待存储对象所属的区域服务器。由此可见,应用本发明之后,实现一种安全高效的大数据导入HBase数据库的方案,确保充分利用HBase集群的分布式特性提高服务端写入性能。
同时,本发明还可以利用多线程技术充分利用导入客户端机器的性能。进一步地,本发明提供一套完善的安全处理机制,确保大数据导入HBase数据库的过程安全而高效。
附图说明
图1为根据本发明数据导入HBase数据库的方法流程图。
图2为根据本发明的数据导入HBase数据库的装置结构图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面结合附图对本发明作进一步的详细描述。
为了描述上的简洁和直观,下文通过描述若干代表性的实施方式来对本发明的方案进行阐述。实施方式中大量的细节仅用于帮助理解本发明的方案。但是很明显,本发明的技术方案实现时可以不局限于这些细节。为了避免不必要地模糊了本发明的方案,一些实施方式没有进行细致地描述,而是仅给出了框架。下文中,“包括”是指“包括但不限于”,“根据……”是指“至少根据……,但不限于仅根据……”。由于汉语的语言习惯,下文中没有特别指出一个成分的数量时,意味着该成分可以是一个也可以是多个,或可理解为至少一个。
在本发明中,实现一种安全高效的大数据导入HBase数据库的方案,确保充分利用HBase集群的分布式特性提高服务端写入性能。同时,本发明还可以利用多线程技术充分利用导入客户端机器的性能。进一步地,本发明提供一套完善的安全处理机制,确保大数据导入HBase数据库的过程安全而高效。本发明对于需要导入大数据到HBase数据库的场景来说是一大创举。
图1为根据本发明数据导入HBase数据库的方法流程图。
如图1所示,该方法包括:
步骤101:利用输入输出(IO)流方式将各种类型的输入源数据整合为字符串,读取所述输入输出流以获取预定缓冲区大小的字符串。
在这里,流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。
步骤102:将所读取的字符串转换为Put对象,根据所述Put对象的行主键确定该Put对象所属的区域服务器;从多张Put对象列表中确定所述Put对象被写入的选中Put对象列表,以在各个Put对象列表中都均匀分布有多个区域服务器,其中每张Put对象列表中分别包含有待存储Put对象与所属区域服务器之间的对应关系。
步骤103:针对每个Put对象列表分别启动写任务,以将所述Put对象列表中待存储Put对象所对应的数据导入所述Put待存储对象所属的区域服务器。其中,区域服务器(RegionServer)是管理HBase数据库数据节点的服务器;Put对象是能够写入HBase数据库的基本单元。
在一个实施方式中:利用IO流方式将各种类型的输入源数据整合为字符串包括下列中的至少一个:利用IO流方式将文本文件数据整合为字符串;利用IO流方式将Hadoop分布式文件系统文件整合为字符串;利用IO流方式将网络源数据整合为字符串,等等。
在一个实施方式中:读取所述IO流以获取预定缓冲区大小的字符串包括:
采用while循环的方式读取所述IO流以获取预定缓冲区大小的字符串;该方法还包括:当所述while循环终止后,关闭所述IO流。
在一个实施方式中:在将所读取的字符串转换为Put对象之前,该方法进一步包括:验证所读取的字符串是否符合预先设定的业务预期,如果是,则开始将所读取的字符串转换为Put对象;如果不是,则退出本流程。
在一个实施方式中:所述针对每个Put对象列表分别启动写任务,以将Put对象列表中待存储Put对象所对应的数据导入所述待存储Put对象所属的区域服务器包括:
当Put对象列表中待存储Put对象数目达到预先设置的门限值时,启动对应于该Put对象列表的单独写任务,在单独写任务中处理所述Put对象列表,以将所述Put对象列表中待存储Put对象所对应的数据导入所述待存储Put对象所属的区域服务器,其中通过线程池维护各个Put对象列表的各自单独写任务。
在一个实施方式中:该方法进一步包括:在出现异常时,执行下列操作中的至少一个:打印异常日志;发送报警邮件;发送报警短信。
基于上述说明,本发明还提出了一种数据导入HBase数据库的装置。
图2为根据本发明数据导入HBase数据库的装置结构图。
如图2所示,该装置包括输入流处理模块201、数据处理模块202和批量写HBase模块203,其中:
输入流处理模块201,用于利用输入输出IO流方式将各种类型的输入源数据整合为字符串,读取所述输入输出流以获取预定缓冲区大小的字符串;
数据处理模块202,用于将所读取的字符串转换为Put对象,根据所述Put对象的行主键确定该Put对象所属的区域服务器;从多张Put对象列表中确定所述Put对象被写入的选中Put对象列表,以在各个Put对象列表中都均匀分布有多个区域服务器,其中每张Put对象列表中分别包含有待存储Put对象与所属区域服务器之间的对应关系;
批量写HBase模块203,用于针对每个Put对象列表分别启动写任务,以将所述Put对象列表中待存储Put对象所对应的数据导入所述待存储Put对象所属的区域服务器。
在一个实施方式中:输入流处理模块201,用于处理下列中的至少一个:利用IO流方式将文本文件数据整合为字符串;利用IO流方式将Hadoop分布式文件系统文件整合为字符串;利用IO流方式将网络源数据整合为字符串,等等。
在一个实施方式中:
输入流处理模块201,用于采用while循环的方式读取所述IO流以获取预定缓冲区大小的字符串;该方法还包括:当所述while循环终止后,关闭所述IO流。
在一个实施方式中:
数据处理模块202,用于在将所读取的字符串转换为Put对象之前,该方法进一步包括:验证所读取的字符串是否符合预先设定的业务预期,如果是,则开始将所读取的字符串转换为Put对象;如果不是,则退出本流程。
在一个实施方式中:
批量写HBase模块203,用于当Put对象列表中待存储Put对象数目达到预先设置的门限值时,启动对应于该Put对象列表的单独写任务,在单独写任务中处理所述Put对象列表,以将所述Put对象列表中待存储Put对象所对应的数据导入所述待存储Put对象所属的区域服务器,其中通过线程池维护各个Put对象列表的各自单独写任务。
在一个实施方式中:还包括统一异常情况处理模块204,用于:在出现异常时,执行下列操作中的至少一个:打印异常日志;发送报警邮件;发送报警短信,等等。
下面更具体地描述各个模块的功能。
对于输入流处理模块201,整合了各种类型的数据输入源,只要符合标准的JAVA IO流的输入源都可以适用。优选地,可以采用while循环的方式来读取IO流。同时,输入流处理模块201还可以提供可配置大小的缓冲区,一次可以从IO流中读取缓冲区大小的流数据,从而对数据处理模块202提供统一的输出。
输入流处理模块201的输出是以字符串的形式输出,因为数据是从缓冲区输出到数据处理模块202,所以性能会很好。而且,输入流处理模块201优选还具有统一关闭输入流的接口,当IO流的while循环终止后,采用异常处理模块的finally块代码,调用该统一关闭输入流的接口确保输入流能安全关闭并释放掉资源。
对于数据处理模块202:本模块接收从输入流处理模块201中统一传递过来的字符串数据,经过数据验证单元以验证字符串数据是否符合业务的预期,是否有字段缺失等异常情况,如果数据无误则进入数据转换单元。数据转换模单元的功能为把字符串数据转换成HBase数据库能处理的Put对象,转换成功后进入Put对象分组单元。Put对象分组单元的功能比较特殊,这里用到了HBase数据库的一个技术。具体地:当HBase批量写入一个List<Put>列表时,会按照HBase数据库的区域服务器(RegionServer)把所有的Put对象分组,属于同一个RegionServer的Put对象会一起提交给该RegionServer服务器。这个机制是为了保证属于某个RegionServer的数据不会提交到其他服务器上,但是因为对于List<Put>列表没有做控制,很可能出现一个List<Put>中的大部分数据全部属于一个RegionServer,少量数据属于其他的RegionServer,实际上单次把数据提交到HBase数据库的操作很可能只充分利用了某一台RegionServer的性能,没有完全利用好HBase数据库集群的分布式特性。本发明的Put对象分组单元,就是为了解决这个问题。
Put对象分组单元维护有多个List<Put>列表,每个List<Put>列表再维护一个Map映射,保存该列表已经存放了各个RegionServer上的Put对象的个数。对于转换成的Put对象,在放入List<Put>中时首先根据rowkey来判断其大概属于哪个RegionServer,其中把对应表的.META.信息缓存在本地,性能开销非常低。然后,通过每个List<Put>的Map映射判断是否均匀分布了多个RegionServer,并把新的Put对象放入合适的List<Put>列表中。这样可以保证每个List<Put>被写入HBase数据库时都能充分利用到分布式系统优秀的性能。
当有一个List<Put>的大小达到预设的阈值时,单独调用批量写HBase模块203,其他的List<Put>列表继续添加新的Put对象进来。
比如,假设:后端存储数据的服务器有4台(regionserver0,regionserver1,,regionserver2,regionserver3),目前Put对象分组单元中有4个用于缓存数据(put)的链表(List<Put>A,B,C,D),
每个链表的门限值为100,当链表超过门限值的时候,就会将该链表交给批量写HBase模块203,以将链表中的数据写入到后端存储数据的服务器上。
假定A链表中的数据分布为:regionserver0——10条,regionserver1——30条,regionserver2——0条,regionserver3——0条,其他的链表都为空链表(刚刚将所有数据存储到了regionserver中),下个时刻又来了第一批数据,分别为100个put,其中根据rowkey判断需要放到regionserver0中的有70个,其他30个要放到regionserver3中。
依次读取这100个put对象,将70个需要放到regionserver0的put对象均匀放到4个Put对象列表(链表)中(假定为A,B,C,D),则A表的数据分布为:regionserver0——20条,regionserver1——30条,regionserver2——0条,regionserver3——30条,其他的链表都保存了需要到regionserver0的20条数据。
当到来第二批100个put对象时,其中70个put对象需要存放到regionserver2,30个需要放到regionserver3中,则A链表中的数据变为:regionserver0——20条,regionserver1——30条,regionserver2——20条,regionserver3——30条,此时A链表达到阀值,就需要写入到后端的服务器,因为A中的数据在一定程度上均匀的包含了4台服务器的数据,所以在写入的时候,能够将压力均匀的分布到4台机器上,没有机器闲置。
在现有技术中,当第一批数据来时,缓存链表A马上会被这100个put填充满,其中只包含了regionserver0和regionserver1的数据,因此利用上的机器只有regionserver0,regionserver1,机器利用率不高,没有充分利用Hbase分布式集群的特性。
本发明通过从多张Put对象列表中确定Put对象被写入的选中Put对象列表,以在各个Put对象列表中都尽量均匀分布有多个区域服务器。正是由于各个Put对象列表中都尽量均匀分布有多个区域服务器,在批量写入List<Put>数据时保证每次提交的数据都能分散到多台接收服务器,避免数据集中在某一台服务器的情况出现,提高了大数据导入的效率。
对于批量写HBase模块203:本模块维护一个线程池,该线程池中可以包含多个线程,每个线程对应于一个Put对象列表(List<Put>列表)。当接收到数据处理模块203发过来的List<Put>列表时启动对应的单独写任务,在该单独写任务中处理这个List<Put>列表。这里采用单独线程写数据的好处是:在和HBase数据库远程服务器交互时,本机的输入流处理模块201、数据处理模块202以及异常情况处理模块204都不会进入等待中,而是同时进行本地的其他任务,可以充分利用网络开销过程中的本机CPU、内存等性能。在没有数据从数据处理模块203传递过来时,批量写HBase模块204会进入等待状态,性能开销极低。同时,因为系统维护了连接HBase数据库的HTablePool对象,所以连接HBase的表时不会有过多额外的开销,主要开销只会在网络上。
对于统一异常情况处理模块204。本模块封装了三种异常处理机制,第一种是打印异常日志,所有出现异常的地方都可以调用这个模块。第二种是发送邮件,在出现较为严重的问题时,通过邮件的方式把错误信息发送给开发者,适用于较为严重,但并非必须立即解决的问题。第三种是发送短信,当导入数据过程中出现了例如IO流管道破裂、HBase数据库的表连接访问拒绝等极度严重的问题时可以调用短信发送的异常处理模块,及时通知开发者来处理问题。同时,这里还提供了公共的接口,只要是实现了这个接口的方法都能作为异常处理机制的一种策略,丰富了程序的扩展性。
统一异常情况处理模块204的具体实现为:提供一个基础的接口,里面复用3个handleException的方法,第一个方法接收一个参数,内容为错误信息,用于打印错误日志的处理方式。第二个方法接收两个参数,内容为错误信息和邮件列表,或者错误信息和手机号码列表,用于发送邮件和短信的处理方式。第三个方法接收三个参数,只是作为备用,如果开发者自己实现的异常处理方法用前面两个方法无法覆盖到时可以使用这个扩展的方法。每个独立的异常处理方式都是一个实现了上面的基础接口的类,在代码的任何地方直接已接口的形式来调用即可。
实际上,可以通过多种形式来具体实施本发明实施方式所提出的数据导入HBase数据库的方法。
比如,可以遵循一定规范的应用程序接口,将数据导入HBase数据库的方法编写为安装到个人电脑、移动终端等中的插件程序,也可以将其封装为应用程序以供用户自行下载使用。当编写为插件程序时,可以将其实施为ocx、dll、cab等多种插件形式。也可以通过Flash插件、RealPlayer插件、MMS插件、MIDI五线谱插件、ActiveX插件等具体技术来实施本发明实施方式所提出的数据导入HBase数据库的方法。
可以通过指令或指令集存储的储存方式将本发明实施方式所提出的数据导入HBase数据库的方法存储在各种存储介质上。这些存储介质包括但是不局限于:软盘、光盘、DVD、硬盘、闪存、U盘、CF卡、SD卡、MMC卡、SM卡、记忆棒(Memory Stick)、xD卡等。
另外,还可以将本发明实施方式所提出的数据导入HBase数据库的方法应用到基于闪存(Nand flash)的存储介质中,比如U盘、CF卡、SD卡、SDHC卡、MMC卡、SM卡、记忆棒、xD卡等。
综上所述,本发明的实施方式中,利用输入输出IO流方式将各种类型的输入源数据整合为字符串,读取所述输入输出流以获取预定缓冲区大小的字符串;将所读取的字符串转换为Put对象,根据所述Put对象的行主键确定该Put对象所属的区域服务器;从多张Put对象列表中确定所述Put对象被写入的选中Put对象列表,以在各个Put对象列表中都均匀分布有多个区域服务器,其中每张Put对象列表中分别包含有待存储Put对象与所属区域服务器之间的对应关系;针对每个Put对象列表分别启动写任务,以将所述Put对象列表中待存储Put对象所对应的数据导入所述Put待存储对象所属的区域服务器。由此可见,应用本发明之后,实现一种安全高效的大数据导入HBase数据库的方案,确保充分利用HBase集群的分布式特性提高服务端写入性能。
同时,本发明还可以利用多线程技术充分利用导入客户端机器的性能。进一步地,本发明提供一套完善的安全处理机制,确保大数据导入HBase数据库的过程安全而高效。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (12)

1.一种数据导入HBase数据库的方法,其特征在于,该方法包括:
利用输入输出IO流方式将各种类型的输入源数据整合为字符串,读取所述输入输出流以获取预定缓冲区大小的字符串;
将所读取的字符串转换为Put对象,根据所述Put对象的行主键确定该Put对象所属的区域服务器;从多张Put对象列表中确定所述Put对象被写入的选中Put对象列表,以在各个Put对象列表中都均匀分布有多个区域服务器,其中每张Put对象列表中分别包含有待存储Put对象与所属区域服务器之间的对应关系;
针对每个Put对象列表分别启动写任务,以将所述Put对象列表中待存储Put对象所对应的数据导入所述Put待存储对象所属的区域服务器。
2.根据权利要求1所述的数据导入HBase数据库的方法,其特征在于,所述利用IO流方式将各种类型的输入源数据整合为字符串包括下列中的至少一个:
利用IO流方式将文本文件数据整合为字符串;
利用IO流方式将Hadoop分布式文件系统文件整合为字符串;
利用IO流方式将网络源数据整合为字符串。
3.根据权利要求1所述的数据导入HBase数据库的方法,其特征在于,所述读取所述IO流以获取预定缓冲区大小的字符串包括:
采用while循环的方式读取所述IO流以获取预定缓冲区大小的字符串;该方法还包括:当所述while循环终止后,关闭所述IO流。
4.根据权利要求1所述的数据导入HBase数据库的方法,其特征在于,在将所读取的字符串转换为Put对象之前,该方法进一步包括:验证所读取的字符串是否符合预先设定的业务预期,如果是,则开始将所读取的字符串转换为Put对象;如果不是,则退出本流程。
5.根据权利要求1所述的数据导入HBase数据库的方法,其特征在于,所述针对每个Put对象列表分别启动写任务,以将Put对象列表中待存储Put对象所对应的数据导入所述待存储Put对象所属的区域服务器包括:
当Put对象列表中待存储Put对象数目达到预先设置的门限值时,启动对应于该Put对象列表的单独写任务,在单独写任务中处理所述Put对象列表,以将所述Put对象列表中待存储Put对象所对应的数据导入所述待存储Put对象所属的区域服务器,其中通过线程池维护各个Put对象列表的各自单独写任务。
6.根据权利要求1所述的数据导入HBase数据库的方法,其特征在于,该方法进一步包括:在出现异常时,执行下列操作中的至少一个:打印异常日志;发送报警邮件;发送报警短信。
7.一种数据导入HBase数据库的装置,其特征在于,包括输入流处理模块、数据处理模块和批量写HBase模块,其中:
输入流处理模块,用于利用输入输出IO流方式将各种类型的输入源数据整合为字符串,读取所述输入输出流以获取预定缓冲区大小的字符串;
数据处理模块,用于将所读取的字符串转换为Put对象,根据所述Put对象的行主键确定该Put对象所属的区域服务器;从多张Put对象列表中确定所述Put对象被写入的选中Put对象列表,以在各个Put对象列表中都均匀分布有多个区域服务器,其中每张Put对象列表中分别包含有待存储Put对象与所属区域服务器之间的对应关系;
批量写HBase模块,用于针对每个Put对象列表分别启动写任务,以将所述Put对象列表中待存储Put对象所对应的数据导入所述待存储Put对象所属的区域服务器。
8.根据权利要求7所述的数据导入HBase数据库的装置,其特征在于,输入流处理模块,用于处理下列中的至少一个:
利用IO流方式将文本文件数据整合为字符串;
利用IO流方式将Hadoop分布式文件系统文件整合为字符串;
利用IO流方式将网络源数据整合为字符串。
9.根据权利要求7所述的数据导入HBase数据库的装置,其特征在于,
输入流处理模块,用于采用while循环的方式读取所述IO流以获取预定缓冲区大小的字符串;该方法还包括:当所述while循环终止后,关闭所述IO流。
10.根据权利要求7所述的数据导入HBase数据库的装置,其特征在于,
数据处理模块,用于在将所读取的字符串转换为Put对象之前,该方法进一步包括:验证所读取的字符串是否符合预先设定的业务预期,如果是,则开始将所读取的字符串转换为Put对象;如果不是,则退出本流程。
11.根据权利要求7所述的数据导入HBase数据库的装置,其特征在于,
批量写HBase模块,用于当Put对象列表中待存储Put对象数目达到预先设置的门限值时,启动对应于该Put对象列表的单独写任务,在单独写任务中处理所述Put对象列表,以将所述Put对象列表中待存储Put对象所对应的数据导入所述待存储Put对象所属的区域服务器,其中通过线程池维护各个Put对象列表的各自单独写任务。
12.根据权利要求7所述的数据导入HBase数据库的装置,其特征在于,还包括:
统一异常情况处理模块,用于:
在出现异常时,执行下列操作中的至少一个:打印异常日志;发送报警邮件;发送报警短信。
CN201410346370.0A 2014-07-21 2014-07-21 一种数据导入HBase数据库的方法和装置 Active CN104077420B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410346370.0A CN104077420B (zh) 2014-07-21 2014-07-21 一种数据导入HBase数据库的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410346370.0A CN104077420B (zh) 2014-07-21 2014-07-21 一种数据导入HBase数据库的方法和装置

Publications (2)

Publication Number Publication Date
CN104077420A true CN104077420A (zh) 2014-10-01
CN104077420B CN104077420B (zh) 2017-05-03

Family

ID=51598674

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410346370.0A Active CN104077420B (zh) 2014-07-21 2014-07-21 一种数据导入HBase数据库的方法和装置

Country Status (1)

Country Link
CN (1) CN104077420B (zh)

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104572903A (zh) * 2014-12-26 2015-04-29 北京中交兴路车联网科技有限公司 一种Hbase数据库的控制数据入库的方法
CN105468297A (zh) * 2015-11-18 2016-04-06 临沂大学 一种云存储系统内主从设备数据快速同步的方法
CN105608163A (zh) * 2015-12-18 2016-05-25 北京金山安全软件有限公司 一种数据库的入库方法及接口
CN105608223A (zh) * 2016-01-12 2016-05-25 北京中交兴路车联网科技有限公司 针对kafka的Hbase数据库的入库方法和系统
CN106648934A (zh) * 2016-12-27 2017-05-10 中科天玑数据科技股份有限公司 一种Impala与HBase之间的高效数据传输方法及系统
CN106776795A (zh) * 2016-11-23 2017-05-31 黄健文 基于Hbase数据库的数据写入方法及装置
CN107016039A (zh) * 2017-01-06 2017-08-04 阿里巴巴集团控股有限公司 数据库写入的方法和数据库系统
CN108121822A (zh) * 2018-01-09 2018-06-05 北京奇艺世纪科技有限公司 一种写入数据方法和装置
CN108846129A (zh) * 2018-07-02 2018-11-20 腾讯科技(深圳)有限公司 存储数据访问方法、装置及存储介质
US10565202B2 (en) 2017-02-08 2020-02-18 International Business Machines Corporation Data write/import performance in a database through distributed memory
CN112905587A (zh) * 2019-12-04 2021-06-04 北京金山云网络技术有限公司 数据库的数据管理方法、装置及电子设备
CN113031878A (zh) * 2021-05-20 2021-06-25 睿至科技集团有限公司 一种基于HBase的数据存储优化方法及系统

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103617211A (zh) * 2013-11-20 2014-03-05 浪潮电子信息产业股份有限公司 一种HBase加载数据的导入方法
CN103631907A (zh) * 2013-11-26 2014-03-12 中国科学院信息工程研究所 一种将关系型数据迁移至HBase的方法及系统

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103617211A (zh) * 2013-11-20 2014-03-05 浪潮电子信息产业股份有限公司 一种HBase加载数据的导入方法
CN103631907A (zh) * 2013-11-26 2014-03-12 中国科学院信息工程研究所 一种将关系型数据迁移至HBase的方法及系统

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
丁飞,陈长松,张涛,杨涛,张岩峰: "基于协处理器的HBase区域级第二索引研究与实现", 《计算机应用》 *
陈庆奎,周利珍: "基于HBase的大规模无线传感网络数据存储系统", 《计算机应用》 *

Cited By (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104572903A (zh) * 2014-12-26 2015-04-29 北京中交兴路车联网科技有限公司 一种Hbase数据库的控制数据入库的方法
CN104572903B (zh) * 2014-12-26 2019-02-01 北京中交兴路车联网科技有限公司 一种Hbase数据库的控制数据入库的方法
CN105468297A (zh) * 2015-11-18 2016-04-06 临沂大学 一种云存储系统内主从设备数据快速同步的方法
CN105608163A (zh) * 2015-12-18 2016-05-25 北京金山安全软件有限公司 一种数据库的入库方法及接口
CN105608223A (zh) * 2016-01-12 2016-05-25 北京中交兴路车联网科技有限公司 针对kafka的Hbase数据库的入库方法和系统
CN105608223B (zh) * 2016-01-12 2019-04-30 北京中交兴路车联网科技有限公司 针对kafka的Hbase数据库的入库方法和系统
CN106776795A (zh) * 2016-11-23 2017-05-31 黄健文 基于Hbase数据库的数据写入方法及装置
CN106776795B (zh) * 2016-11-23 2020-05-12 黄健文 基于Hbase数据库的数据写入方法及装置
CN106648934A (zh) * 2016-12-27 2017-05-10 中科天玑数据科技股份有限公司 一种Impala与HBase之间的高效数据传输方法及系统
CN106648934B (zh) * 2016-12-27 2019-12-03 中国科学院计算技术研究所 一种Impala与HBase之间的高效数据传输方法及系统
CN107016039A (zh) * 2017-01-06 2017-08-04 阿里巴巴集团控股有限公司 数据库写入的方法和数据库系统
CN107016039B (zh) * 2017-01-06 2020-11-03 创新先进技术有限公司 数据库写入的方法和数据库系统
US10565202B2 (en) 2017-02-08 2020-02-18 International Business Machines Corporation Data write/import performance in a database through distributed memory
CN108121822A (zh) * 2018-01-09 2018-06-05 北京奇艺世纪科技有限公司 一种写入数据方法和装置
CN108846129A (zh) * 2018-07-02 2018-11-20 腾讯科技(深圳)有限公司 存储数据访问方法、装置及存储介质
CN108846129B (zh) * 2018-07-02 2023-04-18 腾讯科技(深圳)有限公司 存储数据访问方法、装置及存储介质
CN112905587A (zh) * 2019-12-04 2021-06-04 北京金山云网络技术有限公司 数据库的数据管理方法、装置及电子设备
CN113031878A (zh) * 2021-05-20 2021-06-25 睿至科技集团有限公司 一种基于HBase的数据存储优化方法及系统
CN113031878B (zh) * 2021-05-20 2021-08-06 睿至科技集团有限公司 一种基于HBase的数据存储优化方法及系统

Also Published As

Publication number Publication date
CN104077420B (zh) 2017-05-03

Similar Documents

Publication Publication Date Title
CN104077420A (zh) 一种数据导入HBase数据库的方法和装置
CN107368259B (zh) 一种向区块链系统中写入业务数据的方法和装置
CN105068864B (zh) 处理异步消息队列的方法及系统
TW201901478A (zh) 區塊鏈業務受理及業務共識方法及裝置
CN111767143B (zh) 交易数据处理方法、装置、设备及系统
CN103927338A (zh) 日志信息入库处理方法和装置
CN103036956A (zh) 一种分布式组态化海量数据归档系统及实现方法
CN103914399A (zh) 一种并行计算系统中的磁盘缓存方法及装置
CN103559217A (zh) 一种面向异构数据库的海量组播数据入库实现方法
CN103593257B (zh) 一种数据备份方法及装置
CN102081605A (zh) 基于数据仓库的数据封装装置及业务数据获取方法
CN104699723A (zh) 数据交换适配器、异构系统之间数据同步系统和方法
CN106649676A (zh) 一种基于hdfs存储文件的去重方法及装置
CN103414762B (zh) 云备份方法和装置
CN104572781A (zh) 一种交易日志产生方法和装置
CN109189749A (zh) 文件同步方法及终端设备
CN110162344A (zh) 一种隔离限流的方法、装置、计算机设备及可读存储介质
CN107066205B (zh) 一种数据存储系统
CN105159820A (zh) 一种系统日志数据传输方法及装置
CN113254445B (zh) 实时数据存储方法、装置、计算机设备及存储介质
CN110989935A (zh) Flume系统的数据处理、传输方法及装置
CN106570151A (zh) 一种海量文件的数据收集处理方法及系统
CN106354493B (zh) 一种解决传统软件开发痛点的开发模式的实现方法
CN104407811B (zh) 一种基于云计算的合并io装置
CN103646015A (zh) 发送、接收以及传输xml报文的方法和系统

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant