HBase数据备份在Ubuntu上的常用方法
Export/Import是HBase自带的命令行工具,通过Scan读取表数据并导出到HDFS,支持全量和增量备份,适合同一集群内的数据迁移。
hadoop)登录Ubuntu服务器;hbdss)数据导出到HDFS路径(如/hbase/backup):sudo -u hbase hbase org.apache.hadoop.hbase.mapreduce.Export hbdss /hbase/backup/hbdss_full
③ 验证导出结果:hdfs dfs -ls /hbase/backup/hbdss_full
start_time、end_time,单位为时间戳),例如:sudo -u hbase hbase org.apache.hadoop.hbase.mapreduce.Export hbdss /hbase/backup/hbdss_incremental_$(date +%Y%m%d) 1234567890 9876543210
sudo -u hbase hbase org.apache.hadoop.hbase.mapreduce.Import hbdss /hbase/backup/hbdss_full
Snapshot是HBase的原生轻量级备份方案,通过元数据记录表的状态,无需复制数据,适合快速全量备份。
hbase shell
② 执行创建快照命令(如为student表创建快照student_snapshot):snapshot 'student', 'student_snapshot'
.hbase-snapshot目录复制到HDFS备份路径:hdfs dfs -cp /hbase/.hbase-snapshot/student_snapshot /hbase/backup/snapshot
restore_snapshot 'student_snapshot'
CopyTable可将现有表的数据复制到同一集群内的新表,支持指定row区间、列族或时间范围,适合表级别的备份或迁移。
source_table复制到dest_table):sudo -u hbase hbase org.apache.hadoop.hbase.mapreduce.CopyTable --new.name=dest_table source_table
--starttime和--endtime参数(时间戳格式):sudo -u hbase hbase org.apache.hadoop.hbase.mapreduce.CopyTable --new.name=dest_table --starttime=1704067200000 --endtime=1705363200000 source_table
Replication可实现HBase集群间的实时数据同步,适合需要高可用性的场景,备份集群会自动接收主集群的增量数据。
hbase-site.xml中启用Replication:<property>
<name>hbase.replication</name>
<value>true</value>
</property>
② 添加备份集群的Peer配置(替换为目标集群的ZooKeeper地址):hbase shell
add_peer '1', 'hbase://zk1.backup-cluster:2181,zk2.backup-cluster:2181,zk3.backup-cluster:2181/hbase'
③ 在主集群创建表时,开启Replication(或在已有表上执行enable_replication):create 'student', 'cf', {REPLICATION_SCOPE => '1'}
通过脚本整合上述工具(如Export+Snapshot),并使用Ubuntu的cron设置定时任务,实现定期自动备份。
/home/ubuntu/hbase_backup.sh,内容如下:#!/bin/bash
SOURCE_TABLE="student"
BACKUP_DIR="/hbase/backup"
DATE=$(date +%Y%m%d)
# 全量备份(每月1号执行)
if [ $(date +%d) -eq 01 ]; then
sudo -u hbase hbase org.apache.hadoop.hbase.mapreduce.Export $SOURCE_TABLE ${BACKUP_DIR}/${SOURCE_TABLE}_full_${DATE}
else
# 增量备份(记录上次备份时间,需自行维护)
LAST_BACKUP_TIME=$(cat /tmp/last_backup_time.txt 2>/dev/null || echo 0)
sudo -u hbase hbase org.apache.hadoop.hbase.mapreduce.Export $SOURCE_TABLE ${BACKUP_DIR}/${SOURCE_TABLE}_incremental_${DATE} $LAST_BACKUP_TIME $(date +%s)
echo $(date +%s) > /tmp/last_backup_time.txt
fi
crontab:crontab -e
添加以下内容(每天凌晨2点执行):0 2 * * * /bin/bash /home/ubuntu/hbase_backup.sh >> /var/log/hbase_backup.log 2>&1
/hbase/backup)有正确的读写权限(hdfs dfs -chmod -R 777 /hbase/backup);