最近要跨集群迁移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工具恢复表数据
这一步骤,先将hbase 表的数据从旧集群下载到本地
hbase 表的默认HDFS路径通常为 /hbase/data/
hadoop fs -get /hbase/data/default/tj_idcard_all_new_h/ /tmp/tj_idcard_all_new_h
2. 上传数据这里大家要写迁移表的实际的hdfs路径。
这一步骤,先将从旧集群下载到本地的文件上传到新集群
hadoop fs -put /tmp/tj_idcard_all_new_h /tmp/hbase/tj_idcard_all_new_h/3. 修复.meta.表
sudo -u hbase hbase hbck -fixmeta4. 重新分配到各分区服务器
sudo -u hbase hbase hbck -fixAssignments5. 进入hbase
sudo -u hbase hbase shell6. 查看是否成功
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



