一種數(shù)據(jù)寫入方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,尤其涉及一種數(shù)據(jù)寫入方法及裝置。
【背景技術(shù)】
[0002]HDFS(Hadoop Distributed File System,Hadoop 分布式文件系統(tǒng))是一個主/從(Master/Slave)體系結(jié)構(gòu),一個HDFS集群由一個NameNode和多個DataNode組成。NameNode為元數(shù)據(jù)節(jié)點,管理文件系統(tǒng)的元數(shù)據(jù),DataNode為數(shù)據(jù)節(jié)點,存儲實際的文件數(shù)據(jù)。
[0003]HDFS集群的DataNode需配置多個存儲資源,在DataNode初始化時加載全部資源列表到內(nèi)存中,DataNode在寫入數(shù)據(jù)時按如下規(guī)則選擇存儲資源:
[0004]I)、輪詢配置文件中的全部存儲資源;
[0005]2)、將配置文件中的全部存儲資源按剩余容量排序,選擇剩余容量最大的存儲資源。
[0006]選中存儲資源后,DataNode調(diào)用標準的文件讀寫接口將對應(yīng)的數(shù)據(jù)塊寫到該存儲資源上。
[0007]然而實踐發(fā)現(xiàn),在上述數(shù)據(jù)寫入方案中,若被選中的存儲資源在數(shù)據(jù)寫入前已故障,DataNode仍然會向其下發(fā)一次寫業(yè)務(wù)觸發(fā)容錯處理過程,影響寫性能,導(dǎo)致數(shù)據(jù)寫入成功率和效率較低;此外,當(dāng)DataNode確定存儲資源故障后,即使后續(xù)該存儲資源恢復(fù)正常,DataNode仍不會使用該存儲資源,造成存儲資源浪費,存儲資源利用率低。
【發(fā)明內(nèi)容】
[0008]本發(fā)明提供一種數(shù)據(jù)寫入方法及裝置,以解決現(xiàn)有技術(shù)中數(shù)據(jù)寫入成功率和效率較低、存儲資源利用率低的問題。
[0009]根據(jù)本發(fā)明實施例的第一方面,提供一種數(shù)據(jù)寫入方法,包括:
[0010]DataNode獲取本地存儲資源的可用狀態(tài),并根據(jù)本地存儲資源的可用狀態(tài)維護可用資源列表和不可用資源列表;其中,當(dāng)本地存儲資源的可用狀態(tài)由不可用變?yōu)榭捎脮r,將其加入到所述可用資源列表中;
[0011]當(dāng)所述DataNode接收到客戶端發(fā)送的數(shù)據(jù)寫入請求時,從所述可用存儲資源列表中選擇用于數(shù)據(jù)寫入的目標存儲資源,并對所述目標存儲資源進行數(shù)據(jù)寫入。
[0012]根據(jù)本發(fā)明實施例的第二方面,提供一種數(shù)據(jù)寫入裝置,應(yīng)用于數(shù)據(jù)節(jié)點DataNode,包括:
[0013]狀態(tài)管理單元,用于獲取本地存儲資源的可用狀態(tài),并根據(jù)本地存儲資源的可用狀態(tài)維護可用資源列表和不可用資源列表;其中,當(dāng)本地存儲資源的可用狀態(tài)由不可用變?yōu)榭捎脮r,將其加入到所述可用資源列表中;
[0014]數(shù)據(jù)寫入單元,用于當(dāng)接收到客戶端發(fā)送的數(shù)據(jù)寫入請求時,從所述可用存儲資源列表中選擇用于數(shù)據(jù)寫入的目標存儲資源,并對所述目標存儲資源進行數(shù)據(jù)寫入。
[0015]應(yīng)用本發(fā)明實施例,DataNode節(jié)點通過獲取本地存儲資源的可用狀態(tài),并根據(jù)本地存儲資源的可用狀態(tài)維護可用資源列表和不可用資源列表,當(dāng)DataNode接收到客戶端發(fā)送的數(shù)據(jù)寫入請求時,從可用存儲資源列表中選擇用于數(shù)據(jù)寫入的目標存儲資源,并對目標存儲資源進行數(shù)據(jù)寫入,一方面,避免了 DataNode選中不可用的存儲資源進行數(shù)據(jù)寫入,提高了數(shù)據(jù)寫入的成功率和效率;另一方面,通過將可用狀態(tài)從不可用變?yōu)榭捎玫谋镜卮鎯Y源加入到可用資源列表中,與現(xiàn)有技術(shù)中存儲資源故障后不再使用的實現(xiàn)方式相比,減少了存儲資源的浪費,提高了存儲資源的利用率。
【附圖說明】
[0016]圖1是本發(fā)明實施例提供的一種數(shù)據(jù)寫入的網(wǎng)絡(luò)架構(gòu)示意圖;
[0017]圖2是本發(fā)明實施例提供的一種數(shù)據(jù)寫入方法的流程示意圖;
[0018]圖3是本發(fā)明實施例提供的另一種數(shù)據(jù)寫入方法的流程示意圖;
[0019]圖4是本發(fā)明實施例提供的一種數(shù)據(jù)寫入裝置的結(jié)構(gòu)示意圖;
[0020]圖5是本發(fā)明實施例提供的另一種數(shù)據(jù)寫入裝置的結(jié)構(gòu)示意圖;
[0021]圖6是本發(fā)明實施例提供的另一種數(shù)據(jù)寫入裝置的結(jié)構(gòu)示意圖。
【具體實施方式】
[0022]為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明實施例中的技術(shù)方案,并使本發(fā)明實施例的上述目的、特征和優(yōu)點能夠更加明顯易懂,下面結(jié)合附圖對本發(fā)明實施例中技術(shù)方案作進一步詳細的說明。
[0023]為了使本領(lǐng)域技術(shù)人員更好地理解本發(fā)明實施例提供的技術(shù)方案,下面先對本發(fā)明實施例適用的網(wǎng)絡(luò)架構(gòu)進行描述。
[0024]請參見圖1,圖1為本發(fā)明實施例提供的一種數(shù)據(jù)寫入的網(wǎng)絡(luò)架構(gòu)示意圖。如圖1所示,該網(wǎng)絡(luò)架構(gòu)示意圖可以包括NameNode、DataNode以及客戶端(Client),其中,當(dāng)客戶端需要進行數(shù)據(jù)寫入時,可以向NameNode發(fā)起數(shù)據(jù)寫入請求,由NameNode確定數(shù)據(jù)寫入的DataNode,進而,客戶端可以向該DataNode發(fā)送數(shù)據(jù)寫入請求,由DataNode從可用資源列表中選擇用于數(shù)據(jù)寫入的目標存儲資源,并對該目標存儲資源進行數(shù)據(jù)寫入。當(dāng)數(shù)據(jù)寫入成功之后,客戶端可以向NameNode返回寫入成功響應(yīng),由NameNode保存數(shù)據(jù)寫入相關(guān)的元數(shù)據(jù)信息。
[0025]基于圖1所示的網(wǎng)絡(luò)架構(gòu),本發(fā)明實施例提供了一種數(shù)據(jù)寫入方法。請參見圖2,圖2為本發(fā)明實施例提供的一種數(shù)據(jù)寫入方法的流程示意圖,如圖2所示,該數(shù)據(jù)寫入方法可以包括以下步驟:
[0026]步驟201、DataNode獲取本地存儲資源的可用狀態(tài),并根據(jù)本地存儲資源的可用狀態(tài)維護可用資源列表和不可用資源列表當(dāng)本地存儲資源的可用狀態(tài)由不可用變?yōu)榭捎脮r,將其加入到所述可用資源列表中。
[0027]本發(fā)明實施例中,為了避免DataNode在選擇進行數(shù)據(jù)寫入的存儲資源時,所選擇的存儲資源為不可用(如故障或離線等)的存儲資源,DataNode可以根據(jù)本地存儲資源的可用狀態(tài)維護可用資源列表和不可用資源列表,從而,當(dāng)DataNode需要進行數(shù)據(jù)寫入時,可以從可用資源列表中選擇存儲資源進行數(shù)據(jù)寫入,提高了數(shù)據(jù)寫入成功率和效率。
[0028]本發(fā)明實施例中,存儲資源的可用狀態(tài)可以包括可用或可不用,其中,當(dāng)存儲資源故障或離線或資源掛載目錄不可訪問時,則認為該存儲資源不可用;當(dāng)存儲資源未發(fā)生故障、未離線以及資源掛載目錄可訪問時,則認為該存儲資源可用;當(dāng)本地存儲資源的可用狀態(tài)由不可用變?yōu)榭捎脮r,將其加入到可用資源列表中,從而,可以減少存儲資源浪費,提高存儲資源利用率。
[0029]作為一種可選的實施方式,上述步驟201中,DataNode獲取本地存儲資源的可用狀態(tài),并根據(jù)本地存儲資源的可用狀態(tài)維護可用資源列表和不可用資源列表,可以包括以下步驟:
[0030]11)、DataNode定時檢測可用資源列表和可不用資源列表中各存儲資源的可用狀態(tài);
[0031]12)、當(dāng)可用資源列表中存在可用狀態(tài)為不可用的存儲資源時,DataNode將該存儲資源從可用資源列表中刪除,并加入到不可用資源列表中;
[0032]13)、當(dāng)可不用資源列表中存在可用狀態(tài)為可用的存儲資源時,DataNode將該存儲資源從不可用資源列表中刪除,并加入到可用資源列表中。
[0033]值得說明的是,上述步驟12)和步驟13)之間并不存在時序關(guān)系,即可以先執(zhí)行步驟12),后執(zhí)行步驟13);也可以先執(zhí)行步驟13),后執(zhí)行步驟12),本發(fā)明實施例不再贅述。
[0034]在該實施方式中,DataNode —方面可以在本地創(chuàng)建可用資源列表和不可用資源列表,其中,當(dāng)可用資源列表和不可用資源列表初始化創(chuàng)建時,DataNode所有本地存儲資源均包括在可用資源列表中,不可用資源列表為空。另一方面,DataNode可以專門啟動一個線程,用于定時檢測本地存儲資源的可用狀態(tài),即定時檢測(例如每隔預(yù)設(shè)時間檢測一次,或在固定的預(yù)設(shè)時間檢測,可以根據(jù)具體場景確定)可用資源列表和不可用資源列表中各存儲資源的可用狀態(tài),并根據(jù)各存儲資源的可用狀態(tài)對可用資源列表和不可用資源列表進行維護。
[0035]其中,當(dāng)可用資源列表中存在可用狀態(tài)為不可用的存儲資源時,即存儲資源由于故障或離線等原因不可用時,DataNode可以將該存儲資源從可用資源列表中刪除,并加入到不可用資源列表中;相對應(yīng)地,當(dāng)不可用資源列表中存在可用狀態(tài)為可用的存儲資源時,即之前可用狀態(tài)為不可用的存儲資源恢