HBase ImportTsv导入数据

一、HBase介绍

HBase是Apache Hadoop中的一个子项目,依托于Hadoop的HDFS作为最基本存储基础单元,通过使用hadoop的命令就可以看到HBase数据存储文件夹的目录结构,还可以通过Map/Reduce对HBase进行操作。HBase是一个适合于非结构化数据存储的数据库.所谓非结构化数据存储就是说HBase是基于列的而不是基于行的模式。HBase是介于Map Entry(key & value)和DB Row之间的一种数据存储方式。你很可能需要存储多个属性的数据结构,但没有传统数据库表中那么多的关联关系,这就是所谓的松散数据。简单来说,你在HBase中的表创建的可以看做是一张很大的表,而这个表的属性可以根据需求去动态增加,在HBase中没有表与表之间关联查询。你只需要告诉你的数据存储到HBase的那个column family就可以了,不需要指定具体类型,需要注意的是HBase中不包含事务的功能。

二、ImportTsv介绍

将数据导入HBase,通常HBase用户会使用HBase API进行数据导入,但是如果一次性导入大批量数据,可能会占用大量Regionserver资源,影响存储在该Regionserver上其他表的操作,或者性能低下,那么怎么才能高效地将数据导入HBase呢?
ImportTsv是HBase官方提供了基于mapreduce进行批量数据导入的工具,ImportTsv可以将HDFS上的TSV格式(默认制表符分隔\t,或者自定义分隔符的其他格式数据文件也可,逗号‘,’分隔的txt亲测可以)的数据文件通过命令简单方便地导入到HBase中,对于大数据量的导入非常实用。

三、数据导入

ImportTsv进行数据导入有两种方式:
1、直接导入(使用TableOutputFormat在map中插入)
使用方法:

$ bin/hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.columns=a,b,c <tablename> <hdfs-inputdir>

其中:
-Dimporttsv.columns即导入的列,例如:-Dimporttsv.columns=cf:col1,cf:col2…
hdfs-inputdir即数据文件在HDFS的路径,例如:/hbase_tsv_input
如果使用的不是制表符\t分隔,请指定参数:’-Dimporttsv.separator=,’
命令举例:

 $ bin/hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.columns=cf:col1,cf:col2 test /hbase_tsv_input

至此,第一种方式导入数据成功,在控制台会看到执行一些map任务,执行完成之后数据导入完成。

总结:这种方式,使用简单,一条命令搞定,但是在导入大批量数据的时候有可能会存在问题,尤其是column比较多的宽表导入的时候,会出现RegionTooBusyException,导致数据丢失,因此建议在数据量不是特别大并且column不是特别多的情况下使用。

2、 使用bulk-load方式(通过mapreduce先生成HFile格式的文件,再执行CompleteBulkLoad命令将文件move到HBase相应目录。)
使用方法:
第一步:

$ bin/hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.columns=a,b,c -Dimporttsv.bulk.output=hdfs://storefile-outputdir <tablename> <hdfs-data-inputdir>

第一步中,在1的基础上添加了-Dimporttsv.bulk.output参数来指定output目录,即HFile的输出目录,此目录在执行前不能存在,如果存在请删除。

第二步:

$ bin/hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles <hdfs://storefileoutput> <tablename>

第二步就是讲HFile move到HBase相应的目录。第一个参数就是第一步中的output目录,tableName和1中相同,就是表名。

总结:bulk-load导入方式完成,等待执行结束即可,第一步可能会花费很长时间(62column1000万数据大约花费20分钟),第二步瞬间完成。这种方式对Regionserver更加友好一些,加载数据几乎不占用Regionserver的计算资源,因为只是在HDFS上生成HFile,移动HFile文件,然后通知HMaster将该Regionserver的一个或多个region上线,大数据量导入推荐使用此方式。

四、碰到的问题

在使用的过程中,可能会出现如下异常:

Encountered unrecoverable error from region server, additional details: row ' ' on table 'test'

出现上面异常的原因是执行命令的用户权限不够:
两种方案:
1.给output目录赋予权限

hadoop fs -chmod -R 777 $output

2.切换成有权限操做的用户执行。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值