HBase跨集群数据同步

一、通过快照进行拷贝
 
1、在源集群执行如下命令:
(1)进入Hbase shell客户端(hbase shell)
snapshot 'iflyol:OsspDataAnaSysDayCube','OsspDataAnaSysDayCube_iflyol'
 
2、在源集群执行(hadoop账户):
/usr/server/hbase/bin/hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \
> -snapshot 'OsspDataAnaSysDayCube_iflyol' \
> -copy-from hdfs://{namenode1}:9000/hbase \
> -copy-to hdfs://{namenode2}:9000/hbase \
> -mappers 20 \
> -bandwidth 2048
 
3、在目标集群执行
clone_snapshot 'OsspDataAnaSysDayCube_iflyol','iflyol:OsspDataAnaSysDayCube'
 
4、删除源集群和目标集群上面的snapshot
 delete_snapshot 'OsspDataAnaSysDayCube_iflyol'
 
二、通过export/import进行拷贝
 
 
 
 
三、通过distcp加Load迁移HBase数据(以下命令都在新集群执行,此方法速度最快)
hadoop distcp \
-Dmapreduce.job.name=distcphbase \
-Dmapreduce.job.queuename=default \
-skipcrccheck \
-update \
-m 1000 \
hdfs://{namenode1}:9000/hbase/data/iflyol/OsspDataAnaSysDayCube \
hdfs://{namenode2}:9000/user/${dir}/OsspDataAnaSysDayCube
 
hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles -Dhbase.mapreduce.bulkload.max.hfiles.perRegion.perFamily=1024 hdfs://{namenode2}:9000/user/${dir}/OsspDataAnaSysDayCube 'iflyol:OsspDataAnaSysDayCube'
 
 
================以下脚本供参考==============
source ~/.bashrc
 
tablename=$1
filename=$1
 
echo "开始同步HBase数据到新集群"
hadoop distcp -Dmapreduce.job.name=distcp_hbase_$tablename -Dmapreduce.job.queuename=spark -skipcrccheck -update -m 1000 hdfs://{namenode1}:9000/hbase/data/iflyol/$tablename hdfs://{namenode2}:9000/user/${dir}/$tablename
 
echo "HBase数据同步完毕!"
 
echo "开始导入HBase数据"
for region in `hadoop fs -du -s -h /user/${dir}/$tablename/* |awk -F '/' '{print $NF}'`;
do
echo $region
hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles -Dhbase.mapreduce.bulkload.max.hfiles.perRegion.perFamily=1024 hdfs://{namenode2}:9000/user/${dir}/$tablename/$region iflyol:$tablename
done
echo "HBase数据导入完毕!"
 
 
 
 

posted @ 2020-09-28 11:16  l_g1990  阅读(910)  评论(0编辑  收藏  举报