目 录
0.引 言
1.备份方法
2.脚本的使用方法
3 获取HDFS文件到本地系统
4 数据恢复方法
4.1 将将备份文件添加到hdfs中
4.2 导入数据到HBase集群
5.小 结
HBase在大数据处理中地位至关重要,有的公司会将HBase作为原始数据接入层,那么Hbase的数据备份就显得至关重要,那么如何备份呢?这里我们引入Hbase的一个API,hbase org.apache.hadoop.hbase.mapreduce.Export,该API可以实现同一集群间的数据备份。
初始化全量备份 + 增量备份手段
基本原理:Export导出工具与CopyTable一样是依赖hbase的scan读取数据,并且采用的ImportFormat与CopyTable一样是TableInputFormat类,从该类的getSplits()方法可以看出MR的map数与hbase表的region数相同。
执行日程:
备份按照每张hbase中的表进行备份,每月的1号进行全量备份,每天进行增量备份
执行内容:
每月1号进行全量备份 在linux上执行如下命令
hbase org.apache.hadoop.hbase.mapreduce.Export tablename backupDst
每天进行增量备份,执行如下命令
hbase org.apache.hadoop.hbase.mapreduce.Export tablename backupDst versionstart_time end_time
※脚本参数列表如下图所示:
参数 |
tablename |
hdfs_path |
version |
start_time |
end_time |
backupDst |
含义 |
hbase中需要备份的表 |
备份到hdfs中的父路径 |
Hbase的版本号,增量备份的时候需要指定,否则不能备份 |
增量备份的时候起始时间戳 |
增量备份的时候结束时间戳 |
备份的目录。具体由如下格式组成:hdfs_path/ hbase_tablename_date(备份当天的日期,2019-08-22)_f (全量备份为f,增量为i) |
※具体示例脚本如下:
prepare_run.sh脚本
该脚本是执行备份脚本之前需要先做的准备工作
#!/bin/bash
su - hdfs <
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
注:增量备份的时候必须指定版本号,否则不能备份。全量备份的时候,可以指定也可以不指定。
① 把脚本上传到服务器,位置是/home/centos/xxx/HbaseBackup(需要赋予脚本可执行权限)
chmod 777 –R /home/centos/xxx/HbaseBackup
② 首次备份需要在root用户下执行prepare_run.sh,创建hdfs上的备份目录/backup
③在/etc/crontab中设置定时任务,备份hbase中的每张表
Hbase中需要备份的表是通过位置参数传入进去,具体可参考如下图所示:
④查看hdfs中结果
文件夹以“_f”结尾的为全量备份,以“_i”结尾的为增量备份
将HDFS中的/backup目录下的备份文件复制到本地系统中/home/centos/opt/下
如:
hadoop dfs -get /backup/phm_default_input /home/centos/opt/phm_default_input
opt的目录需要用户手动创建,get之后系统会自动创建phm_default_input的目录,在HDFS上该目录下的所有内容也会被复制过来。如下图所示:
备份到本地后可以将数据拷贝到磁盘中,作为下一次数据恢复使用。
将上面的目录复制到新的机器中,通过put将文件上传到hdfs中去。
hadoop dfs -put localFile hdfsFile
如下:把系统的/home/centos/opt/student 上传到新集群hdfs的/bak目录下下。
(1)拷贝数据到新集群的本地目录下。
创建/home/centos/opt,利用相关远传工具将数据复制到新的集群中。
rm -rf /home/centos/opt
mkdir -p /home/centos/opt
(2)在新集群环境的hdfs中创建/bak目录
为了避免权限等一些不必要的麻烦采用如下操作
su - hdfs << EOF
hadoop fs -rmr /bak;
hadoop fs -mkdir -p /bak;
hadoop fs -chmod -R 777 /bak;
exit;
EOF
(3)put上传本地文件到HDFS集群
hadoop fs -put /home/centos/opt/student /bak
(4) 查看上传到HDFS中的文件
[root@bigdata-1 opt]# hadoop fs -ls /bak
(1)先建立一张与原来一样的表。如student表
create 'student','infor'
结果如下:
(2)采用HBase的import工具将数据导入
hbase org.apache.hadoop.hbase.mapreduce.Import student /bak/student
执行结果如下:
(3) 导入结束后查看数据是否导入成功
可以看到数据已经被成功导入。
(4)数据导入时需要注意的问题
本文主要讲解Hbase数据备份及迁移方法,备份主要采用Hbase自带的工具Export进行备份,该备份工具结合shell脚本可有效的实现Hbase层的增量备份与全量备份,对于备份好的数据需要实现不同网络之间集群的数据迁移时可以采用Import工具进行数据导入,文章给出了完整的数据备份及迁移解决方案,并在实际中得到了良好的应用。