点击查看全文html
CopyTable是Hbase提供的一个数据同步工具,能够用于同步表的部分或所有数据。本文介绍如何使用CopyTable同步HBase数据。针对没有hadoop集群的用户,还介绍了单机运行CopyTable的配置和参数。
根据咱们的测试,在表不压缩的状况下,单机版CopyTable能够达到1小时100G左右的导入速度。10T如下的数据均可以使用CopyTable导入数据。node
准备工做
1 安装HBase
CopyTable依赖于hadoop mapreduce。若是源HBase集群中开启了mapreduce则能够直接在源集群上运行。不然能够在另外一个hadoop集群上安装HBase客户端并将hbase-site.xml文件中的zk地址指向源集群。
也能够单机运行,单机运行时,不须要安装hadoop,只要安装了HBase就可使用hadoop的本地模式运行CopyTable。
安装和配置HBase的过程能够参考云HBase相关文档。apache
2 建立目标表
使用CopyTable同步数据前,须要确保目标表存在。若是不存在须要先建立目标表。能够根据数据的分布状况对目标表进行预分裂,这样可以提升写入速度。工具
3 其余准备工做
须要将运行CopyTable的机器ip加入HBase的ip白名单,确保能够访问到HBase。
须要修改hbase-site.xml文件中的zk地址指向源集群。oop
准备工做完成后,就能够运行CopyTable进行数据同步了。性能
命令示例
./bin/hbase org.apache.hadoop.hbase.mapreduce.CopyTable -Dhbase.client.scanner.caching=200 -Dmapreduce.local.map.tasks.maximum=16 -Dmapred.map.tasks.speculative.execution=false --peer.adr=$ZK_IP1,$ZK_IP2,$ZK_IP3:/hbase $TABLE_NAME测试
参数说明
CopyTable经常使用选项说明以下:
startrow 开始行。
stoprow 中止行。
starttime 时间戳(版本号)的最小值。
endtime 时间戳的最大值。若是不指定starttime,endtime不起做用。
peer.adr 目标集群的地址。格式为:hbase.zookeeer.quorum:hbase.zookeeper.client.port:zookeeper.znode.parent
families 要同步的列族。多个列族用逗号分隔。
all.cells 删除标记也进行同步。
更多参数参见官方文档url
除copytable的参数外, 如下选项也建议在命令中进行设置:
(1)对于单机运行的状况,须要指定mapreduce.local.map.tasks.maximum参数,表示并行执行的最大map个数。不指定的话默认是1,全部任务都是串行执行的。
(2)hbase.client.scanner.caching建议设置为大于100的数。这个数越大,使用的内存越多,可是会减小scan与服务端的交互次数,对提高读性能有帮助。
(3)mapred.map.tasks.speculative.execution建议设置为false,避免因预测执行机制致使数据写两次。spa
另外,若是是在E-mapreduce集群上执行CopyTable,须要注意E-mapreduce默认的hbase-site.xml文件中配置了phoenix,因此须要导入phoenix的jar包,不然运行时会报错:
-libjars $HBASE_HOME/lib/phoenix-$PhoenixVersion-HBase-$HBaseVersion-server.jar.net
性能数据