hbase 備份及恢復

2021-08-31 22:00:19 字數 2722 閱讀 8068

[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...