[b]1, hbase自帶的備份恢復工具[/b]
hbase org.apache.hadoop.hbase.mapreduce.export 'table1' /home/fred/table1
hbase org.apache.hadoop.hbase.mapreduce.import 'table1' /home/fred/table1
匯入時必須先建立表結構。
[url]
import time
import datetime
from datetime import date
import sys
import os
tablename=sys.argv[1]
backupdst=sys.argv[2]
today=date.today()
if today.day == 15: //every month, we do a full backup
backupsubfolder=backupdst+today.isoformat()+"-full"
cmd="hbase org.apache.hadoop.hbase.mapreduce.export %s %s"%(tablename,backupsubfolder)
else:
yesterday=datetime.date.today()- datetime.timedelta(days=1)
todaytimestamp=time.mktime(today.timetuple())
yestimestamp=time.mktime(yesterday.timetuple())
backupsubfolder=backupdst+today.isoformat()
cmd="hbase org.apache.hadoop.hbase.mapreduce.export %s %s %s"%(tablename,backupsubfolder,str(int(todaytimestamp)*1000)
print cmd
os.system(cmd)
[b]2, 把某個表(table1)從集群1遷移到集群2(兩個集群互相看不見),步驟如下[/b]
1、拷貝集群1的表檔案到本地磁碟,拷貝之前要停掉集群1的hbase服務,否則會丟失資料
hadoop fs -copytolocal /hbase/table1 /home/fred/hb_bak/table1
2、對於檔案操作,很簡單吧,隨便你怎麼去拷貝來拷貝去
3、如果集群2中也有對應的表檔案,那麼刪除掉,然後拷貝
hadoop fs -rmr /hbase/table1
hadoop fs -copyfromlocal /home/fred/hb_bak/table1 /hbase/table1
4、到hbase的bin目錄下,重置該錶在.meta.表中的分割槽資訊
hbase org.jruby.main add_table.rb /hbase/table1
5、重啟hbase使表的重置資訊生效,切忌強制停掉hbase服務,否側損壞資料
另外:1、如果表的資料量過大呢? 那麼按照該錶在hdfs中的資料夾資料,分批拷貝。
2、如果兩個集群可以互相通訊呢?那麼更爽了,直接使用distcp對拷,是並行的。
[b]3, hbase backup options[/b]
[url]
如果你打算部署hbase,那麼你一定要考慮如何備份的問題,下面是作者列舉的他所知道的一些備份方式,如果有遺漏的,歡迎補充。
[u]export[/u]
hbase提供了export的mapreduce job(org.apache.hadoop.hbase.mapreduce.export)可以將表匯出為hdfs的順序檔案(sequencefile),這是由hbase-1684貢獻的工具。此工具一次只能操作一張表,匯出的順序檔案可以通過import工具匯入hbase。
[u]copy table[/u]
在兩個hbase集群之間複製資料,也可以通過copy table工具,這也是mapreduce實現的,一次操作一張表。
[u]distcp[/u]
你也可以利用hdfs的distcp工具將整個/hbase複製到另外乙個hdfs集群,但如果這可能導致複製的資料不一致,所以盡量不要這麼做,除非先將源集群停止服務,參考:
[u]backup from mozilla[/u]
由於dictcp做集群複製存在資料不一致的問題,mozilla的開發人員開發了乙個backup工具,具體情況請參考他們的這篇migrating hbase in the trenches。
[u]cluster replication[/u]
hbase從0.89版本開始引入集群複製功能,所以我們也可以利用此功能將資料備份到另乙個集群。複製的目標集群不需要和源集群同配置,因此可以將資料通過複製備份到乙個較低成本的集群中。
[u]table snapshot[/u]
在著名的hbase-50中就提出了snapshot的問題,儘管在gsoc 2010期間做了大量的工作,但不知由於什麼原因,一直沒有合併進hbase的主流分支。jira上已經有乙個patch,但已經較長時間無進展了。
[u]hdfs replication[/u]
hdfs中的資料是有多份拷貝的,你也可以把這多份的拷貝當作一種備份,它雖然不能防止資料損壞,但能容忍部分硬體故障。
HBase 備份及恢復
注意事項 1.hbase版本需要保持一致,否則資料無法恢復 本方案使用export及import方法,還有其他方法可以實現,暫不涉及。1.備份,以表為單位進行匯出 bin hbase org.apache.hadoop.hbase.mapreduce.export table name dst pa...
hbase備份恢復
usage import options by default import will load data directly into hbase.to instead generate hfiles of data to prepare for a bulk data load,pass the ...
RMAN備份及恢復
rman備份 1 spfile和controlfile的自動備份 當configure controlfile autobackup off時,僅當備份system01.dbf時才會自動備份controlfile和spfile 當configure controlfile autobackup on...