跨集群提交CopyTable任务备份HBase表

2021年9月18日 0 条评论 512 次阅读 0 人点赞

背景

短期画像数据有一部分存储在HBase(Hadoop Cluster E)中,每天都需要备份[T-5,T]的数据。但是Azkaban执行机上的Hadoop环境和配置文件是为了在Cluster D上提交任务而配置的,和上述HBase隶属于不同的物理集群,这时候需要跨集群提交HBase的CopyTable任务了。如果不考虑资源的情况下在Cluster E任意找一个节点搭建个Azkaban也是可以的。

备份方式的选择HBase自带的CopyTable工具,通过限制起止时间来过滤出需要备份的数据。

CopyTable介绍

CopyTable是Apache HBase内置的一个数据迁移工具,支持HBase集群内单表复制,也支持跨HBase集群表复制,使用上方便、简单,支持HBase表增量复制,支持dest表重命名。由于采用的scan - put方式性能比较差,数据量大时不推荐使用。其本质也是利用MapReduce进行数据拷贝,全路径名为org.apache.hadoop.hbase.mapreduce.CopyTable,目前公司使用的版本是HBase 1.2.0-cdh5.16.2。简单看下用法:

使用示例:

假设我们要把HBase表'TestTable'1小时窗口内的数据复制到另一个集群上:

用户可以参考以下通用选项设置来提高数据拷贝性能:

  • 建议用户将HBase scanner一次从服务端抓取的数据条数设置为>=100,一个较高的值可能会使用更多的内存但可以减少频繁请求服务器的耗时可能会提高性能。设置方法为-Dhbase.client.scanners.caching=100
  • MapReduce推测执行应始终设置为false,以防止两次数据写入,如果开启推测执行则可能造成结果不准确。设置方法为:-Dmapreduce.map.speculative=false

HBase表数据备份

备份任务通过Azkaban执行例行调度,有两个脚本和一个配置文件目录来支持,分别是copy-table.job定义job,copy-table.sh.template定义执行备份任务的脚本,hbase-conf包含操作HBase集群需要的配置文件:

copy-table.job

copy-table.sh.template

hbase-conf

需要注意的是配置文件需要拷贝完全,否则会出现拷贝失败的情况。

勇敢,和生活的艰难无关。

文章评论(0)