Hbase 数据迁移闭坑指南

简介: Hbase 数据迁移闭坑指南
  • hbase数据迁移前提

a. 2套集群的hosts文件内容都需要包含对方的主机地址 b. 配置hosts 在源集群所有机器的hosts中配置目标集群的hostname与ip

快照方式

hbase snapshot数据迁移问题

不需要提前建表,分区也会自动同步

HBase自身也提供了ExportSnapshot的方法可以从HDFS文件层基于某个快照快速的导出HBase的数据,并不会对RegionServer造成影响,但该源生的方法不支持增量。

1.在源集群执行

snapshot 'src_table', 'snapshot_src_table'

snapshot的流程主要有三个步骤

  • 加锁: 加锁对象是regionserver的memstore,目的是禁止在创建snapshot过程中对数据进行insert,update,delete操作
  • 刷盘:刷盘是针对当前还在memstore中的数据刷到HDFS上,保证快照数据相对完整,此步也不是强制的,如果不刷,快照中数据有不一致风险
  • 创建指针: snapshot过程不拷贝数据,但会创建对HDFS文件的指针,snapshot中存储的就是这些指针元数据

2.在源集群执行,属于推送方式,在目标集群执行数据拉取方式

hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot test_snap -copy-from hdfs://HDFS80386/hbase -copy-to hdfs://shyt-hadoop-4031.xx.com.cn:8020/apps/hbase/data -mappers 20 -bandwidth 5

3.在目标集群执行使用hbase用户

disable 'dalishen:bbs_member'
restore_snapshot 'bbs_member_snap'

使用restore命令在目标集群自动新建表,以及与archive里的HFile建立link

执行该步骤的时候,可能会遇到权限问题,需要赋权限

Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Permission denied: user=hbase, access=WRITE, inode="/apps/hbase/data/archive/data/dalishen/bbs_member/f9406f2ff1fe4d542a5cc36b850c2689/f/.links-91a554a73b1e41a7a0b33208331d62df":hadoop:hdfs:drwxr-xr-x

源集群

groups hadoop hdfs 可以发现导入的是源集群的权限

所以需要赋权限

hdfs dfs -chmod -R 777 /apps/hbase/data/archive/data/dalishen/bbs_member/
hbase shell
enable 'dalishen:bbs_member'

copyTable方式

不需要提前建表,分区也会自动同步,支持增量备份,需要指定要备份的时间范围 copyTable也是属于HBase数据迁移的工具之一,以表级别进行数据迁移。copyTable的本质也是利用MapReduce进行同步的,与DistCp不同的时,它是利用MR去scan 原表的数据,然后把scan出来的数据写入到目标集群的表。这种方式也有很多局限,如一个表数据量达到T级,同时又在读写的情况下,全量scan表无疑会对集群性能造成影响。1.3->1.1 高到低版本 不需要提前建表,分区也会自动同步。

检查是否开启同步

echo 
"list_replicated_tables"
|
 hbase shell 
-
n 
|
grep dalishen
:
app_deviceid

没有的话执行

enable_table_replication 'tname'

1.源集群hadoop查询数据量,如太大先别迁移超过5000w

hbase org.apache.hadoop.hbase.mapreduce.RowCounter 'dalishen:app_deviceid'

2.源集群上执行 替换表名

hbase org.apache.hadoop.hbase.mapreduce.CopyTable -Dhbase.client.scanner.caching=1000 -Dmapred.map.tasks.speculative.execution=false -D mapreduce.task.timeout=6000000 --families=f:f --peer.adr=10.52.24.42:2181:/hbase-unsecure --new.name=dalishen:app_deviceid dalishen:app_deviceid

3.目标集群上执行数据量对比下

hbase org.apache.hadoop.hbase.mapreduce.RowCounter 'dalishen:app_deviceid'

4.指定时间戳进行增量同步

hbase org.apache.hadoop.hbase.mapreduce.CopyTable -Dhbase.client.scanner.caching=1000 -Dmapred.map.tasks.speculative.execution=false -D mapreduce.task.timeout=6000000 --starttime=1600792683760 --endtime=1600792684760 --families=f:f --peer.adr=172.18.12.7:2181:/hbase --new.name=testwang testwang

实时同步

1.在源集群进入hbase shell

add_peer '1', 'shyt-hadoop-4032.xxx.com.cn,shyt-hadoop-4031.xxx.com.cn,shyt-hadoop-4030.xxx.com.cn:2181:/hbase-unsecure'

2.修改REPLICATION_SCOPE属性=1,全局模式,此数据会被复制给所有peer

alter 'testwang',{NAME => 'f' ,REPLICATION_SCOPE => '1'}

3.进入hbase shell

hbase(main):006:0> enable_table_replication 'testwang'
0 row(s) in 0.0860 seconds
The replication swith of table 'testwang' successfully enabled
验证在源集群 
put 'testwang','1005','f:name','1005'
在目标集群 
get 'testwang','1005'
校验数据量:
同count
hbase org.apache.hadoop.hbase.mapreduce.RowCounter 'testwang'

4.查看同步状态:

hbase(main):016:0> status 'replication'
version 1.3.1
4 live servers
    172.18.x.x:
       SOURCE: PeerID=1, AgeOfLastShippedOp=789, SizeOfLogQueue=0, TimeStampsOfLastShippedOp=Wed Aug 12 15:22:43 CST 2020, Replication Lag=789 
               PeerID=2, AgeOfLastShippedOp=0, SizeOfLogQueue=6, TimeStampsOfLastShippedOp=Thu Jan 01 08:00:00 CST 1970, Replication Lag=1597216964669
       SINK  : AgeOfLastAppliedOp=0, TimeStampsOfLastAppliedOp=Wed Aug 12 15:21:25 CST 2020
    172.18.x.x:
       SOURCE: PeerID=1, AgeOfLastShippedOp=989, SizeOfLogQueue=0, TimeStampsOfLastShippedOp=Wed Aug 12 15:22:44 CST 2020, Replication Lag=989 
               PeerID=2, AgeOfLastShippedOp=0, SizeOfLogQueue=4, TimeStampsOfLastShippedOp=Thu Jan 01 08:00:00 CST 1970, Replication Lag=1597216964850
       SINK  : AgeOfLastAppliedOp=1001, TimeStampsOfLastAppliedOp=Wed Aug 12 15:22:43 CST 2020
    172.18.x.x:
       SOURCE: PeerID=1, AgeOfLastShippedOp=1382, SizeOfLogQueue=0, TimeStampsOfLastShippedOp=Wed Aug 12 15:22:43 CST 2020, Replication Lag=1382 
               PeerID=2, AgeOfLastShippedOp=0, SizeOfLogQueue=7, TimeStampsOfLastShippedOp=Thu Jan 01 08:00:00 CST 1970, Replication Lag=1597216963622
       SINK  : AgeOfLastAppliedOp=1011, TimeStampsOfLastAppliedOp=Wed Aug 12 15:22:41 CST 2020
    172.18.x.x:
       SOURCE: PeerID=1, AgeOfLastShippedOp=994, SizeOfLogQueue=0, TimeStampsOfLastShippedOp=Wed Aug 12 15:22:43 CST 2020, Replication Lag=994 
               PeerID=2, AgeOfLastShippedOp=1006, SizeOfLogQueue=0, TimeStampsOfLastShippedOp=Wed Aug 12 15:22:43 CST 2020, Replication Lag=1006
       SINK  : AgeOfLastAppliedOp=976, TimeStampsOfLastAppliedOp=Wed Aug 12 15:22:43 CST 2020

总结

建议大表先进行snapshot方式同步,然后再利用copy进行增量数据同步,小表直接copy table数据迁移,最后配置hbase replication peer实时同步。


相关实践学习
云数据库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
相关文章
|
5月前
|
机器学习/深度学习 分布式计算 Hadoop
一种HBase表数据迁移方法的优化
一种HBase表数据迁移方法的优化
52 0
|
分布式数据库 数据库 Hbase
|
运维 监控 分布式数据库
BDS - HBase数据迁移同步方案的设计与实践
目前在阿里云上,BDS是如何进行HBase集群之间的数据迁移和数据的实时同步的
6663 0
BDS - HBase数据迁移同步方案的设计与实践
|
存储 分布式计算 Shell
EMR(hadoop/hbase/phoenix夸集群数据迁移采坑记录)
一、概述: Hbase(Phoenix)数据迁移方案主要分为 Hadoop层面(distcp)、及Hbase层面(copyTable、export/import、snapshot) 二、以下针对distcp方案详细说明(以亲测阿里EMR为例): st...
2535 0
|
存储 分布式计算 监控
HBase存储剖析与数据迁移
1.概述   HBase的存储结构和关系型数据库不一样,HBase面向半结构化数据进行存储。所以,对于结构化的SQL语言查询,HBase自身并没有接口支持。在大数据应用中,虽然也有SQL查询引擎可以查询HBase,比如Phoenix、Drill这类。
1480 0
|
分布式计算 Hadoop 分布式数据库
|
5月前
|
Java Shell 分布式数据库
【大数据技术Hadoop+Spark】HBase数据模型、Shell操作、Java API示例程序讲解(附源码 超详细)
【大数据技术Hadoop+Spark】HBase数据模型、Shell操作、Java API示例程序讲解(附源码 超详细)
87 0
|
9月前
|
SQL 分布式计算 Hadoop
Hadoop集群hbase的安装
Hadoop集群hbase的安装
147 0
|
17天前
|
分布式计算 监控 Hadoop
Ganglia监控Hadoop与HBase集群
Ganglia监控Hadoop与HBase集群