本文已参与「新人创作礼」活动,一起开启掘金创作之路。
前言:
最近要跨集群迁移hbase 表,这里选择迁移Hadoop
底层数据来实现hbase的表迁移。
迁移Hadoop
底层文件的方式有两种:
distcp
- 从旧集群
get
获取文件到本地在put
到新集群上。
因为,我们这个A集群是kerberos 环境,B集群是不带kerberos环境,这里使用Distcp的方式,需要添加一个白名单的配置,并且也需要重启集群,这里就不采用distcp的方式了,使用 get/put的方式。这里仅是为了迁移底层数据,所以选择那种方式都可以。
环境信息:
CDH版本 :5.13
Hbase版本 :1.2
这里 我们将迁移 tj_idcard_all_new_h
作为实践。
实施:
这里有两个关键的步骤:
拷贝底层表hdfs数据
使用hbck工具恢复表数据
1. 下载数据
这一步骤,先将hbase 表的数据从旧集群下载到本地
hbase 表的默认HDFS路径通常为 /hbase/data/<name_space>/<table_name>
hadoop fs -get /hbase/data/default/tj_idcard_all_new_h/ /tmp/tj_idcard_all_new_h
这里大家要写迁移表的实际的hdfs路径。
2. 上传数据
这一步骤,先将从旧集群下载到本地的文件上传到新集群
hadoop fs -put /tmp/tj_idcard_all_new_h /tmp/hbase/tj_idcard_all_new_h/
再将文件移动到Hbase的目录下
hdfs dfs -mv /tmp/tj_idcard_all_new_h /tmp/hbase/tj_idcard_all_new_h/ /hbase/data/default
3. 修复.META.表
sudo -u hbase hbase hbck -fixMeta
4. 重新分配到各分区服务器
sudo -u hbase hbase hbck -fixAssignments
5. 进入hbase
sudo -u hbase hbase shell
6. 查看是否成功
scan "库名:表名",{LIMIT => 10}
总结:
- 最好将全部的文件都put到新集群后在修复元数据
- 新集群不需要提前创建同名表
.tabledesc
和.tmp
也需要发送到新集群上,别忘记了
问题:
问题1:在.META.表没修复时执行重新分配,会报错
报错内容:
#hbase hbck -fixAssignment
...
ERROR: Region { meta => null, hdfs => hdfs://h185:54310/hbase/toplist_ware_total_1009_201232/0403552001eb2a31990e443dcae74ee8, deployed => } on HDFS, but not listed in META or deployed on any region server
...
解决方案:
先修复 -fixMeta 再-fixAssignment
参考:
https://blog.csdn.net/weixin_43320617/article/details/119926516?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link
https://blog.csdn.net/u011250186/article/details/105998886