使用CopyTable同步HBase数据

简介: CopyTable是Hbase提供的一个数据同步工具,可以用于同步表的部分或全部数据。本文介绍如何使用CopyTable同步HBase数据。针对没有hadoop集群的用户,还介绍了单机运行CopyTable的配置和参数。

CopyTable是Hbase提供的一个数据同步工具,可以用于同步表的部分或全部数据。本文介绍如何使用CopyTable同步HBase数据。针对没有hadoop集群的用户,还介绍了单机运行CopyTable的配置和参数。
根据我们的测试,在表不压缩的情况下,单机版CopyTable可以达到1小时100G左右的导入速度。10T以下的数据都可以使用CopyTable导入数据。

准备工作

1 安装HBase
CopyTable依赖于hadoop mapreduce。如果源HBase集群中开启了mapreduce则可以直接在源集群上运行。否则可以在另一个hadoop集群上安装HBase客户端并将hbase-site.xml文件中的zk地址指向源集群。
也可以单机运行,单机运行时,不需要安装hadoop,只要安装了HBase就可以使用hadoop的本地模式运行CopyTable。
安装和配置HBase的过程可以参考云HBase相关文档

2 创建目标表
使用CopyTable同步数据前,需要确保目标表存在。如果不存在需要先创建目标表。强烈建议根据数据的分布情况对目标表进行预分裂,这样能够提高写入速度。

3 其他准备工作
需要将运行CopyTable的机器ip加入HBase的ip白名单,确保可以访问到HBase。
需要修改hbase-site.xml文件中的zk地址指向源集群。

准备工作完成后,就可以运行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 删除标记也进行同步。
更多参数参见官方文档

除copytable的参数外, 以下选项也建议在命令中进行设置:
(1)对于单机运行的情况,需要指定mapreduce.local.map.tasks.maximum参数,表示并行执行的最大map个数。不指定的话默认是1,所有任务都是串行执行的。
(2)hbase.client.scanner.caching建议设置为大于100的数。这个数越大,使用的内存越多,但是会减少scan与服务端的交互次数,对提升读性能有帮助。
(3)mapred.map.tasks.speculative.execution建议设置为false,避免因预测执行机制导致数据写两次。

另外,如果是在E-mapreduce集群上执行CopyTable,需要注意E-mapreduce默认的hbase-site.xml文件中配置了phoenix,所以需要导入phoenix的jar包,否则运行时会报错:
-libjars $HBASE_HOME/lib/phoenix-$PhoenixVersion-HBase-$HBaseVersion-server.jar

性能数据

我们使用两个云HBase集群来进行导入数据的测试。两个集群配置一致:3台region-server,机器配置为4CPU 8GB,数据盘为SSD云盘。
源数据使用hbase pe产生,共16亿条数据,表采用SNAPPY压缩,数据文件大小为71.9GB,共有32个region。数据为单行单列,rowkey长度26字节,列长度100字节。
使用一台4CPU 8GB的ECS执行CopyTable,测试结果如下表:

测试轮次 测试条件 导入时间 导入速度(rec/s) 导入速度(MB/s)
1 -Dhbase.client.scanner.caching=100 -Dmapreduce.local.map.tasks.maximum=16 1h21min 329218 15.15
2 在测试1的基础上修改-Dhbase.client.scanner.caching=500 1h14min 360360 16.58
3 在测试2的基础上按照源表数据分布对目标表进行预分裂再进行导入 1h5min 410256 18.88

测试过程中的相关监控如下:

测试1

_2017_08_28_6_31_42

测试2

_2017_08_28_6_31_58

测试3

_2017_08_28_6_32_09

相关实践学习
lindorm多模间数据无缝流转
展现了Lindorm多模融合能力——用kafka API写入,无缝流转在各引擎内进行数据存储和计算的实验。
云数据库HBase版使用教程
  相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情: https://cn.aliyun.com/product/hbase   ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
10天前
|
缓存 监控 Shell
如何使用 HBase Shell 进行数据的实时监控和备份?
如何使用 HBase Shell 进行数据的实时监控和备份?
|
10天前
|
Shell 分布式数据库 Hbase
如何使用 HBase Shell 进行数据的批量导入和导出?
如何使用 HBase Shell 进行数据的批量导入和导出?
|
4月前
|
存储 分布式数据库 数据库
Hbase学习二:Hbase数据特点和架构特点
Hbase学习二:Hbase数据特点和架构特点
80 0
|
4月前
|
缓存 监控 Shell
使用 HBase Shell 进行数据的实时监控和备份
使用 HBase Shell 进行数据的实时监控和备份
|
4月前
|
Shell 分布式数据库 Hbase
使用 HBase Shell 进行数据的批量导入和导出
使用 HBase Shell 进行数据的批量导入和导出
600 6
|
3月前
|
存储 分布式计算 分布式数据库
《HBase MapReduce之旅:我的学习笔记与心得》——跟随我的步伐,一同探索HBase世界,揭开MapReduce的神秘面纱,分享那些挑战与收获,让你在数据的海洋里畅游无阻!
【8月更文挑战第17天】HBase是Apache顶级项目,作为Bigtable的开源版,它是一个非关系型、分布式数据库,具备高可扩展性和性能。结合HDFS存储和MapReduce计算框架,以及Zookeeper协同服务,HBase支持海量数据高效管理。MapReduce通过将任务拆解并在集群上并行执行,极大提升处理速度。学习HBase MapReduce涉及理解其数据模型、编程模型及应用实践,虽然充满挑战,但收获颇丰,对职业发展大有裨益。
46 0
|
4月前
|
存储 Java 分布式数据库
HBase构建图片视频数据的统一存储检索
HBase构建图片视频数据的统一存储检索
|
5月前
|
Oracle 关系型数据库 数据处理
实时计算 Flink版产品使用问题之如何进行Oracle到HBase的同步
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
6月前
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版操作报错合集之使用 Event Time Temporal Join 关联多个 HBase 后,Kafka 数据的某个字段变为 null 是什么原因导致的
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
131 0
|
6月前
|
SQL 消息中间件 Kafka
实时计算 Flink版操作报错合集之使用 Event Time Temporal Join 关联多个 HBase 后,Kafka 数据的某个字段变为 null 是什么原因导致的
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
90 0