最近有一个需求,是将Hbase表中的数据复制到另一张表中,因为Hbase的数据比较多,通过java程序读出来然后再向数据库中插入的话,是不太现实了,只能寻找另外的工具,搜了一下原来Hbase自身就提供了相应的组件,那就是 CopyTable。
简单的记录一下使用过程
1、创建两张表
create 'test01' ,'name'
create 'test02' ,'name'
2、向表中插入数据
put 'test01' , '001','name:n' ,'xiaoming'
put 'test01' , '002','name:n' ,'tom'
3、查询一下
4、进行复制
hbase org.apache.hadoop.hbase.mapreduce.CopyTable --startrow=000 --stoprow=999 --new.name=test02 --families=name test01
CopyTable命令简介
CopyTable的命令格式如下:
CopyTable [general options] [--starttime=X] [--endtime=Y] [--new.name=NEW] [--peer.adr=ADR]有关上述CopyTable命令的详细信息,请参见Hbase官方文档中的CopyTable。
常用选项说明如下:
startrow:开始行。stoprow:停止行。starttime:开始时间(以毫秒为单位的unixtime)。若未指定endtime意味着从开始时间到永久。endtime:结束时间。如果未指定starttime,则忽略。versions:要复制的单元格版本数。new.name:新表的名称。peer.adr:目标集群的地址,格式为hbase.zookeeer.quorum:hbase.zookeeper.client.port:zookeeper.znode.paren,对于CloudTable集群而言就是“${CloudTable目标集群的“ZK链接地址”}:/hbase”。families:要复制的列族列表,多个列族之间以逗号分隔。
如果要从sourceCfName复制到destCfName,请指定为sourceCfName:destCfName。
如果复制后列族名称保持不变,只需指定cfName。
all.cells:对删除标记和已删除的单元格也进行复制。参数说明如下:
tablename:要复制的表的名称。
参考文档:使用CopyTable工具导入数据_表格存储服务 CloudTable_用户指南_集群模式_数据批量导入_华为云