Hbase迁移方法较多,本次使用的是逆向恢复,即直接将hbaes数据目录get到本地,并put到新集群的hdfs目录下,并进行元数据恢复,简单粗暴,以下为详细步骤
- 在源集群上将hbase表整个目录get到本地磁盘
hdfs dfs -get /apps/hbase/data/data/namespace/tablename
或者hadoop fs -copyToLocal /apps/hbase/data/data/namespace/tablename
- 将本地磁盘当前目录下的数据put到目标hbase集群的hdfs目录下
hdfs dfs -put ./tablename /apps/hbase/data/data/namespace
或者hadoop fs -copyFromLocal ./tablename /apps/hbase/data/data/namespace
要注意权限 put上去权限会修改为hdfs:hdfs 需要修改hbase:hdfs 切换hbase用户 查看表 并无数据 3. 通过hbase自带的修复命令做逆向恢复
hbase hbck -fixMeta -ignorePreCheckPermission namespace:tablename
hbase hbck -fix -ignorePreCheckPermission namespace:tablename
修复时执行第一个命令后,可以在hbase上看到这张表,但没有数据,无法查看,且状态为INCONSISTENT,如下
执行第二个命令后,表状态显示为OK,hbase中也有数据 则迁移成功,如下:
补充一点 hdfs copytolocal 和 get的区别 它们的区别在于copyToLocal的源路径只能是一个本地的文件。而put的源路径可能是多个文件,也可能是标准输入。 当hadoop fs -put - hdfs://host:port/hadoop/hadoopfile时表示从标准输入接收数据,这个时候目标路径必须是一个文件 简单的说,-put更宽松,可以把本地或者HDFS上的文件拷贝到HDFS中;而-copyFromLocal则更严格限制只能拷贝本地文件到HDFS中。
|