
# 使用CopyTable将源数据导入HBase集群
CopyTable是HBase提供的一个实用工具，可以将部分或全部表复制到同一个集群或另一个集群中。目标表必须预先存在。在CloudTable客户端工具中已经包含了CopyTable工具，用户部署客户端工具后，即可使用CopyTable工具导入数据到CloudTable集群。
#### 使用CopyTable工具导入数据
1. 准备Linux弹性云服务器作为客户端主机，并在客户端主机上部署CloudTable HBase客户端工具。 
   具体操作请参见[使用HBase Shell连接HBase普通集群](https://support.huaweicloud.com/usermanual-cloudtable/cloudtable_01_0097.html)。
   在部署客户端工具时，ZK链接地址请配置为源表所在的CloudTable HBase集群的"ZK链接地址（内网）"。
   
   
2. （可选）如果要将表复制到另一个集群，请获取HBase目标集群的"ZK链接地址（内网）"。 
   在左侧导航树单击集群管理，然后在集群列表中找到所需要的集群，并获取相应的"ZK链接地址（内网）"。
   
   
3. 在使用CopyTable复制表数据前，需要先确保在CloudTable HBase目标集群中目标表已经存在。如果目标表不存在，请先创建目标表。 
   创建表的具体步骤，请参考[HBase入门使用](https://support.huaweicloud.com/usermanual-cloudtable/cloudtable_01_0097.html#cloudtable_01_0097__section13857204111417)。
   
   
4. 在客户端主机，打开命令行终端窗口，进入客户端工具安装目录的hbase目录下，然后执行CopyTable命令导入数据到CloudTable集群。 
   命令示例如下，该示例是将"TestTable"表指定1小时范围内的数据复制到目标集群：
   ```
   cd ${客户端工具的安装目录}/hbase
   ./bin/hbase org.apache.hadoop.hbase.mapreduce.CopyTable --starttime=1265875194289 --endtime=1265878794289 --peer.adr=${CloudTable目标集群的“ZK链接地址”}:/hbase --families=myOldCf:myNewCf,cf2,cf3 TestTable
   ```
   
   
 
#### CopyTable命令简介
CopyTable的命令格式如下：
```
CopyTable [general options] [--starttime=X] [--endtime=Y] [--new.name=NEW] [--peer.adr=ADR] <tablename>
```
有关上述CopyTable命令的详细信息，请参见HBase官方文档中的[CopyTable](https://hbase.apache.org/book.html?spm=a2c4e.11153940.blogcont176546.18.9c773d9a0Ty9aD#copy.table)。
常用选项说明如下：
- startrow：开始行。
- stoprow：停止行。
- starttime：开始时间（以毫秒为单位的unixtime）。如果未指定endtime意味着从开始时间到永久。
- endtime：结束时间。如果未指定starttime，则忽略。
- versions：要复制的单元格版本数。
- new.name：新表的名称。
- peer.adr：目标集群的地址，格式为hbase.zookeeper.quorum:hbase.zookeeper.client.port:zookeeper.znode.paren，对于HBase集群而言就是"${CloudTable目标集群的"ZK链接地址"}:/hbase"。
- families：要复制的列族列表，多个列族之间以逗号分隔。 如果要从sourceCfName复制到destCfName，请指定为sourceCfName:destCfName。
  如果复制后列族名称保持不变，只需指定cfName。
  
- all.cells：对删除标记和已删除的单元格也进行复制。
参数说明如下。
tablename：要复制的表的名称。
