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);