一种Hbase数据备份策略及方法
0.引言
Hbase在大数据处理中地位至关重要,有的公司会将Hbase作为原始数据接入层,那么Hbase的数据备份就显得至关重要,那么如何备份呢?这里我们引入Hbase的一个API,hbase org.apache.hadoop.hbase.mapreduce.Export,该API可以实现同一集群间的数据备份。
1.备份方法
初始化全量备份 + 增量备份手段
执行日程:
备份按照每张hbase中的表进行备份,每月的1号进行全量备份,每天进行增量备份
执行内容:
每月1号进行全量备份 在linux上执行如下命令
./hbase org.apache.hadoop.hbase.mapreduce.Exporttablename backupDst
每天进行增量备份,执行如下命令
./hbase org.apache.hadoop.hbase.mapreduce.Export tablename backupDst versionstart_time end_time
※脚本参数列表如下图所示:
![](https://img.haomeiwen.com/i20945954/747b70fcecbe2696.png)
※具体示例脚本如下:
prepare_run.sh脚本
该脚本是执行备份脚本之前需要先做的准备工作
#!/bin/bash
su - hdfs <<EOF
hadoop fs -rm -R /backup
hadoop fs -mkdir /backup
hadoop fs -chmod -R 777 /backup
exit;
EOF
ods_xxx_hbase_backup_full_in.sh脚本
#!/bin/bash
##############################################################################################################################################
# HBASE data backup full and increment #
########################################################################################
day=`date +%d`;#获取今天的日期
if [ "$2" != "" ];then
day=$2
fi;
today=`date +%Y-%m-%d` #获取今天的日期
lastday=`date --date '-1days' +%Y-%m-%d` #获得昨天的日期
hbase_tablename='iot_dcqk_shock';#hbase中需要备份的表
if [ "$1" != "" ];then
hbase_tablename=$1
fi;
hdfs_path='hdfs://10.1.3.12/backup';#hdfs路径,已经在hdfs中建好,且赋予777权限,需要根据自己集群修改
start_time=`date -d $lastday +%s`;#增量备份的起始时间戳
end_time=`date -d $today +%s`;#增量备份的结束时间戳
version='2';
#每月1号进行全量备份,其余时间增量备份
if [ $day == '01' ];
then
#需要备份到hdfs上的目录
backupDst=$hdfs_path"/"$hbase_tablename"_"$today"_f";
hbase org.apache.hadoop.hbase.mapreduce.Export $hbase_tablename $backupDst $version
else
backupDst=$hdfs_path"/"$hbase_tablename"_"$today"_i";
hbase org.apache.hadoop.hbase.mapreduce.Export $hbase_tablename $backupDst $version $start_time $end_time
fi
2.脚本的使用方法
① 把脚本上传到服务器,位置是/home/centos/xxx/HbaseBackup(需要赋予脚本可执行权限)
chmod 777 –R /home/centos/xxx/HbaseBackup
② 首次备份需要在root用户下执行prepare_run.sh,创建hdfs上的备份目录/backup
③在/etc/crontab中设置定时任务,备份hbase中的每张表
Hbase中需要备份的表是通过位置参数传入进去,具体可参考如下图所示:
![](https://img.haomeiwen.com/i20945954/ed4a5c80baa85d2e.png)
④查看hdfs中结果
![](https://img.haomeiwen.com/i20945954/fcce2ae22e1962c7.png)
文件夹以“_f”结尾的为全量备份,以“_i”结尾的为增量备份
3.总结
本文主要讲解Hbase数据备份方法,备份主要采用Hbase自带的工具hbase org.apache.hadoop.hbase.mapreduce.Export进行备份,该备份工具结合shell脚本可有效的实现Hbase层的增量备份与全量备份,并在实际中得到了良好的应用。