Hbase数据迁移方案
hbase的数据迁移有几种,要求新老集群间所有机器间网络通并配有路由表或dns,查资料发现以下几种方案:
1.走hdfs数据远程拷贝
直接用hadoop distcp远程拷贝迁移出hfiles(先将原表disable下线,flush确保memostore持久化),再在新hbase集群创建相同表,通过LoadIncrementalHFiles工具载入hfile到这个新表
低层原理是利用hadoop mapreduce 将Hfiles文件作为输入并行拷贝到新hdfs集群
2.Hbase CopyTable方式
直接利用hbase org.apache.hadoop.hbase.mapreduce.CopyTable工具深度拷贝真实表数据到新集群,低层原理也是通过mapreduce,不过输入需要全表扫描原表,增大老Hbase集群的压力,影响上层业务
3.Hbase Export/Import方式
分两步进行:
-
hbase org.apache.hadoop.hbase.mapreduce.Export
扫描原表转化成sequence file落入hdfs(新hdfs集群)
-
hbase org.apache.hadoop.hbase.mapreduce.Import
新集群导入sequence file到新集群
相比copyTable,可以通过先生产中间文件,实现跨不同Hbase版本实现迁移,没有兼容顾虑,但也需要扫描全表
4.ExportSnapshot方式(推荐)
-
老集群hbase shell通过snapshot创建表快照
这个快照只拷贝原表的元数据,非深拷贝
-
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot命令导出快照到新Hbase集群
这个过程会通过MR任务将Hfile迁移到新集群hdfs下的快照表临时目录
-
新集群上从快照恢复成原表并强制合并文件
restore_snapshot ‘ t a b l e N a m e s n a p s h o t ′ , 从 快 照 恢 复 成 原 表 m