本公開涉及分布式
技術(shù)領(lǐng)域:
,特別涉及一種數(shù)據(jù)遷移方法及裝置。
背景技術(shù):
:隨著互聯(lián)網(wǎng)技術(shù)的迅速發(fā)展,人們越來越多地使用計算機存儲數(shù)據(jù),這使得對數(shù)據(jù)存儲的需求不斷增長。由于單機的文件系統(tǒng)存儲容量有限,因此時下各大互聯(lián)網(wǎng)公司一般均采用自研或開源的分布式文件系統(tǒng)存儲數(shù)據(jù)。其中,分布式文件系統(tǒng)具體通過多個數(shù)據(jù)節(jié)點實現(xiàn)數(shù)據(jù)存儲,每一個數(shù)據(jù)節(jié)點可包括多個磁盤。由于數(shù)據(jù)節(jié)點均有一定的使用壽命,不可避免地存在數(shù)據(jù)節(jié)點宕機或者磁盤損壞的情況,這將給用戶帶來不必要的麻煩。此時為了保證數(shù)據(jù)的高可用性,需要將宕機數(shù)據(jù)節(jié)點或損壞磁盤上的數(shù)據(jù)遷移到其他可用的數(shù)據(jù)節(jié)點或磁盤上。相關(guān)技術(shù)中,當(dāng)出現(xiàn)數(shù)據(jù)節(jié)點宕機或者磁盤損壞等情況時,分布式文件系統(tǒng)會進(jìn)行基礎(chǔ)報警,之后需要維護人員通過人工排查找到宕機數(shù)據(jù)節(jié)點或損壞磁盤,并需維護人員利用數(shù)據(jù)遷移工具手動將宕機數(shù)據(jù)節(jié)點或損壞磁盤上存儲的數(shù)據(jù)遷移到其他可用的數(shù)據(jù)節(jié)點上。由于數(shù)據(jù)遷移的過程需要人工介入,因此容易出錯,而且不能做到對數(shù)據(jù)的實時遷移。技術(shù)實現(xiàn)要素:為克服相關(guān)技術(shù)中存在的問題,本公開提供一種數(shù)據(jù)遷移方法及裝置。根據(jù)本公開實施例的第一方面,提供一種數(shù)據(jù)遷移方法,包括:周期性獲取分布式文件系統(tǒng)中每一個數(shù)據(jù)節(jié)點的工作狀態(tài)信息;對于每一個數(shù)據(jù)節(jié)點,基于所述數(shù)據(jù)節(jié)點的工作狀態(tài)信息,判斷所述數(shù)據(jù)節(jié)點中是否存在工作異常的磁盤;若所述數(shù)據(jù)節(jié)點中存在工作異常的磁盤,則基于數(shù)據(jù)塊屬性列表確定所述工作異常的磁盤上存儲的至少一個數(shù)據(jù)塊;對于所述至少一個數(shù)據(jù)塊中的每一個數(shù)據(jù)塊,在除所述數(shù)據(jù)節(jié)點之外的其他數(shù)據(jù)節(jié)點中選取待遷移的目標(biāo)數(shù)據(jù)節(jié)點;將所述數(shù)據(jù)塊遷移到所述目標(biāo)數(shù)據(jù)節(jié)點上。在另一個實施例中,所述基于所述數(shù)據(jù)節(jié)點的工作狀態(tài)信息,判斷所述數(shù)據(jù)節(jié)點中是否存在工作異常的磁盤,包括:若所述數(shù)據(jù)節(jié)點的工作狀態(tài)信息在預(yù)設(shè)時長內(nèi)未進(jìn)行更新,則確定所述數(shù)據(jù)節(jié)點發(fā)生宕機,將所述數(shù)據(jù)節(jié)點上每一個磁盤均確定為工作異常的磁盤;或,若所述工作狀態(tài)信息中包括至少一個磁盤的異常狀態(tài)信息,則確定所述至少一個磁盤為工作異常的磁盤。在另一個實施例中,所述在除所述數(shù)據(jù)節(jié)點之外的其他數(shù)據(jù)節(jié)點中選取待遷移的目標(biāo)數(shù)據(jù)節(jié)點,包括:在所述其他數(shù)據(jù)節(jié)點中確定存儲所述數(shù)據(jù)塊的其他副本的第一數(shù)據(jù)節(jié)點;在第二數(shù)據(jù)節(jié)點中選取一個有空閑存儲位置的數(shù)據(jù)節(jié)點作為所述目標(biāo)數(shù)據(jù)節(jié)點,所述第二數(shù)據(jù)節(jié)點為所述其他數(shù)據(jù)節(jié)點中除所述第一數(shù)據(jù)節(jié)點之外的數(shù)據(jù)節(jié)點。在另一個實施例中,所述將所述數(shù)據(jù)塊遷移到所述目標(biāo)數(shù)據(jù)節(jié)點上,包括:在存儲所述數(shù)據(jù)塊的其他副本的第一數(shù)據(jù)節(jié)點中確定源數(shù)據(jù)節(jié)點;向所述源數(shù)據(jù)節(jié)點發(fā)送數(shù)據(jù)塊復(fù)制請求,所述數(shù)據(jù)塊復(fù)制請求中至少包括所述數(shù)據(jù)塊的第一屬性信息和所述目標(biāo)數(shù)據(jù)節(jié)點的第二屬性信息,以使所述源數(shù)據(jù)節(jié)點在根據(jù)所述第一屬性信息獲取到本地存儲的所述數(shù)據(jù)塊后,基于所述第二屬性信息將所述數(shù)據(jù)塊發(fā)送至所述目標(biāo)數(shù)據(jù)節(jié)點。在另一個實施例中,所述方法還包括:接收所述源數(shù)據(jù)節(jié)點返回的數(shù)據(jù)寫入響應(yīng);獲取所述數(shù)據(jù)塊更新后的第三屬性信息,所述第三屬性信息中至少包括所述目標(biāo)數(shù)據(jù)節(jié)點的節(jié)點標(biāo)識和存儲所述數(shù)據(jù)塊的磁盤的磁盤標(biāo)識;根據(jù)所述數(shù)據(jù)塊的塊標(biāo)識,將所述第三屬性信息更新至所述數(shù)據(jù)塊屬性列表中。在另一個實施例中,所述基于數(shù)據(jù)塊屬性列表確定所述工作異常的磁盤上存儲的至少一個數(shù)據(jù)塊,包括:獲取所述工作異常的磁盤中每一個磁盤的磁盤標(biāo)識;對于每一個工作異常的磁盤,根據(jù)所述磁盤標(biāo)識在所述數(shù)據(jù)塊屬性列表中進(jìn)行查找,得到與所述磁盤標(biāo)識匹配的至少一個塊標(biāo)識;將所述至少一個塊標(biāo)識指示的數(shù)據(jù)塊確定為所述工作異常的磁盤上存儲的至少一個數(shù)據(jù)塊;其中,所述數(shù)據(jù)塊屬性列表中包括每一個數(shù)據(jù)塊的塊標(biāo)識與存儲每一個數(shù)據(jù)塊的磁盤的磁盤標(biāo)識、以及所述磁盤所屬數(shù)據(jù)節(jié)點的節(jié)點標(biāo)識。根據(jù)本公開實施例的第二方面,提供一種數(shù)據(jù)遷移方法,包括:接收分布式文件系統(tǒng)中遷移節(jié)點發(fā)送的數(shù)據(jù)塊復(fù)制請求,所述數(shù)據(jù)塊復(fù)制請求中至少包括數(shù)據(jù)塊的第一屬性信息和待遷移的目標(biāo)數(shù)據(jù)節(jié)點的第二屬性信息,所述數(shù)據(jù)塊復(fù)制請求由所述遷移節(jié)點在確定一個數(shù)據(jù)節(jié)點上存在工作異常的磁盤后發(fā)送;根據(jù)所述第一屬性信息獲取本地存儲的所述數(shù)據(jù)塊;生成數(shù)據(jù)塊存儲請求,所述數(shù)據(jù)塊存儲請求中攜帶所述數(shù)據(jù)塊和所述第二屬性信息中包含的磁盤標(biāo)識;基于所述第二屬性信息包含的節(jié)點標(biāo)識,將所述數(shù)據(jù)存儲請求發(fā)送至所述目標(biāo)數(shù)據(jù)節(jié)點,以使所述目標(biāo)數(shù)據(jù)存儲所述數(shù)據(jù)塊。在另一個實施例中,所述根據(jù)所述第一屬性信息獲取本地存儲的所述數(shù)據(jù)塊,包括:根據(jù)所述第一屬性信息中包括的磁盤標(biāo)識,確定存儲所述數(shù)據(jù)塊的磁盤;根據(jù)所述第一屬性信息中包括的塊標(biāo)識,從所述磁盤中獲取所述數(shù)據(jù)塊。在另一個實施例中,所述方法還包括:向所述目標(biāo)數(shù)據(jù)節(jié)點發(fā)送校驗信息,以使所述目標(biāo)數(shù)據(jù)節(jié)點根據(jù)所述校驗信息對臨時存儲文件進(jìn)行校驗,所述臨時存儲文件由所述目標(biāo)數(shù)據(jù)節(jié)點在接收到所述數(shù)據(jù)存儲請求后,將所述數(shù)據(jù)塊寫入臨時文件得到。根據(jù)本公開實施例的第三方面,提供一種數(shù)據(jù)遷移方法,包括:接收分布式文件系統(tǒng)中源數(shù)據(jù)節(jié)點發(fā)送的數(shù)據(jù)塊存儲請求,所述數(shù)據(jù)塊存儲請求由所述源數(shù)據(jù)節(jié)點在接收到遷移節(jié)點發(fā)送的數(shù)據(jù)塊復(fù)制請求后發(fā)送,所述數(shù)據(jù)塊復(fù)制請求由所述遷移節(jié)點在確定一個數(shù)據(jù)節(jié)點上存在工作異常的磁盤后發(fā)送;獲取所述數(shù)據(jù)塊存儲請求中攜帶的數(shù)據(jù)塊,并將所述數(shù)據(jù)塊寫入到臨時文件中,得到臨時存儲文件;接收所述源數(shù)據(jù)節(jié)點發(fā)送的校驗信息,在根據(jù)所述校驗信息對所述臨時存儲文件校驗成功后,將所述數(shù)據(jù)塊寫入到所述數(shù)據(jù)塊存儲請求中攜帶的磁盤標(biāo)識指示的磁盤中。根據(jù)本公開實施例的第四方面,提供一種數(shù)據(jù)遷移裝置,包括:第一獲取模塊,被配置為周期性獲取分布式文件系統(tǒng)中每一個數(shù)據(jù)節(jié)點的工作狀態(tài)信息;判斷模塊,被配置為對于每一個數(shù)據(jù)節(jié)點,基于所述數(shù)據(jù)節(jié)點的工作狀態(tài)信息,判斷所述數(shù)據(jù)節(jié)點中是否存在工作異常的磁盤;確定模塊,被配置為若所述數(shù)據(jù)節(jié)點中存在工作異常的磁盤,則基于數(shù)據(jù)塊屬性列表確定所述工作異常的磁盤上存儲的至少一個數(shù)據(jù)塊;選取模塊,被配置為對于所述至少一個數(shù)據(jù)塊中的每一個數(shù)據(jù)塊,在除所述數(shù)據(jù)節(jié)點之外的其他數(shù)據(jù)節(jié)點中選取待遷移的目標(biāo)數(shù)據(jù)節(jié)點;遷移模塊,被配置為將所述數(shù)據(jù)塊遷移到所述目標(biāo)數(shù)據(jù)節(jié)點上。在另一個實施例中,所述判斷模塊,被配置為若所述數(shù)據(jù)節(jié)點的工作狀態(tài)信息在預(yù)設(shè)時長內(nèi)未進(jìn)行更新,則確定所述數(shù)據(jù)節(jié)點發(fā)生宕機,將所述數(shù)據(jù)節(jié)點上每一個磁盤均確定為工作異常的磁盤;或,若所述工作狀態(tài)信息中包括至少一個磁盤的異常狀態(tài)信息,則確定所述至少一個磁盤為工作異常的磁盤。在另一個實施例中,所述選取模塊,被配置為在所述其他數(shù)據(jù)節(jié)點中確定存儲所述數(shù)據(jù)塊的其他副本的第一數(shù)據(jù)節(jié)點;在第二數(shù)據(jù)節(jié)點中選取一個有空閑存儲位置的數(shù)據(jù)節(jié)點作為所述目標(biāo)數(shù)據(jù)節(jié)點,所述第二數(shù)據(jù)節(jié)點為所述其他數(shù)據(jù)節(jié)點中除所述第一數(shù)據(jù)節(jié)點之外的數(shù)據(jù)節(jié)點。在另一個實施例中,所述遷移模塊,被配置為在存儲所述數(shù)據(jù)塊的其他副本的第一數(shù)據(jù)節(jié)點中確定源數(shù)據(jù)節(jié)點;向所述源數(shù)據(jù)節(jié)點發(fā)送數(shù)據(jù)塊復(fù)制請求,所述數(shù)據(jù)塊復(fù)制請求中至少包括所述數(shù)據(jù)塊的第一屬性信息和所述目標(biāo)數(shù)據(jù)節(jié)點的第二屬性信息,以使所述源數(shù)據(jù)節(jié)點在根據(jù)所述第一屬性信息獲取到本地存儲的所述數(shù)據(jù)塊后,基于所述第二屬性信息將所述數(shù)據(jù)塊發(fā)送至所述目標(biāo)數(shù)據(jù)節(jié)點。在另一個實施例中,所述裝置還包括:接收模塊,被配置為接收所述源數(shù)據(jù)節(jié)點返回的數(shù)據(jù)寫入響應(yīng);第二獲取模塊,被配置為獲取所述數(shù)據(jù)塊更新后的第三屬性信息,所述第三屬性信息中至少包括所述目標(biāo)數(shù)據(jù)節(jié)點的節(jié)點標(biāo)識和存儲所述數(shù)據(jù)塊的磁盤的磁盤標(biāo)識;更新模塊,被配置為根據(jù)所述數(shù)據(jù)塊的塊標(biāo)識,將所述第三屬性信息更新至所述數(shù)據(jù)塊屬性列表中。在另一個實施例中,所述確定模塊,被配置為獲取所述工作異常的磁盤中每一個磁盤的磁盤標(biāo)識;對于每一個工作異常的磁盤,根據(jù)所述磁盤標(biāo)識在所述數(shù)據(jù)塊屬性列表中進(jìn)行查找,得到與所述磁盤標(biāo)識匹配的至少一個塊標(biāo)識;將所述至少一個塊標(biāo)識指示的數(shù)據(jù)塊確定為所述工作異常的磁盤上存儲的至少一個數(shù)據(jù)塊;其中,所述數(shù)據(jù)塊屬性列表中包括每一個數(shù)據(jù)塊的塊標(biāo)識與存儲每一個數(shù)據(jù)塊的磁盤的磁盤標(biāo)識、以及所述磁盤所屬數(shù)據(jù)節(jié)點的節(jié)點標(biāo)識。根據(jù)本公開實施例的第五方面,提供一種數(shù)據(jù)遷移裝置,包括:接收模塊,被配置為接收分布式文件系統(tǒng)中遷移節(jié)點發(fā)送的數(shù)據(jù)塊復(fù)制請求,所述數(shù)據(jù)塊復(fù)制請求中至少包括數(shù)據(jù)塊的第一屬性信息和待遷移的目標(biāo)數(shù)據(jù)節(jié)點的第二屬性信息,所述數(shù)據(jù)塊復(fù)制請求由所述遷移節(jié)點在確定一個數(shù)據(jù)節(jié)點上存在工作異常的磁盤后發(fā)送;獲取模塊,被配置為根據(jù)所述第一屬性信息獲取本地存儲的所述數(shù)據(jù)塊;生成模塊,被配置為生成數(shù)據(jù)塊存儲請求,所述數(shù)據(jù)塊存儲請求中攜帶所述數(shù)據(jù)塊和所述第二屬性信息中包含的磁盤標(biāo)識;發(fā)送模塊,被配置為基于所述第二屬性信息包含的節(jié)點標(biāo)識,將所述數(shù)據(jù)存儲請求發(fā)送至所述目標(biāo)數(shù)據(jù)節(jié)點,以使所述目標(biāo)數(shù)據(jù)存儲所述數(shù)據(jù)塊。在另一個實施例中,所述獲取模塊,被配置為根據(jù)所述第一屬性信息中包括的磁盤標(biāo)識,確定存儲所述數(shù)據(jù)塊的磁盤;根據(jù)所述第一屬性信息中包括的塊標(biāo)識,從所述磁盤中獲取所述數(shù)據(jù)塊。在另一個實施例中,所述裝置還包括:校驗?zāi)K,被配置為向所述目標(biāo)數(shù)據(jù)節(jié)點發(fā)送校驗信息,以使所述目標(biāo)數(shù)據(jù)節(jié)點根據(jù)所述校驗信息對臨時存儲文件進(jìn)行校驗,所述臨時存儲文件由所述目標(biāo)數(shù)據(jù)節(jié)點在接收到所述數(shù)據(jù)存儲請求后,將所述數(shù)據(jù)塊寫入臨時文件得到。根據(jù)本公開實施例的第六方面,提供一種數(shù)據(jù)遷移裝置,包括:接收模塊,被配置為接收分布式文件系統(tǒng)中源數(shù)據(jù)節(jié)點發(fā)送的數(shù)據(jù)塊存儲請求,所述數(shù)據(jù)塊存儲請求由所述源數(shù)據(jù)節(jié)點在接收到遷移節(jié)點發(fā)送的數(shù)據(jù)塊復(fù)制請求后發(fā)送,所述數(shù)據(jù)塊復(fù)制請求由所述遷移節(jié)點在確定一個數(shù)據(jù)節(jié)點上存在工作異常的磁盤后發(fā)送;獲取模塊,被配置為獲取所述數(shù)據(jù)塊存儲請求中攜帶的數(shù)據(jù)塊,并將所述數(shù)據(jù)塊寫入到臨時文件中,得到臨時存儲文件;寫入模塊,被配置為接收所述源數(shù)據(jù)節(jié)點發(fā)送的校驗信息,在根據(jù)所述校驗信息對所述臨時存儲文件校驗成功后,將所述數(shù)據(jù)塊寫入到所述數(shù)據(jù)塊存儲請求中攜帶的磁盤標(biāo)識指示的磁盤中。根據(jù)本公開實施例的第七方面,提供一種數(shù)據(jù)遷移裝置,包括:處理器;用于存儲處理器可執(zhí)行指令的存儲器;其中,所述處理器被配置為:周期性獲取分布式文件系統(tǒng)中每一個數(shù)據(jù)節(jié)點的工作狀態(tài)信息;對于每一個數(shù)據(jù)節(jié)點,基于所述數(shù)據(jù)節(jié)點的工作狀態(tài)信息,判斷所述數(shù)據(jù)節(jié)點中是否存在工作異常的磁盤;若所述數(shù)據(jù)節(jié)點中存在工作異常的磁盤,則基于數(shù)據(jù)塊屬性列表確定所述工作異常的磁盤上存儲的至少一個數(shù)據(jù)塊;對于所述至少一個數(shù)據(jù)塊中的每一個數(shù)據(jù)塊,在除所述數(shù)據(jù)節(jié)點之外的其他數(shù)據(jù)節(jié)點中選取待遷移的目標(biāo)數(shù)據(jù)節(jié)點;將所述數(shù)據(jù)塊遷移到所述目標(biāo)數(shù)據(jù)節(jié)點上。根據(jù)本公開實施例的第八方面,提供一種數(shù)據(jù)遷移裝置,包括:處理器;用于存儲處理器可執(zhí)行指令的存儲器;其中,所述處理器被配置為:接收分布式文件系統(tǒng)中遷移節(jié)點發(fā)送的數(shù)據(jù)塊復(fù)制請求,所述數(shù)據(jù)塊復(fù)制請求中至少包括數(shù)據(jù)塊的第一屬性信息和待遷移的目標(biāo)數(shù)據(jù)節(jié)點的第二屬性信息,所述數(shù)據(jù)塊復(fù)制請求由所述遷移節(jié)點在確定一個數(shù)據(jù)節(jié)點上存在工作異常的磁盤后發(fā)送;根據(jù)所述第一屬性信息獲取本地存儲的所述數(shù)據(jù)塊;生成數(shù)據(jù)塊存儲請求,所述數(shù)據(jù)塊存儲請求中攜帶所述數(shù)據(jù)塊和所述第二屬性信息中包含的磁盤標(biāo)識;基于所述第二屬性信息包含的節(jié)點標(biāo)識,將所述數(shù)據(jù)存儲請求發(fā)送至所述目標(biāo)數(shù)據(jù)節(jié)點,以使所述目標(biāo)數(shù)據(jù)存儲所述數(shù)據(jù)塊。根據(jù)本公開實施例的第九方面,提供一種數(shù)據(jù)遷移裝置,包括:處理器;用于存儲處理器可執(zhí)行指令的存儲器;其中,所述處理器被配置為:接收分布式文件系統(tǒng)中源數(shù)據(jù)節(jié)點發(fā)送的數(shù)據(jù)塊存儲請求,所述數(shù)據(jù)塊存儲請求由所述源數(shù)據(jù)節(jié)點在接收到遷移節(jié)點發(fā)送的數(shù)據(jù)塊復(fù)制請求后發(fā)送,所述數(shù)據(jù)塊復(fù)制請求由所述遷移節(jié)點在確定一個數(shù)據(jù)節(jié)點上存在工作異常的磁盤后發(fā)送;獲取所述數(shù)據(jù)塊存儲請求中攜帶的數(shù)據(jù)塊,并將所述數(shù)據(jù)塊寫入到臨時文件中,得到臨時存儲文件;接收所述源數(shù)據(jù)節(jié)點發(fā)送的校驗信息,在根據(jù)所述校驗信息對所述臨時存儲文件校驗成功后,將所述數(shù)據(jù)塊寫入到所述數(shù)據(jù)塊存儲請求中攜帶的磁盤標(biāo)識指示的磁盤中。本公開的實施例提供的技術(shù)方案可以包括以下有益效果:在周期性獲取到分布式文件系統(tǒng)中每一個數(shù)據(jù)節(jié)點的工作狀態(tài)信息后,對于每一個數(shù)據(jù)節(jié)點,若基于該數(shù)據(jù)節(jié)點的工作狀態(tài)信息判斷出該數(shù)據(jù)節(jié)點中存在工作異常的磁盤,則基于數(shù)據(jù)塊屬性列表確定該工作異常的磁盤上存儲的至少一個數(shù)據(jù)塊;對于至少一個數(shù)據(jù)塊中的每一個數(shù)據(jù)塊,在除該數(shù)據(jù)節(jié)點之外的其他數(shù)據(jù)節(jié)點中選取待遷移的目標(biāo)數(shù)據(jù)節(jié)點,并將該數(shù)據(jù)塊遷移到目標(biāo)數(shù)據(jù)節(jié)點上。由于在數(shù)據(jù)節(jié)點宕機或者磁盤損壞等情況時,數(shù)據(jù)遷移過程由分布式文件系統(tǒng)自動完成,不需要工作人員人工操作,因此簡單方便,實現(xiàn)了數(shù)據(jù)的實時遷移。應(yīng)當(dāng)理解的是,以上的一般描述和后文的細(xì)節(jié)描述僅是示例性和解釋性的,并不能限制本公開。附圖說明此處的附圖被并入說明書中并構(gòu)成本說明書的一部分,示出了符合本發(fā)明的實施例,并與說明書一起用于解釋本發(fā)明的原理。圖1是根據(jù)一示例性實施例示出的一種分布式文件系統(tǒng)的架構(gòu)圖。圖2是根據(jù)一示例性實施例示出的一種數(shù)據(jù)遷移方法的流程圖。圖3是根據(jù)一示例性實施例示出的一種數(shù)據(jù)遷移方法的流程圖。圖4是根據(jù)一示例性實施例示出的一種數(shù)據(jù)遷移方法的流程圖。圖5是根據(jù)一示例性實施例示出的一種數(shù)據(jù)遷移方法的流程圖。圖6是根據(jù)一示例性實施例示出的一種數(shù)據(jù)遷移裝置的框圖。圖7是根據(jù)一示例性實施例示出的一種數(shù)據(jù)遷移裝置的框圖。圖8是根據(jù)一示例性實施例示出的一種數(shù)據(jù)遷移裝置的框圖。圖9是根據(jù)一示例性實施例示出的一種數(shù)據(jù)遷移裝置的框圖。圖10是根據(jù)一示例性實施例示出的一種數(shù)據(jù)遷移裝置的框圖。圖11是根據(jù)一示例性實施例示出的一種數(shù)據(jù)遷移裝置的框圖。具體實施方式這里將詳細(xì)地對示例性實施例進(jìn)行說明,其示例表示在附圖中。下面的描述涉及附圖時,除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實施例中所描述的實施方式并不代表與本發(fā)明相一致的所有實施方式。相反,它們僅是與如所附權(quán)利要求書中所詳述的、本發(fā)明的一些方面相一致的裝置和方法的例子。在對本公開實施例進(jìn)行詳細(xì)的解釋說明之前,先對本公開實施例涉及的分布式文件系統(tǒng)的架構(gòu)進(jìn)行簡單介紹。參見圖1,該分布式文件系統(tǒng)的架構(gòu)中包括客戶端(Client)、主節(jié)點(MasterNode)、從節(jié)點(SlaveNode)、數(shù)據(jù)節(jié)點(DataNode)以及磁盤(Storage)。其中,客戶端負(fù)責(zé)提供文件的讀寫接口。需要說明的是,此處的客戶端并不等同于一般意義上的個人固定終端或個人移動終端等客戶端,其本質(zhì)上為分布式文件系統(tǒng)提供的應(yīng)用服務(wù)器。主節(jié)點和從節(jié)點構(gòu)成了MHA(MasterHighAvailability,主節(jié)點高可用)架構(gòu),其中主節(jié)點對外提供寫服務(wù),一個從節(jié)點作為備選主節(jié)點,從節(jié)點提供讀服務(wù),一旦主節(jié)點宕機,將會把備選從節(jié)點提升為新的主節(jié)點繼續(xù)工作。此外,主節(jié)點負(fù)責(zé)存儲分布式文件系統(tǒng)的相關(guān)元數(shù)據(jù)信息,包括數(shù)據(jù)塊(Block)的分布信息和當(dāng)前所有數(shù)據(jù)節(jié)點的信息。數(shù)據(jù)節(jié)點負(fù)責(zé)存儲文件的數(shù)據(jù)和相關(guān)的元數(shù)據(jù)信息,按Block的方式存儲,文件占用Block的一部分。Block按照多副本的方式存放在多個數(shù)據(jù)節(jié)點上,一個數(shù)據(jù)節(jié)點上可能有多個磁盤。本公開實施例對上述Block副本個數(shù)及數(shù)據(jù)節(jié)點上的磁盤數(shù)量均不進(jìn)行具體限定。在本公開實施例中,遷移節(jié)點存在于MHA架構(gòu)中,遷移節(jié)點中運行有進(jìn)程DataMoverManager(數(shù)據(jù)遷移管理),用于實現(xiàn)數(shù)據(jù)遷移。正常情況下,數(shù)據(jù)節(jié)點的工作狀態(tài)信息會每隔預(yù)設(shè)時長(比如10s)更新一次,而DataMoverManager會定期查詢每一個數(shù)據(jù)節(jié)點的工作狀態(tài)信息。若一個數(shù)據(jù)節(jié)點的在一段時間內(nèi)(比如30min)未更新其工作狀態(tài)信息,則DataMoverManager確定該數(shù)據(jù)節(jié)點發(fā)生宕機,將該數(shù)據(jù)節(jié)點上每一個磁盤均確定為工作異常的磁盤。此時,需要將該數(shù)據(jù)節(jié)點上所有磁盤存儲的數(shù)據(jù)遷移到其他數(shù)據(jù)節(jié)點上。若該數(shù)據(jù)節(jié)點的工作狀態(tài)信息中包括至少一個磁盤的異常狀態(tài)信息,則確定該至少一個磁盤為工作異常的磁盤,此時,需要將該至少一個磁盤上存儲的數(shù)據(jù)遷移到其他數(shù)據(jù)節(jié)點上。圖2是根據(jù)一示例性實施例示出的一種數(shù)據(jù)遷移方法的流程圖,如圖2所示,該方法用于遷移節(jié)點中,包括以下步驟。在步驟201中,周期性獲取分布式文件系統(tǒng)中每一個數(shù)據(jù)節(jié)點的工作狀態(tài)信息。在步驟202中,對于每一個數(shù)據(jù)節(jié)點,基于該數(shù)據(jù)節(jié)點的工作狀態(tài)信息,判斷該數(shù)據(jù)節(jié)點中是否存在工作異常的磁盤;若該數(shù)據(jù)節(jié)點中存在工作異常的磁盤,則執(zhí)行下述步驟203;若該數(shù)據(jù)節(jié)點中不存在工作異常的磁盤,則針對該數(shù)據(jù)節(jié)點的處理流程至此結(jié)束。在步驟203中,若該數(shù)據(jù)節(jié)點中存在工作異常的磁盤,則基于數(shù)據(jù)塊屬性列表確定該工作異常的磁盤上存儲的至少一個數(shù)據(jù)塊。在步驟204中,對于至少一個數(shù)據(jù)塊中的每一個數(shù)據(jù)塊,在除該數(shù)據(jù)節(jié)點之外的其他數(shù)據(jù)節(jié)點中選取待遷移的目標(biāo)數(shù)據(jù)節(jié)點,將該數(shù)據(jù)塊遷移到該目標(biāo)數(shù)據(jù)節(jié)點上。本公開實施例提供的方法,遷移節(jié)點在周期性獲取到分布式文件系統(tǒng)中每一個數(shù)據(jù)節(jié)點的工作狀態(tài)信息后,對于每一個數(shù)據(jù)節(jié)點,若基于該數(shù)據(jù)節(jié)點的工作狀態(tài)信息判斷出該數(shù)據(jù)節(jié)點中存在工作異常的磁盤,則基于數(shù)據(jù)塊屬性列表確定該工作異常的磁盤上存儲的至少一個數(shù)據(jù)塊;對于至少一個數(shù)據(jù)塊中的每一個數(shù)據(jù)塊,遷移節(jié)點在除該數(shù)據(jù)節(jié)點之外的其他數(shù)據(jù)節(jié)點中選取待遷移的目標(biāo)數(shù)據(jù)節(jié)點,并將該數(shù)據(jù)塊遷移到目標(biāo)數(shù)據(jù)節(jié)點上。由于在數(shù)據(jù)節(jié)點宕機或者磁盤損壞等情況時,數(shù)據(jù)遷移過程由分布式文件系統(tǒng)自動完成,不需要工作人員人工操作,因此簡單方便,實現(xiàn)了數(shù)據(jù)的實時遷移。在另一個實施例中,基于數(shù)據(jù)節(jié)點的工作狀態(tài)信息,判斷數(shù)據(jù)節(jié)點中是否存在工作異常的磁盤,包括:若數(shù)據(jù)節(jié)點的工作狀態(tài)信息在預(yù)設(shè)時長內(nèi)未進(jìn)行更新,則確定數(shù)據(jù)節(jié)點發(fā)生宕機,將數(shù)據(jù)節(jié)點上每一個磁盤均確定為工作異常的磁盤;或,若工作狀態(tài)信息中包括至少一個磁盤的異常狀態(tài)信息,則確定至少一個磁盤為工作異常的磁盤。在另一個實施例中,在除數(shù)據(jù)節(jié)點之外的其他數(shù)據(jù)節(jié)點中選取待遷移的目標(biāo)數(shù)據(jù)節(jié)點,包括:在其他數(shù)據(jù)節(jié)點中確定存儲數(shù)據(jù)塊的其他副本的第一數(shù)據(jù)節(jié)點;在第二數(shù)據(jù)節(jié)點中選取一個有空閑存儲位置的數(shù)據(jù)節(jié)點作為目標(biāo)數(shù)據(jù)節(jié)點,第二數(shù)據(jù)節(jié)點為其他數(shù)據(jù)節(jié)點中除第一數(shù)據(jù)節(jié)點之外的數(shù)據(jù)節(jié)點。在另一個實施例中,將數(shù)據(jù)塊遷移到目標(biāo)數(shù)據(jù)節(jié)點上,包括:在存儲數(shù)據(jù)塊的其他副本的第一數(shù)據(jù)節(jié)點中確定源數(shù)據(jù)節(jié)點;向源數(shù)據(jù)節(jié)點發(fā)送數(shù)據(jù)塊復(fù)制請求,數(shù)據(jù)塊復(fù)制請求中至少包括數(shù)據(jù)塊的第一屬性信息和目標(biāo)數(shù)據(jù)節(jié)點的第二屬性信息,以使源數(shù)據(jù)節(jié)點在根據(jù)第一屬性信息獲取到本地存儲的數(shù)據(jù)塊后,基于第二屬性信息將數(shù)據(jù)塊發(fā)送至目標(biāo)數(shù)據(jù)節(jié)點。在另一個實施例中,將數(shù)據(jù)塊遷移到目標(biāo)數(shù)據(jù)節(jié)點上之后,該方法還包括:接收源數(shù)據(jù)節(jié)點返回的數(shù)據(jù)寫入響應(yīng);獲取數(shù)據(jù)塊更新后的第三屬性信息,第三屬性信息中至少包括目標(biāo)數(shù)據(jù)節(jié)點的節(jié)點標(biāo)識和存儲數(shù)據(jù)塊的磁盤的磁盤標(biāo)識;根據(jù)數(shù)據(jù)塊的塊標(biāo)識,將第三屬性信息更新至數(shù)據(jù)塊屬性列表中。在另一個實施例中,基于數(shù)據(jù)塊屬性列表確定工作異常的磁盤上存儲的至少一個數(shù)據(jù)塊,包括:獲取工作異常的磁盤中每一個磁盤的磁盤標(biāo)識;對于每一個工作異常的磁盤,根據(jù)磁盤標(biāo)識在數(shù)據(jù)塊屬性列表中進(jìn)行查找,得到與磁盤標(biāo)識匹配的至少一個塊標(biāo)識;將至少一個塊標(biāo)識指示的數(shù)據(jù)塊確定為工作異常的磁盤上存儲的至少一個數(shù)據(jù)塊;其中,數(shù)據(jù)塊屬性列表中包括每一個數(shù)據(jù)塊的塊標(biāo)識與存儲每一個數(shù)據(jù)塊的磁盤的磁盤標(biāo)識、以及磁盤所屬數(shù)據(jù)節(jié)點的節(jié)點標(biāo)識。上述所有可選技術(shù)方案,可以采用任意結(jié)合形成本公開的可選實施例,在此不再一一贅述。圖3是根據(jù)一示例性實施例示出的一種數(shù)據(jù)遷移方法的流程圖,如圖3所示,該方法用于源數(shù)據(jù)節(jié)點中,包括以下步驟。在步驟301中,接收分布式文件系統(tǒng)中遷移節(jié)點發(fā)送的數(shù)據(jù)塊復(fù)制請求,該數(shù)據(jù)塊復(fù)制請求中至少包括數(shù)據(jù)塊的第一屬性信息和待遷移的目標(biāo)數(shù)據(jù)節(jié)點的第二屬性信息,該數(shù)據(jù)塊復(fù)制請求由所述遷移節(jié)點在確定一個數(shù)據(jù)節(jié)點上存在工作異常的磁盤后發(fā)送。在步驟302中,根據(jù)第一屬性信息獲取本地存儲的該數(shù)據(jù)塊。在步驟303中,生成數(shù)據(jù)塊存儲請求,該數(shù)據(jù)塊存儲請求中攜帶該數(shù)據(jù)塊和第二屬性信息中包含的磁盤標(biāo)識。在步驟304中,基于第二屬性信息包含的節(jié)點標(biāo)識,將該數(shù)據(jù)存儲請求發(fā)送至該目標(biāo)數(shù)據(jù)節(jié)點,以使該目標(biāo)數(shù)據(jù)存儲該數(shù)據(jù)塊。本公開實施例提供的方法,源數(shù)據(jù)節(jié)點在接收到分布式文件系統(tǒng)中遷移節(jié)點發(fā)送的數(shù)據(jù)塊復(fù)制請求后,根據(jù)該數(shù)據(jù)塊獲取請求中包括的第一屬性信息獲取本地存儲的該數(shù)據(jù)塊,并生成攜帶該數(shù)據(jù)塊和第二屬性信息中包含的磁盤標(biāo)識的數(shù)據(jù)塊存儲請求,之后基于第二屬性信息包含的節(jié)點標(biāo)識,將該數(shù)據(jù)存儲請求發(fā)送至該目標(biāo)數(shù)據(jù)節(jié)點,以使該目標(biāo)數(shù)據(jù)存儲該數(shù)據(jù)塊,由于在數(shù)據(jù)節(jié)點宕機或者磁盤損壞等情況時,數(shù)據(jù)遷移過程由分布式文件系統(tǒng)自動完成,不需要工作人員人工操作,因此簡單方便,實現(xiàn)了數(shù)據(jù)的實時遷移。在另一個實施例中,根據(jù)第一屬性信息獲取本地存儲的數(shù)據(jù)塊,包括:根據(jù)第一屬性信息中包括的磁盤標(biāo)識,確定存儲數(shù)據(jù)塊的磁盤;根據(jù)第一屬性信息中包括的塊標(biāo)識,從磁盤中獲取數(shù)據(jù)塊。在另一個實施例中,該方法還包括:向目標(biāo)數(shù)據(jù)節(jié)點發(fā)送校驗信息,以使目標(biāo)數(shù)據(jù)節(jié)點根據(jù)校驗信息對臨時存儲文件進(jìn)行校驗,臨時存儲文件由目標(biāo)數(shù)據(jù)節(jié)點在接收到數(shù)據(jù)存儲請求后,將數(shù)據(jù)塊寫入臨時文件得到。上述所有可選技術(shù)方案,可以采用任意結(jié)合形成本公開的可選實施例,在此不再一一贅述。圖4是根據(jù)一示例性實施例示出的一種數(shù)據(jù)遷移方法的流程圖,如圖4所示,該方法用于目標(biāo)數(shù)據(jù)節(jié)點中,包括以下步驟。在步驟401中,接收分布式文件系統(tǒng)中源數(shù)據(jù)節(jié)點發(fā)送的數(shù)據(jù)塊存儲請求,該數(shù)據(jù)塊存儲請求由源數(shù)據(jù)節(jié)點在接收到遷移節(jié)點發(fā)送的數(shù)據(jù)塊復(fù)制請求后發(fā)送,該數(shù)據(jù)塊復(fù)制請求由遷移節(jié)點在確定一個數(shù)據(jù)節(jié)點上存在工作異常的磁盤后發(fā)送。在步驟402中,獲取該數(shù)據(jù)塊存儲請求中攜帶的數(shù)據(jù)塊,并將該數(shù)據(jù)塊寫入到臨時文件中,得到臨時存儲文件。在步驟403中,接收源數(shù)據(jù)節(jié)點發(fā)送的校驗信息,在根據(jù)該校驗信息對該臨時存儲文件校驗成功后,將該數(shù)據(jù)塊寫入到該數(shù)據(jù)塊存儲請求中攜帶的磁盤標(biāo)識指示的磁盤中。本公開實施例提供的方法,目標(biāo)數(shù)據(jù)節(jié)點在接收到分布式文件系統(tǒng)中源數(shù)據(jù)節(jié)點發(fā)送的數(shù)據(jù)塊存儲請求后,獲取該數(shù)據(jù)塊存儲請求中攜帶的數(shù)據(jù)塊,并將該數(shù)據(jù)塊寫入到臨時文件中,得到臨時存儲文件;之后,接收該源數(shù)據(jù)節(jié)點發(fā)送的校驗信息,在根據(jù)該校驗信息對該臨時存儲文件校驗成功后,將該數(shù)據(jù)塊寫入到該數(shù)據(jù)塊存儲請求中攜帶的磁盤標(biāo)識指示的磁盤中。由于在數(shù)據(jù)節(jié)點宕機或者磁盤損壞等情況時,數(shù)據(jù)遷移過程由分布式文件系統(tǒng)自動完成,不需要工作人員人工操作,因此簡單方便,實現(xiàn)了數(shù)據(jù)的實時遷移。圖5是根據(jù)一示例性實施例示出的一種數(shù)據(jù)遷移方法的流程圖。交互主體包括遷移節(jié)點、源數(shù)據(jù)節(jié)點及目標(biāo)數(shù)據(jù)節(jié)點,如圖5所示,包括如下步驟。在步驟501中,遷移節(jié)點周期性獲取分布式文件系統(tǒng)中每一個數(shù)據(jù)節(jié)點的工作狀態(tài)信息,對于每一個數(shù)據(jù)節(jié)點,遷移節(jié)點基于該數(shù)據(jù)節(jié)點的工作狀態(tài)信息,判斷該數(shù)據(jù)節(jié)點中是否存在工作異常的磁盤;若該數(shù)據(jù)節(jié)點中存在工作異常的磁盤,則執(zhí)行下述步驟502;若該數(shù)據(jù)節(jié)點中不存在工作異常的磁盤,則針對該數(shù)據(jù)節(jié)點的處理流程至此結(jié)束。在本公開實施例中,每一個數(shù)據(jù)節(jié)點的工作狀態(tài)信息由每一個數(shù)據(jù)節(jié)點定時上報到數(shù)據(jù)庫中。其中,數(shù)據(jù)庫存在于圖1所示的主節(jié)點上,數(shù)據(jù)節(jié)點每一次判斷出的磁盤工作狀態(tài)均會及時更新到數(shù)據(jù)庫中,同時數(shù)據(jù)庫刪除之前存儲的磁盤工作狀態(tài),保證數(shù)據(jù)庫中存儲的磁盤工作狀態(tài)為最新的。此外,為了對各個數(shù)據(jù)節(jié)點上的各個磁盤進(jìn)行區(qū)分,可使用不同的ID(IDentity,身份標(biāo)識)對各個磁盤進(jìn)行標(biāo)識。詳細(xì)來講,每一個數(shù)據(jù)節(jié)點均會定期掃描自身包含的所有磁盤,判斷所有磁盤的工作狀態(tài),并將得到的工作狀態(tài)信息存儲到數(shù)據(jù)庫中。其中,磁盤的工作狀態(tài)可分為正常狀態(tài)和異常狀態(tài)。其中,異常狀態(tài)表明該磁盤出現(xiàn)損壞情況。在另一個實施例中,數(shù)據(jù)庫可為每一個數(shù)據(jù)節(jié)點分別維護一個工作狀態(tài)信息表。該工作狀態(tài)信息表中包括了一個數(shù)據(jù)節(jié)點上每一個磁盤的磁盤標(biāo)識與該磁盤的工作狀態(tài)信息之間的對應(yīng)關(guān)系。也即,若一個數(shù)據(jù)節(jié)點上出現(xiàn)磁盤損壞的情況,則該磁盤對應(yīng)的信息條目中顯示異常狀態(tài)信息;其中,異常狀態(tài)信息具體可為一個取值為0或1的標(biāo)識信息,用于標(biāo)識當(dāng)前磁盤損壞,本公開實例對此不進(jìn)行具體限定。若一個數(shù)據(jù)節(jié)點上所有磁盤均損壞,則全部磁盤對應(yīng)的信息條目中均顯示磁盤損標(biāo)識,表明該數(shù)據(jù)節(jié)點當(dāng)前處于宕機狀態(tài),該數(shù)據(jù)節(jié)點不再向數(shù)據(jù)庫更新自身的工作狀態(tài)信息。其中,遷移節(jié)點在基于數(shù)據(jù)節(jié)點的工作狀態(tài)信息,判斷一個數(shù)據(jù)節(jié)點中是否存在工作異常的磁盤時,可通過下述兩種方式實現(xiàn):第一種方式、若該數(shù)據(jù)節(jié)點的工作狀態(tài)信息在預(yù)設(shè)時長內(nèi)未進(jìn)行更新,則確定數(shù)據(jù)節(jié)點發(fā)生宕機,將數(shù)據(jù)節(jié)點上每一個磁盤均確定為工作異常的磁盤。例如,以遷移節(jié)點每隔一個小時進(jìn)行一次數(shù)據(jù)節(jié)點的工作狀態(tài)信息獲取,數(shù)據(jù)節(jié)點每隔半個小時進(jìn)行一次工作狀態(tài)信息的更新,預(yù)設(shè)時長為30分鐘為例,若該數(shù)據(jù)節(jié)點上一次更新工作狀態(tài)信息的時間為10點,同時被遷移節(jié)點獲取;等到11點遷移節(jié)點再一次進(jìn)行數(shù)據(jù)節(jié)點的工作狀態(tài)信息獲取時,發(fā)現(xiàn)該數(shù)據(jù)節(jié)點更新工作狀態(tài)信息的時間仍為10點,也即未更新工作狀態(tài)信息的時長大于預(yù)設(shè)時長30分鐘,則認(rèn)為該數(shù)據(jù)節(jié)點發(fā)生宕機。其中,本公開實施例對遷移節(jié)點獲取數(shù)據(jù)節(jié)點工作狀態(tài)信息及數(shù)據(jù)節(jié)點更新工作狀態(tài)信息的時長不進(jìn)行具體限定。其中,當(dāng)一個數(shù)據(jù)節(jié)點發(fā)生宕機時,遷移節(jié)點會默認(rèn)該數(shù)據(jù)節(jié)點上所有磁盤均存在工作異常。第二種方式、若該工作節(jié)點的工作狀態(tài)信息中包括至少一個磁盤的異常狀態(tài)信息,則確定至少一個磁盤為工作異常的磁盤。針對第二中方式,遷移節(jié)點會獲取數(shù)據(jù)庫中為該數(shù)據(jù)節(jié)點維護的工作狀態(tài)信息表,通過對該工作狀態(tài)信息表的掃描,確定至少一個磁盤的異常狀態(tài)信息。例如,該工作狀態(tài)信息表中將磁盤的異常狀態(tài)信息記為0,則遷移節(jié)點通過獲取磁盤的工作狀態(tài)信息為0的磁盤標(biāo)識,確定至少一個處于異常狀態(tài)的磁盤。在步驟502中,若該數(shù)據(jù)節(jié)點中存在工作異常的磁盤,則遷移節(jié)點根據(jù)數(shù)據(jù)塊屬性列表確定工作異常的磁盤上存儲的至少一個數(shù)據(jù)塊。在本公開實施例中,數(shù)據(jù)塊屬性列表可如下表1所示,用于存儲數(shù)據(jù)塊標(biāo)識,與存儲每一個數(shù)據(jù)塊的磁盤的磁盤標(biāo)識、以及該磁盤所屬數(shù)據(jù)節(jié)點的節(jié)點標(biāo)識。其中,遷移節(jié)點在根據(jù)數(shù)據(jù)塊屬性列表確定工作異常的磁盤上存儲的至少一個數(shù)據(jù)塊時,包括:獲取工作異常的磁盤中每一個磁盤的磁盤標(biāo)識;對于每一個工作異常的磁盤,根據(jù)該磁盤標(biāo)識在下述表1所示的數(shù)據(jù)塊屬性列表中進(jìn)行查找,得到與磁盤標(biāo)識匹配的至少一個塊標(biāo)識;將至少一個塊標(biāo)識指示的數(shù)據(jù)塊確定為該工作異常的磁盤上存儲的至少一個數(shù)據(jù)塊;其中,如果一個數(shù)據(jù)節(jié)點出現(xiàn)宕機情況,則根據(jù)該數(shù)據(jù)節(jié)點的節(jié)點標(biāo)識在下述表1中可直接獲取該數(shù)據(jù)節(jié)點上分布的所有磁盤。數(shù)據(jù)塊標(biāo)識數(shù)據(jù)塊屬性Block1Storage1,DataNode1Block2Storage1,DataNode1Block3Storage2,DataNode1Block4Storage3,DataNode2……BlockNStorageM,DataNodeL例如,若Storage1損壞,通過數(shù)據(jù)塊屬性列表獲得磁盤上當(dāng)前的數(shù)據(jù)塊為Block1和Block2;例如,若Storage2損壞,通過數(shù)據(jù)塊屬性列表獲得磁盤上當(dāng)前的數(shù)據(jù)塊為Block3;例如,若Storage3損壞,通過數(shù)據(jù)塊屬性列表獲得磁盤上當(dāng)前的數(shù)據(jù)塊為Block4。本公開實施例對數(shù)據(jù)塊屬性列表的形式、數(shù)據(jù)塊標(biāo)識的表示方法、磁盤標(biāo)的的表示方法及數(shù)據(jù)節(jié)點的表示方法不進(jìn)行具體限定。在步驟503中,遷移節(jié)點在存儲該數(shù)據(jù)塊的其他副本的第一數(shù)據(jù)節(jié)點中確定源數(shù)據(jù)節(jié)點,在第二數(shù)據(jù)節(jié)點中選取一個有空閑存儲位置的數(shù)據(jù)節(jié)點作為目標(biāo)數(shù)據(jù)節(jié)點,第二數(shù)據(jù)節(jié)點為其他數(shù)據(jù)節(jié)點中除第一數(shù)據(jù)節(jié)點之外的數(shù)據(jù)節(jié)點。如上述表1所示,例如,若所在數(shù)據(jù)節(jié)點為DataNode1,則遷移Block1和Block2上的數(shù)據(jù)到除了DataNode1的其他數(shù)據(jù)節(jié)點的磁盤上;例如,若所在的數(shù)據(jù)節(jié)點為DataNode1,則遷移Block3上的數(shù)據(jù)到除了DataNode1的其他數(shù)據(jù)節(jié)點的磁盤上;例如,若所在的數(shù)據(jù)節(jié)點為DataNode2,則遷移Block4到除了DataNode2的其他數(shù)據(jù)節(jié)點的磁盤上。在步驟504中,遷移節(jié)點向源數(shù)據(jù)節(jié)點發(fā)送數(shù)據(jù)塊復(fù)制請求。其中,該數(shù)據(jù)塊復(fù)制請求(CopyBlockRequest)中至少包括該數(shù)據(jù)塊的第一屬性信息和所述目標(biāo)數(shù)據(jù)節(jié)點的第二屬性信息。其中,該第一屬性信息中至少包括數(shù)據(jù)塊的塊標(biāo)識及存儲該數(shù)據(jù)塊的磁盤的磁盤標(biāo)識;該第二屬性信息中至少包括目標(biāo)數(shù)據(jù)節(jié)點的節(jié)點標(biāo)識及存儲該數(shù)據(jù)塊的磁盤的磁盤標(biāo)識。在步驟505中,源數(shù)據(jù)節(jié)點在接收到數(shù)據(jù)塊復(fù)制請求后,根據(jù)該數(shù)據(jù)塊復(fù)制請求中的第一屬性信息讀取本地存儲的需要復(fù)制的數(shù)據(jù)塊,生成數(shù)據(jù)塊存儲請求,并基于該數(shù)據(jù)塊復(fù)制請求中的第二屬性信息包含的節(jié)點標(biāo)識,將該數(shù)據(jù)塊存儲請求發(fā)送給目標(biāo)數(shù)據(jù)節(jié)點。其中,源數(shù)據(jù)節(jié)點生成數(shù)據(jù)塊存儲請求的方式如下:根據(jù)該第一屬性信息中包括的存儲該數(shù)據(jù)塊磁盤的磁盤標(biāo)識,確定存儲該數(shù)據(jù)塊的磁盤;之后,根據(jù)該第一屬性信息中包括的數(shù)據(jù)塊的塊標(biāo)識,從該磁盤中獲取該塊標(biāo)識對應(yīng)的數(shù)據(jù)塊。其中,該數(shù)據(jù)塊存儲請求中攜帶該數(shù)據(jù)塊和第二屬性信息中用于存儲該數(shù)據(jù)塊的磁盤的磁盤標(biāo)識。在步驟506中,目標(biāo)數(shù)據(jù)節(jié)點在接收到該數(shù)據(jù)存儲請求后,獲取該數(shù)據(jù)塊存儲請求中攜帶的數(shù)據(jù)塊,并將該數(shù)據(jù)塊寫入到臨時文件中,得到臨時存儲文件。在本公開實施例中,目標(biāo)數(shù)據(jù)節(jié)點在接收到該數(shù)據(jù)塊后,建立臨時文件,例如建立臨時文件tmp,將獲取到的所有數(shù)據(jù)塊放入到tmp中,等待接收源數(shù)據(jù)節(jié)點發(fā)送的校驗信息對數(shù)據(jù)塊進(jìn)行校驗。在步驟507中,源數(shù)據(jù)節(jié)點向目標(biāo)數(shù)據(jù)節(jié)點發(fā)送校驗信息。源數(shù)據(jù)節(jié)點在發(fā)送數(shù)據(jù)塊復(fù)制請求后,還會生成校驗信息,例如校驗信息可為CRC(CyclicRedundancyCheck,循環(huán)冗余校驗)32,本公開實施例對校驗信息的類型不進(jìn)行具體限定。之后源數(shù)據(jù)節(jié)點將該校驗信息發(fā)送給目標(biāo)數(shù)據(jù)節(jié)點,目標(biāo)數(shù)據(jù)節(jié)點利用校驗信息對包含該數(shù)據(jù)塊的臨時存儲文件進(jìn)行校驗。在步驟508中,目標(biāo)數(shù)據(jù)節(jié)點在接收到源數(shù)據(jù)節(jié)點發(fā)送的校驗信息后,對該臨時存儲文件進(jìn)行校驗,在校驗成功后將該數(shù)據(jù)塊寫入到該數(shù)據(jù)塊存儲請求中攜帶的磁盤標(biāo)識指示的磁盤中。目標(biāo)數(shù)據(jù)節(jié)點根據(jù)校驗信息,對臨時文件中的數(shù)據(jù)塊進(jìn)行校驗,例如校驗信息為CRC32,則根據(jù)CRC32檢驗接收到的數(shù)據(jù)塊是否完整。如果校驗得出接收的數(shù)據(jù)塊完整,則將該數(shù)據(jù)塊寫入數(shù)據(jù)塊存儲請求中的磁盤標(biāo)識指示的磁盤中,這樣便完成了數(shù)據(jù)塊的遷移。如果校驗得出接收的數(shù)據(jù)塊不完整,則發(fā)送數(shù)據(jù)塊錯誤的響應(yīng)給源數(shù)據(jù)節(jié)點,源數(shù)據(jù)節(jié)點重新生成數(shù)據(jù)塊存儲請求及校驗信息,再次向目標(biāo)數(shù)據(jù)節(jié)點發(fā)送并校驗,直到目標(biāo)數(shù)據(jù)節(jié)點接收到的數(shù)據(jù)塊正確為止。其中,本公開實施例對目標(biāo)數(shù)據(jù)節(jié)點接收的數(shù)據(jù)塊可能發(fā)生的錯誤不進(jìn)行具體限定。在步驟509中,在完成對該數(shù)據(jù)塊的遷移操作后,源數(shù)據(jù)節(jié)點向遷移節(jié)點發(fā)送數(shù)據(jù)寫入響應(yīng)。在本公開實施例中,源數(shù)據(jù)節(jié)點接收到目標(biāo)數(shù)據(jù)節(jié)點校驗數(shù)據(jù)塊正確的響應(yīng)后,會向遷移節(jié)點發(fā)送數(shù)據(jù)寫入響應(yīng),用于提示遷移節(jié)點該數(shù)據(jù)塊的遷移操作成功。在步驟510中,遷移節(jié)點在接收源數(shù)據(jù)節(jié)點返回的數(shù)據(jù)寫入響應(yīng)后,獲取該數(shù)據(jù)塊更新后的第三屬性信息,該第三屬性信息中至少包括目標(biāo)數(shù)據(jù)節(jié)點的節(jié)點標(biāo)識和存儲該數(shù)據(jù)塊的磁盤的磁盤標(biāo)識;根據(jù)該數(shù)據(jù)塊的塊標(biāo)識,將第三屬性信息更新至數(shù)據(jù)塊屬性列表中。由于已經(jīng)將數(shù)據(jù)塊遷移至目標(biāo)數(shù)據(jù)節(jié)點,所以為了后續(xù)讀取該數(shù)據(jù)塊,本公開實施例支持遷移節(jié)點在數(shù)據(jù)塊屬性列表中修改該數(shù)據(jù)塊的存儲位置,也即根據(jù)該數(shù)據(jù)塊的塊標(biāo)識,將目標(biāo)數(shù)據(jù)節(jié)點的節(jié)點標(biāo)識和存儲該數(shù)據(jù)塊的磁盤的磁盤標(biāo)識更新至數(shù)據(jù)塊屬性列表中。需要說明的是,上述步驟503至步驟509描述的是一個數(shù)據(jù)塊的遷移過程,對于工作異常的磁盤上分布的每一個數(shù)據(jù)塊,均可以采取類似上述步驟503至步驟509所示的過程完成數(shù)據(jù)遷移,本公開實施例對此不進(jìn)行具體限定。本公開實施例提供的方法,在遷移節(jié)點周期性獲取到分布式文件系統(tǒng)中每一個數(shù)據(jù)節(jié)點的工作狀態(tài)信息后,對于每一個數(shù)據(jù)節(jié)點,若遷移節(jié)點基于該數(shù)據(jù)節(jié)點的工作狀態(tài)信息判斷出該數(shù)據(jù)節(jié)點中存在工作異常的磁盤,則基于數(shù)據(jù)塊屬性列表確定該工作異常的磁盤上存儲的至少一個數(shù)據(jù)塊;對于至少一個數(shù)據(jù)塊中的每一個數(shù)據(jù)塊,遷移節(jié)點在除該數(shù)據(jù)節(jié)點之外的其他數(shù)據(jù)節(jié)點中選取待遷移的目標(biāo)數(shù)據(jù)節(jié)點和存儲該數(shù)據(jù)塊的其他副本的源數(shù)據(jù)節(jié)點,并通過源數(shù)據(jù)節(jié)點將該數(shù)據(jù)塊遷移到目標(biāo)數(shù)據(jù)節(jié)點上。由于在數(shù)據(jù)節(jié)點宕機或者磁盤損壞等情況時,數(shù)據(jù)遷移過程由分布式文件系統(tǒng)自動完成,不需要工作人員人工操作,因此簡單方便,實現(xiàn)了數(shù)據(jù)的實時遷移。圖6是根據(jù)一示例性實施例示出的一種數(shù)據(jù)遷移裝置的框圖。參照圖6,該裝置包括第一獲取模塊601,判斷模塊602,確定模塊603,選取模塊604,遷移模塊605。該第一獲取模塊601,被配置為周期性獲取分布式文件系統(tǒng)中每一個數(shù)據(jù)節(jié)點的工作狀態(tài)信息;該判斷模塊602,被配置為對于每一個數(shù)據(jù)節(jié)點,基于數(shù)據(jù)節(jié)點的工作狀態(tài)信息,判斷數(shù)據(jù)節(jié)點中是否存在工作異常的磁盤;該確定模塊603,被配置為若數(shù)據(jù)節(jié)點中存在工作異常的磁盤,則基于數(shù)據(jù)塊屬性列表確定工作異常的磁盤上存儲的至少一個數(shù)據(jù)塊;該選取模塊604,被配置為對于至少一個數(shù)據(jù)塊中的每一個數(shù)據(jù)塊,在除數(shù)據(jù)節(jié)點之外的其他數(shù)據(jù)節(jié)點中選取待遷移的目標(biāo)數(shù)據(jù)節(jié)點;該遷移模塊605,被配置為將數(shù)據(jù)塊遷移到目標(biāo)數(shù)據(jù)節(jié)點上。在另一個實施例中,判斷模塊602,被配置為若數(shù)據(jù)節(jié)點的工作狀態(tài)信息在預(yù)設(shè)時長內(nèi)未進(jìn)行更新,則確定數(shù)據(jù)節(jié)點發(fā)生宕機,將數(shù)據(jù)節(jié)點上每一個磁盤均確定為工作異常的磁盤;或,若工作狀態(tài)信息中包括至少一個磁盤的異常狀態(tài)信息,則確定至少一個磁盤為工作異常的磁盤。在另一個實施例中,選取模塊604,被配置為在其他數(shù)據(jù)節(jié)點中確定存儲數(shù)據(jù)塊的其他副本的第一數(shù)據(jù)節(jié)點;在第二數(shù)據(jù)節(jié)點中選取一個有空閑存儲位置的數(shù)據(jù)節(jié)點作為目標(biāo)數(shù)據(jù)節(jié)點,第二數(shù)據(jù)節(jié)點為其他數(shù)據(jù)節(jié)點中除第一數(shù)據(jù)節(jié)點之外的數(shù)據(jù)節(jié)點。在另一個實施例中,遷移模塊605,被配置為在存儲數(shù)據(jù)塊的其他副本的第一數(shù)據(jù)節(jié)點中確定源數(shù)據(jù)節(jié)點;向源數(shù)據(jù)節(jié)點發(fā)送數(shù)據(jù)塊復(fù)制請求,數(shù)據(jù)塊復(fù)制請求中至少包括數(shù)據(jù)塊的第一屬性信息和目標(biāo)數(shù)據(jù)節(jié)點的第二屬性信息,以使源數(shù)據(jù)節(jié)點在根據(jù)第一屬性信息獲取到本地存儲的數(shù)據(jù)塊后,基于第二屬性信息將數(shù)據(jù)塊發(fā)送至目標(biāo)數(shù)據(jù)節(jié)點。在另一個實施例中,參見圖7,該裝置還包括:接收模塊606,被配置為接收源數(shù)據(jù)節(jié)點返回的數(shù)據(jù)寫入響應(yīng);第二獲取模塊607,被配置為獲取數(shù)據(jù)塊更新后的第三屬性信息,第三屬性信息中至少包括目標(biāo)數(shù)據(jù)節(jié)點的節(jié)點標(biāo)識和存儲數(shù)據(jù)塊的磁盤的磁盤標(biāo)識;更新模塊608,被配置為根據(jù)數(shù)據(jù)塊的塊標(biāo)識,將第三屬性信息更新至數(shù)據(jù)塊屬性列表中。在另一個實施例中,確定模塊603,被配置為獲取工作異常的磁盤中每一個磁盤的磁盤標(biāo)識;對于每一個工作異常的磁盤,根據(jù)磁盤標(biāo)識在數(shù)據(jù)塊屬性列表中進(jìn)行查找,得到與磁盤標(biāo)識匹配的至少一個塊標(biāo)識;將至少一個塊標(biāo)識指示的數(shù)據(jù)塊確定為工作異常的磁盤上存儲的至少一個數(shù)據(jù)塊;其中,數(shù)據(jù)塊屬性列表中包括每一個數(shù)據(jù)塊的塊標(biāo)識與存儲每一個數(shù)據(jù)塊的磁盤的磁盤標(biāo)識、以及磁盤所屬數(shù)據(jù)節(jié)點的節(jié)點標(biāo)識。本公開實施例提供的裝置,遷移節(jié)點在周期性獲取到分布式文件系統(tǒng)中每一個數(shù)據(jù)節(jié)點的工作狀態(tài)信息后,對于每一個數(shù)據(jù)節(jié)點,若基于該數(shù)據(jù)節(jié)點的工作狀態(tài)信息判斷出該數(shù)據(jù)節(jié)點中存在工作異常的磁盤,則基于數(shù)據(jù)塊屬性列表確定該工作異常的磁盤上存儲的至少一個數(shù)據(jù)塊;對于至少一個數(shù)據(jù)塊中的每一個數(shù)據(jù)塊,遷移節(jié)點在除該數(shù)據(jù)節(jié)點之外的其他數(shù)據(jù)節(jié)點中選取待遷移的目標(biāo)數(shù)據(jù)節(jié)點,并將該數(shù)據(jù)塊遷移到目標(biāo)數(shù)據(jù)節(jié)點上。由于在數(shù)據(jù)節(jié)點宕機或者磁盤損壞等情況時,數(shù)據(jù)遷移過程由分布式文件系統(tǒng)自動完成,不需要工作人員人工操作,因此簡單方便,實現(xiàn)了數(shù)據(jù)的實時遷移。圖8是根據(jù)一示例性實施例示出的一種數(shù)據(jù)遷移裝置的框圖。參照圖8,該裝置包括接收模塊801,獲取模塊802,生成模塊803,發(fā)送模塊804。該接收模塊801,被配置為接收分布式文件系統(tǒng)中遷移節(jié)點發(fā)送的數(shù)據(jù)塊復(fù)制請求,所述數(shù)據(jù)塊復(fù)制請求中至少包括數(shù)據(jù)塊的第一屬性信息和待遷移的目標(biāo)數(shù)據(jù)節(jié)點的第二屬性信息,所述數(shù)據(jù)塊復(fù)制請求由所述遷移節(jié)點在確定一個數(shù)據(jù)節(jié)點上存在工作異常的磁盤后發(fā)送;該獲取模塊802,被配置為根據(jù)所述第一屬性信息獲取本地存儲的所述數(shù)據(jù)塊;該生成模塊803,被配置為生成數(shù)據(jù)塊存儲請求,所述數(shù)據(jù)塊存儲請求中攜帶所述數(shù)據(jù)塊和所述第二屬性信息中包含的磁盤標(biāo)識;該發(fā)送模塊804,被配置為基于所述第二屬性信息包含的節(jié)點標(biāo)識,將所述數(shù)據(jù)存儲請求發(fā)送至所述目標(biāo)數(shù)據(jù)節(jié)點,以使所述目標(biāo)數(shù)據(jù)存儲所述數(shù)據(jù)塊。在另一個實施例中,所述獲取模塊802,被配置為根據(jù)所述第一屬性信息中包括的磁盤標(biāo)識,確定存儲所述數(shù)據(jù)塊的磁盤;根據(jù)所述第一屬性信息中包括的塊標(biāo)識,從所述磁盤中獲取所述數(shù)據(jù)塊。在另一個實施例中,參見圖9,該裝置還包括:校驗?zāi)K805,被配置為向所述目標(biāo)數(shù)據(jù)節(jié)點發(fā)送校驗信息,以使所述目標(biāo)數(shù)據(jù)節(jié)點根據(jù)所述校驗信息對臨時存儲文件進(jìn)行校驗,所述臨時存儲文件由所述目標(biāo)數(shù)據(jù)節(jié)點在接收到所述數(shù)據(jù)存儲請求后,將所述數(shù)據(jù)塊寫入臨時文件得到。本公開實施例提供的裝置,源數(shù)據(jù)節(jié)點在接收到分布式文件系統(tǒng)中遷移節(jié)點發(fā)送的數(shù)據(jù)塊復(fù)制請求后,根據(jù)該數(shù)據(jù)塊獲取請求中包括的第一屬性信息獲取本地存儲的該數(shù)據(jù)塊,并生成攜帶該數(shù)據(jù)塊和第二屬性信息中包含的磁盤標(biāo)識的數(shù)據(jù)塊存儲請求,之后基于第二屬性信息包含的節(jié)點標(biāo)識,將該數(shù)據(jù)存儲請求發(fā)送至該目標(biāo)數(shù)據(jù)節(jié)點,以使該目標(biāo)數(shù)據(jù)存儲該數(shù)據(jù)塊,由于在數(shù)據(jù)節(jié)點宕機或者磁盤損壞等情況時,數(shù)據(jù)遷移過程由分布式文件系統(tǒng)自動完成,不需要工作人員人工操作,因此簡單方便,實現(xiàn)了數(shù)據(jù)的實時遷移。圖10是根據(jù)一示例性實施例示出的一種數(shù)據(jù)遷移裝置的框圖。參照圖10,該裝置包括接收模塊1001,獲取模塊1002,寫入模塊1003。該接收模塊1001,被配置為接收分布式文件系統(tǒng)中源數(shù)據(jù)節(jié)點發(fā)送的數(shù)據(jù)塊存儲請求,所述數(shù)據(jù)塊存儲請求由所述源數(shù)據(jù)節(jié)點在接收到遷移節(jié)點發(fā)送的數(shù)據(jù)塊復(fù)制請求后發(fā)送,所述數(shù)據(jù)塊復(fù)制請求由所述遷移節(jié)點在確定一個數(shù)據(jù)節(jié)點上存在工作異常的磁盤后發(fā)送;該獲取模塊1002,被配置為獲取所述數(shù)據(jù)塊存儲請求中攜帶的數(shù)據(jù)塊,并將所述數(shù)據(jù)塊寫入到臨時文件中,得到臨時存儲文件;該寫入模塊1003,被配置為接收所述源數(shù)據(jù)節(jié)點發(fā)送的校驗信息,在根據(jù)所述校驗信息對所述臨時存儲文件校驗成功后,將所述數(shù)據(jù)塊寫入到所述數(shù)據(jù)塊存儲請求中攜帶的磁盤標(biāo)識指示的磁盤中。本公開實施例提供的裝置,在接收到分布式文件系統(tǒng)中源數(shù)據(jù)節(jié)點發(fā)送的數(shù)據(jù)塊存儲請求后,獲取該數(shù)據(jù)塊存儲請求中攜帶的數(shù)據(jù)塊,并將該數(shù)據(jù)塊寫入到臨時文件中,得到臨時存儲文件;之后,接收該源數(shù)據(jù)節(jié)點發(fā)送的校驗信息,在根據(jù)該校驗信息對該臨時存儲文件校驗成功后,將該數(shù)據(jù)塊寫入到該數(shù)據(jù)塊存儲請求中攜帶的磁盤標(biāo)識指示的磁盤中。由于在數(shù)據(jù)節(jié)點宕機或者磁盤損壞等情況時,數(shù)據(jù)遷移過程由分布式文件系統(tǒng)自動完成,不需要工作人員人工操作,因此簡單方便,實現(xiàn)了數(shù)據(jù)的實時遷移。關(guān)于上述實施例中的裝置,其中各個模塊執(zhí)行操作的具體方式已經(jīng)在有關(guān)該方法的實施例中進(jìn)行了詳細(xì)描述,此處將不做詳細(xì)闡述說明。圖11是根據(jù)一示例性實施例示出的一種數(shù)據(jù)遷移裝置1100的框圖。例如,裝置1100可以被提供為一服務(wù)器。參照圖11,裝置1100包括處理組件1122,其進(jìn)一步包括一個或多個處理器,以及由存儲器1132所代表的存儲器資源,用于存儲可由處理組件1122的執(zhí)行的指令,例如應(yīng)用程序。存儲器1132中存儲的應(yīng)用程序可以包括一個或一個以上的每一個對應(yīng)于一組指令的模塊。此外,處理組件1122被配置為執(zhí)行指令,以執(zhí)行上述數(shù)據(jù)遷移方法。裝置1100還可以包括一個電源組件1126被配置為執(zhí)行裝置1100的電源管理,一個有線或無線網(wǎng)絡(luò)接口1150被配置為將裝置1100連接到網(wǎng)絡(luò),和一個輸入輸出(I/O)接口1158。裝置1100可以操作基于存儲在存儲器1132的操作系統(tǒng),例如WindowsServerTM,MacOSXTM,UnixTM,LinuxTM,F(xiàn)reeBSDTM或類似。本領(lǐng)域技術(shù)人員在考慮說明書及實踐這里公開的發(fā)明后,將容易想到本發(fā)明的其它實施方案。本申請旨在涵蓋本發(fā)明的任何變型、用途或者適應(yīng)性變化,這些變型、用途或者適應(yīng)性變化遵循本發(fā)明的一般性原理并包括本公開未公開的本
技術(shù)領(lǐng)域:
中的公知常識或慣用技術(shù)手段。說明書和實施例僅被視為示例性的,本發(fā)明的真正范圍和精神由下面的權(quán)利要求指出。應(yīng)當(dāng)理解的是,本發(fā)明并不局限于上面已經(jīng)描述并在附圖中示出的精確結(jié)構(gòu),并且可以在不脫離其范圍進(jìn)行各種修改和改變。本發(fā)明的范圍僅由所附的權(quán)利要求來限制。當(dāng)前第1頁1 2 3