方法一:
- 在华为云MRS创建两个HBase集群分别为hbase01,hbase02
- 登入hbase01集群后台
source /opt/client/bigdata_env
cd /opt/client/HBase/hbase/bin
./hbase shell
#确定需要导出的表的信息如命名空间,表名
list
scan ‘ns1:t1’
#确定需要导出的表的列族描述信息,使用”describe ‘命名空间:表名’”的语法,多个表用”;”连接
echo "describe '命名空间:表名'" | hbase shell > ./tablenameDDL.txt
vim ./tablenameDDL.txt
#将收集的信息清洗并且转换为建表语句
##清洗,去掉对于建表的无用信息
##转换
###添加建表语句关键词”create”,以及向命名空间和表名添加双引号,使建表语句符合hbase建表语句规范,并且将不同表的建表语句用”;”连接起来(注意:最后一条建表语句,不需要添加”;”)
###将不同表的建表语句合为一行建表语句
Ecs
:
%s/\n//g
#保存退出
:
wq
最终建表语句语句如下:
有时会遇到下面的报错,可以在建表语句中删掉TTL的描述
3. HBase客户端配置
两个集群都要执行如下配置,提前准备好访问OBS桶的AK、SK和endpoint信息或者使用ECS委托。
说明:获取AK、SK和endpoint信息请参考如下链接。https://support.huaweicloud.com/qs-obs/obs_qs_0005.html,https://support.huaweicloud.com/qs-obs/obs_qs_0006.html
- core-site.xml文件配置
vim /opt/client/HBase/hbase/conf/core-site.xml
找到fs.obs.access.key,将AK的值填到values字段中。
找到fs.obs.secret.key,将SK的值填到value字段中。
找到fs.obs.endpoint,将OBS对应区域的endpoint信息填到values字段中。
找到hadoop.security.credential.provider.path,注释掉values字段。
- yarn-site.xml文件配置
vim /opt/client/HBase/hbase/conf/yarn-site.xml
找到yarn.application.classpath,在value最后增加如下值。
,$HADOOP_YARN_HOME/share/Hadoop/tools/lib/*
4. Export相应的表数据到obs
#将需要导出的表使用以下命令,导出(每次命令只能导出一张表)
./hbase org.apache.hadoop.hbase.mapreduce.Export 命名空间:表名 obs文件夹路径(文件夹必须不存在)
#数据导出可能会出现内存占用过多,导致Namenode节点被杀死。解决方法是提高map和redudce任务的内存
vim /opt/client/HBase/hbase/conf/mapred-site.xml
5.登入hbase02集群后台
source /opt/client/bigdata_env
cd /opt/client/HBase/hbase/bin
./hbase shell
#确定需要导入的表,是否存在
list
#如果需要导入表不存在,则需要创建表,建表语句参照tablenameDDL.txt ,将相应的语句粘#贴到命令行中
#如果需要导入的所有表都不存在,则先退出hbase shell直接以下命令进行建表
hbase shell ./tablenameDDL.txt
6.Import阶段
#将需要导入的表使用以下命令,导入(每次命令只能导入一张表)
./hbase org.apache.hadoop.hbase.mapreduce.Import 命名空间:表名 obs路径
注意:数据导入完成后,将OBS上临时目录中的文件删除
7.查看迁移的数据
方法二:
- 在华为云MRS创建两个HBase集群分别为hbase01,hbase02.为保证网络通信正常,将两个集群设置为相同的VPC,子网和安全组.
- 登入hbase01集群后台
source /opt/client/bigdata_env
cd /opt/client/HBase/hbase/bin
./hbase shell
#确定需要导出的表的信息如命名空间,表名
list
scan ‘ns1:t1’
3. Snapshot为表打一个快照,不涉及数据移动,可以在线完成
snapshot 'ns1:t1','snapshot1'
4. ExportSnapshot将hbase1集群的表快照迁移到hbase2集群中.此操作涉及到MapReducer以及DataNode在拷贝数据的时候需要额外的带宽以及IO负载.
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot snapshot1 -copy-to hdfs://192.168.0.146:9820/hbase
5. hbase2查看快照和恢复
list_snapshots
没有对应的namespace,需要创建namespace
restore_snapshot用于恢复指定快照
6. 查看恢复的数据