描述
工作中,有时会碰到进行两个物理隔离的Hbase集群间数据迁移的需求,如果Hbase表足够大,那么走网络迁移路线无疑是很慢的,这种情况下走物理线路是最快选择,我们可以将生产库的表导成文本,再将这些文本移至目标库上,再执行导入命令即可。
数据导出
需要注意的是,该命令一定要在运行了Hbash节点实例的服务器上执行:
#!/bin/bash
# 将table_a中的数据全量卸至hdfs中的/export/test目录下
# 当前bash环境的用户要有操作hdfs的权限,且/export/test不能存在,否则会因输出路径已存在而报错
hbase org.apache.hadoop.hbase.mapreduce.Export 'table_a' /export/test
# 将/export/test文件下的数据拉取到本地
hadoop dfs -get /export/test ./
# 删除hdfs上的/export/test路径
hadoop dfs -rm -r /export/test
# 将table_a中的数据打包
tar cvf test.tar.gz test/
# 删除本地的test目录
rm -rf test
效果:
数据导入
如果两个集群是物理+网段隔离的,那么我们需要借助跳板机这样的设备进行数据中转,将test.tar.gz移至目标库环境中,一样的,在执行导入命令的时候,我们需要保证bash环境处于Hbash节点实例的服务器中:
#!/bin/bash
# 解压数据
tar xvf test.tar.gz
# 删除hdfs上传路径
hadoop dfs -rm -r /export
# 上传数据至hdfs
hadoop dfs -put /test /export
#执行导入
hbase org.apache.hadoop.hbase.mapreduce.Driver import 'table_a' /export
# 删除本地文件
rm -rf test*
效果:
后记
这种迁移方法快的多,实际运用也比较方便,大家有什么问题可下方留言交流。