一種用于hdfs系統(tǒng)的備份和恢復(fù)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種用于HDFS系統(tǒng)的備份和恢復(fù)方法,屬于數(shù)據(jù)處理技術(shù)領(lǐng)域。
【背景技術(shù)】
[0002]隨著大數(shù)據(jù)時(shí)代的到來,數(shù)據(jù)信息日益重要,數(shù)據(jù)保護(hù)問題日漸突出,各種災(zāi)難性事件給用戶敲醒很多警鐘。數(shù)據(jù)保護(hù)、數(shù)據(jù)的容災(zāi)是非常重要的話題。
[0003]據(jù)統(tǒng)計(jì),導(dǎo)致系統(tǒng)災(zāi)難的原因分布比例一般為:硬件故障占44%、人為錯(cuò)誤占32%、軟件故障占14%、病毒影響占7%、自然災(zāi)難占3%。數(shù)據(jù)容災(zāi)系統(tǒng),就是為計(jì)算機(jī)信息系統(tǒng)提供的一個(gè)能應(yīng)付各種災(zāi)難的環(huán)境。當(dāng)計(jì)算機(jī)系統(tǒng)在遭受如火災(zāi)、水災(zāi)、地震、戰(zhàn)爭等不可抗拒的自然災(zāi)難以及計(jì)算機(jī)犯罪、計(jì)算機(jī)病毒、掉電、網(wǎng)絡(luò)/通信失敗、硬件/軟件錯(cuò)誤和人為操作錯(cuò)誤等人為災(zāi)難時(shí),容災(zāi)系統(tǒng)將保證用戶數(shù)據(jù)的安全性。甚至,一個(gè)更加完善的容災(zāi)系統(tǒng),還能提供不間斷的應(yīng)用服務(wù)。
[0004]HDFS(Hadoop distributed filesystem,Hadoop 分布式文件系統(tǒng))被設(shè)計(jì)成適合運(yùn)行在通用硬件上的分布式文件系統(tǒng)。它和現(xiàn)有的分布式文件系統(tǒng)有很多共同點(diǎn)。但同時(shí),它和其他的分布式文件系統(tǒng)的區(qū)別也是很明顯的。HDFS是一個(gè)高度容錯(cuò)性的系統(tǒng),適合部署在廉價(jià)的機(jī)器上。HDFS能提供高吞吐量的數(shù)據(jù)訪問,非常適合大規(guī)模數(shù)據(jù)集上的應(yīng)用。
[0005]隨著HDFS的使用越來越普遍,如何把HDFS中的大量數(shù)據(jù)快速準(zhǔn)確地備份到遠(yuǎn)端服務(wù)器,并且能夠在指定的集群上迅速恢復(fù)成為了一個(gè)顯著問題。要解決這個(gè)問題,需要考慮的速度取決于數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)、增量生成速度、傳輸速度和并行度、數(shù)據(jù)刪冗程度等各種因素。
【發(fā)明內(nèi)容】
[0006]本發(fā)明要解決的技術(shù)問題是:實(shí)現(xiàn)HDFS的快速備份和恢復(fù)。
[0007]為實(shí)現(xiàn)上述的發(fā)明目的,本發(fā)明提供了一種用于HDFS系統(tǒng)的備份和恢復(fù)方法,包括如下步驟:
[0008]向備份服務(wù)器傳送備份數(shù)據(jù)的步驟:
[0009]輸入備份命令,生成一次全備份;
[0010]檢測(cè)HDFS系統(tǒng)行為,并定時(shí)生成增量備份;
[0011 ]將增量備份傳輸至備份服務(wù)器;
[0012]從備份服務(wù)器獲取備份數(shù)據(jù)的步驟:
[0013]指定文件恢復(fù)選項(xiàng)參數(shù);
[0014]按文件恢復(fù)選項(xiàng)參數(shù)從備份服務(wù)器下載備份數(shù)據(jù)。
[0015]其中較優(yōu)地,所述輸入備份命令,生成一次全備份的步驟具體包括:
[0016]在配置文件中進(jìn)行配置,輸入備份命令,進(jìn)行一次全備份;
[0017]建立日志文件;
[0018]將HDFS元數(shù)據(jù)序列化,并將序列化后的文件和日志文件并傳輸至備份服務(wù)器;
[0019]生成所有數(shù)據(jù)塊的列表;
[0020]通過心跳機(jī)制向備份服務(wù)器傳輸所有數(shù)據(jù)塊列表中的數(shù)據(jù)。
[0021]其中較優(yōu)地,所述配置文件包括:備份服務(wù)器的地址和備份時(shí)間間隔。
[0022]其中較優(yōu)地,所述檢測(cè)HDFS系統(tǒng)行為,并定時(shí)生成增量備份的步驟具體包括:
[0023]檢測(cè)HDFS系統(tǒng)行為并記錄元數(shù)據(jù)的改變;
[0024]將生成的數(shù)據(jù)增量記錄到發(fā)生變化的數(shù)據(jù)塊列表。
[0025]其中較優(yōu)地,所述數(shù)據(jù)增量中包括數(shù)據(jù)塊編號(hào)、時(shí)間戳和數(shù)據(jù)塊的長度。
[0026]其中較優(yōu)地,所述將增量備份多線程傳輸至備份服務(wù)器的步驟包括:
[0027]啟動(dòng)定時(shí)服務(wù),并定時(shí)生成空日志文件,將舊的日志文件傳輸至備份服務(wù)器;
[0028]將發(fā)生改變的數(shù)據(jù)塊列表通過心跳機(jī)制分配調(diào)度給相應(yīng)的數(shù)據(jù)節(jié)點(diǎn);
[0029]數(shù)據(jù)節(jié)點(diǎn)向服務(wù)器傳輸數(shù)據(jù)塊。
[0030]其中較優(yōu)地,所述數(shù)據(jù)節(jié)點(diǎn)向服務(wù)器傳輸數(shù)據(jù)塊的步驟具體包括:
[0031]將要傳輸?shù)臄?shù)據(jù)拆切割為若干數(shù)據(jù)包;
[0032]詢問備份服務(wù)器是否有切割完的數(shù)據(jù)包;
[0033]向服務(wù)器傳輸備份服務(wù)器中沒有的數(shù)據(jù)包。
[0034]其中較優(yōu)地,所述詢問備份服務(wù)器是否有切割完的數(shù)據(jù)包還包括:
[0035]對(duì)每個(gè)數(shù)據(jù)塊生成數(shù)據(jù)塊的MD5碼;
[0036]向備份服務(wù)器發(fā)送每個(gè)數(shù)據(jù)塊的MD5碼,并判斷當(dāng)前數(shù)據(jù)塊的MD5碼是否存在。
[0037]其中較優(yōu)地,所述備份服務(wù)器中備份端的內(nèi)存中有所有數(shù)據(jù)塊的MD5碼的列表。
[0038]其中較優(yōu)地,所述恢復(fù)選項(xiàng)參數(shù)具體包括:
[0039]要恢復(fù)的文件系統(tǒng)的備份文件標(biāo)識(shí)、數(shù)據(jù)節(jié)點(diǎn)的總個(gè)數(shù)、數(shù)據(jù)節(jié)點(diǎn)的編號(hào)。
[0040]本發(fā)明提供的用于HDFS系統(tǒng)的備份和恢復(fù)方法,在一個(gè)全新的任意臺(tái)機(jī)器組成的HDFS系統(tǒng)上進(jìn)行任意版本的數(shù)據(jù)恢復(fù);在備份服務(wù)器支持版本瀏覽以及最新版本備份的完整查看等功能,可以實(shí)現(xiàn)高效的分布式文件系統(tǒng)備份和恢復(fù)。
【附圖說明】
[0041]圖1是本發(fā)明實(shí)施例中的用于HDFS的分布式文件系統(tǒng)備份和恢復(fù)步驟流程圖;
[0042]圖2是本發(fā)明本發(fā)明實(shí)施例中的用于HDFS將增量備份多線程傳給備份服務(wù)器示意圖。
【具體實(shí)施方式】
[0043]下面結(jié)合附圖和實(shí)施例,對(duì)本發(fā)明的【具體實(shí)施方式】作進(jìn)一步詳細(xì)描述。以下實(shí)施例用于說明本發(fā)明,但不用來限制本發(fā)明的范圍。
[0044]如圖1、圖2所示,首先,本發(fā)明提供的用于HDFS系統(tǒng)的備份和恢復(fù)方法應(yīng)用于本地文件系統(tǒng)HDFS和備份服務(wù)器的備份系統(tǒng)中。本地文件系統(tǒng)HDFS,在Apache HDFS基礎(chǔ)上進(jìn)行修改,添加文件內(nèi)容改變檢測(cè)、增量備份存儲(chǔ)、備份加密傳輸、文件內(nèi)容恢復(fù)等功能。遠(yuǎn)端備份服務(wù)器安裝一個(gè)HDFS用于存儲(chǔ)大量的備份數(shù)據(jù),引入HDFS庫文件,具有備份保存、備份合并、傳輸刪冗以及為本地文件系統(tǒng)提供服務(wù)的接口。
[0045]如圖1、圖2所示,本發(fā)明提供一種用于HDFS系統(tǒng)的備份和恢復(fù)方法,包括向備份服務(wù)器傳送備份數(shù)據(jù)的步驟和從備份服務(wù)器獲取備份數(shù)據(jù)的步驟,具體包括向備份服務(wù)器傳送備份數(shù)據(jù)的步驟:輸入備份命令,生成一次全備份;檢測(cè)HDFS系統(tǒng)行為,并定時(shí)生成增量備份;將增量備份多線程傳輸至備份服務(wù)器;從備份服務(wù)器獲取備份數(shù)據(jù)的步驟:指定文件恢復(fù)選項(xiàng)參數(shù);按文件恢復(fù)選項(xiàng)參數(shù)從備份服務(wù)器下載備份數(shù)據(jù)。下面對(duì)本發(fā)明展開詳細(xì)的說明。
[0046]首先,介紹向備份服務(wù)器傳送備份數(shù)據(jù)的步驟。
[0047]S1:輸入備份命令,生成一次全備份。具體包括:在配置文件中輸入備份命令,HDFS系統(tǒng)執(zhí)行備份命令。配置文件優(yōu)選是hdfs-backup.xml。配置文件存放于$HADOOP/etc/hadoop/hdfs-backup.xml,需要配置備份服務(wù)器的地址端口和備份的時(shí)間間隔。配置完成以后HDFS系統(tǒng)執(zhí)行備份命令。在全備份完畢后建立日志文件。日志文件包括記錄HDFS系統(tǒng)元數(shù)據(jù)改變的數(shù)據(jù)變化日志FSEditLog和記錄記錄HDFS系統(tǒng)元數(shù)據(jù)改變和塊數(shù)據(jù)改變的備份日志FSBackuplog。將HDFS元數(shù)據(jù)序列化,并將序列化后的文件FSImage和日志文件并傳輸至備份服務(wù)器;HDFS系統(tǒng)生成所有數(shù)據(jù)塊的列表,HDFS系統(tǒng)通過心跳機(jī)制通知數(shù)據(jù)節(jié)點(diǎn)向備份服務(wù)器傳輸所有數(shù)據(jù)塊列表中的數(shù)據(jù)block。
[0048]HDFS系統(tǒng)通過心跳機(jī)制通知數(shù)據(jù)節(jié)點(diǎn)向備份服務(wù)器傳輸所有數(shù)據(jù)塊列表中的數(shù)據(jù)的步驟具體包括:名字節(jié)點(diǎn)NameNode通過下一次心跳包回復(fù)給數(shù)據(jù)節(jié)點(diǎn)DataNode發(fā)送BlockBackupCommand命令,數(shù)據(jù)節(jié)點(diǎn)DataNode傳輸相應(yīng)地?cái)?shù)據(jù)塊列表中的數(shù)據(jù)block給備份服務(wù)器。
[0049]S2:檢測(cè)HDFS系統(tǒng)行為,并定時(shí)生成增量備份。具體包括:檢測(cè)HDFS系統(tǒng)行為并記錄元數(shù)據(jù)的改變。HDFS系統(tǒng)行為優(yōu)選由名字節(jié)點(diǎn)NameNode實(shí)時(shí)監(jiān)測(cè)。將生成數(shù)據(jù)的增量記錄到發(fā)生變化的數(shù)據(jù)塊列表。將新生成數(shù)據(jù)的增量寫入備份日志FSBackuplog中。備份日志FSBackuplog記錄發(fā)生變化的數(shù)據(jù)塊的列表。文件系統(tǒng)備份需要有唯一的標(biāo)識(shí),使用HDFS的備份文件標(biāo)識(shí)block pool id作為該文件系統(tǒng)的標(biāo)識(shí)符;文件系統(tǒng)標(biāo)識(shí)符是全局唯一的一個(gè)字符串;每次生成增量備份時(shí),由NameNode以系統(tǒng)時(shí)間作為該版本的版本號(hào);傳輸增量備份時(shí),需要制定文件系統(tǒng)標(biāo)識(shí)符和版本號(hào)。將發(fā)生改變的數(shù)據(jù)塊列表分配調(diào)度給相應(yīng)的數(shù)據(jù)節(jié)點(diǎn)。具體地,關(guān)于增量備份生成速度,備份由備份日志FSBackuplog和數(shù)據(jù)塊組成,在每一次文件系統(tǒng)發(fā)生改變時(shí),都會(huì)把發(fā)生的改變寫入增量中。生成備份時(shí),只需要新建文件來存儲(chǔ)新一版本的增量,舊版本的增量可以直接被處理并傳輸至備份服務(wù)器。
[0050]S3:將增量備份多線程傳輸給服務(wù)器。啟動(dòng)定時(shí)服務(wù),并定時(shí)生成空日志文件,將舊的日志文件傳輸至備份服務(wù)器;定時(shí)服務(wù)優(yōu)選由名字節(jié)點(diǎn)NameNode啟動(dòng)。名字節(jié)點(diǎn)NameNode定時(shí)生成新的備份日志FSBackuplog文件,并將舊的備份日志FSBackuplog文件傳輸至服務(wù)器。名字節(jié)點(diǎn)NameNode將發(fā)生改變的數(shù)據(jù)塊列表分配調(diào)度給相應(yīng)的數(shù)據(jù)節(jié)點(diǎn)DataNode,通過心跳回復(fù)發(fā)送命令,由每個(gè)數(shù)據(jù)節(jié)點(diǎn)DataNode各自將實(shí)際的塊數(shù)據(jù)傳送給備份服務(wù)器。具體地:將要傳輸?shù)臄?shù)據(jù)拆切割為若干數(shù)據(jù)包;詢問備份服務(wù)器是否有切割完的數(shù)據(jù)包;向服務(wù)器傳輸備份服務(wù)器中沒有的數(shù)據(jù)包。數(shù)據(jù)節(jié)點(diǎn)DataNode將要傳輸?shù)臄?shù)據(jù)塊切割為4K大小的數(shù)據(jù)包;對(duì)每個(gè)數(shù)據(jù)塊生成數(shù)據(jù)塊的MD5碼并詢問備份服務(wù)器是否已經(jīng)有該數(shù)據(jù)塊;數(shù)據(jù)節(jié)點(diǎn)DataNode將一個(gè)數(shù)據(jù)塊的所有MD5碼發(fā)送給備份服務(wù)器服務(wù)器,詢問備份服務(wù)器服務(wù)器是否已經(jīng)在本地具有該數(shù)據(jù)塊。若備份服務(wù)器沒有與當(dāng)前MD5碼對(duì)應(yīng)的數(shù)據(jù)塊,則對(duì)當(dāng)前的數(shù)據(jù)塊進(jìn)行加密傳輸。備份服務(wù)器用一個(gè)HDFS進(jìn)行數(shù)據(jù)存儲(chǔ),在內(nèi)存中保持一個(gè)本地所有的4K文件塊的MD5碼的列表,支持實(shí)時(shí)高效查詢。備份服務(wù)器將查詢結(jié)果返回給HDFS。HDFS收到備份服務(wù)器的回復(fù)之后,把備份服務(wù)器沒有的4K數(shù)據(jù)塊,通過DES Coder加密傳輸?shù)絺浞莘?wù)器服務(wù)器。備份服務(wù)器通過socket收到數(shù)據(jù)塊之后通過DES Decoder解密,把數(shù)據(jù)塊寫入相應(yīng)地位置。
[0051]備份服務(wù)器在接收到完整版本的備份之后,將增量備份合并到所保存的全備份中,生成最新的全備份,寫入本地HDFS文件系統(tǒng),為了支持本地最新版本備份的查看。
[0052]其次,介紹從備份服務(wù)器獲取備份數(shù)據(jù)的步驟。
[0053]HDFS文件系統(tǒng)重新安裝后,首先執(zhí)行名字節(jié)點(diǎn)NameNode的格式化format操作;啟動(dòng)文件分布系統(tǒng)dfs腳本,指定命令行中執(zhí)行命令時(shí)的選項(xiàng)recoverFromBackup (不可與其他選項(xiàng)一同使用),參數(shù)為想要恢復(fù)的文件系統(tǒng)的備份文件標(biāo)識(shí)b