施例中,通過在數(shù)據(jù)塊標(biāo)識信息中添加校驗(yàn)和版本號、校驗(yàn)和類型、每 個校驗(yàn)和字節(jié)數(shù)等校驗(yàn)屬性信息,W及,通過將分片數(shù)據(jù)chunk W及校驗(yàn)和checksum存儲 在一個存儲單元(例如一個block文件中)來優(yōu)化皿FS的讀取性能,使得在化taNode讀 取Block的過程中,從數(shù)據(jù)塊標(biāo)識信息中即可獲取校驗(yàn)屬性信息,然后讀取對應(yīng)的chunk數(shù) 據(jù)和校驗(yàn)和,從而減少了磁盤的I/O次數(shù),有效地提高了數(shù)據(jù)讀取的效率,提升了皿FS隨機(jī) 讀取的性能,例如,對于500KB的數(shù)據(jù),優(yōu)化前皿FS讀取需要花費(fèi)32ms,優(yōu)化后只需要花費(fèi) 15ms ;對于100邸的數(shù)據(jù),優(yōu)化前皿FS讀取需要花費(fèi)30ms,優(yōu)化后只需要花費(fèi)14ms,讀取性 能明顯提升了。
[0075] 上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段, 而可依照說明書的內(nèi)容予W實(shí)施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點(diǎn)能夠 更明顯易懂,W下特舉本發(fā)明的【具體實(shí)施方式】。
【附圖說明】
[0076] 通過閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對于本領(lǐng)域普通 技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對本發(fā)明 的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
[0077] 圖1示出了根據(jù)本發(fā)明一個實(shí)施例的【背景技術(shù)】中的block存儲方式;
[0078] 圖2示出了根據(jù)本發(fā)明一個實(shí)施例的一種基于分布式文件系統(tǒng)的文件讀取方法 實(shí)施例的步驟流程圖;
[0079] 圖3示出了根據(jù)本發(fā)明一個實(shí)施例的一種基于分布式文件系統(tǒng)的文件讀取方法 實(shí)施例的第一數(shù)據(jù)信息存儲方式示意圖;
[0080] 圖4示出了根據(jù)本發(fā)明一個實(shí)施例的一種基于分布式文件系統(tǒng)的文件寫入方法 實(shí)施例的步驟流程圖;
[0081] 圖5示出了根據(jù)本發(fā)明一個實(shí)施例的一種節(jié)點(diǎn)服務(wù)器實(shí)施例一的結(jié)構(gòu)框圖;
[0082] 圖6示出了根據(jù)本發(fā)明一個實(shí)施例的一種節(jié)點(diǎn)服務(wù)器實(shí)施例二的結(jié)構(gòu)框圖。
【具體實(shí)施方式】
[0083] 下面將參照附圖更詳細(xì)地描述本公開的示例性實(shí)施例。雖然附圖中顯示了本公開 的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可各種形式實(shí)現(xiàn)本公開而不應(yīng)被送里闡述的實(shí)施例 所限制。相反,提供送些實(shí)施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍 完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。
[0084] 分布式文件系統(tǒng)皿FS是化doop項(xiàng)目的核必子項(xiàng)目,是分布式計算中數(shù)據(jù)存儲管 理的基礎(chǔ),是基于流數(shù)據(jù)模式訪問和處理超大文件的需求而開發(fā)的,可W運(yùn)行于廉價的商 用服務(wù)器上。它所具有的高容錯、高可靠性、高可擴(kuò)展性、高獲得性、高吞吐率等特征為海量 數(shù)據(jù)提供了不怕故障的存儲,為超大數(shù)據(jù)集化arge Data Set)的應(yīng)用處理帶來了很多便 利。
[0085] 皿FS的結(jié)構(gòu)為主從結(jié)構(gòu),一個皿FS集群是由一個名字節(jié)點(diǎn)服務(wù)器(簡稱名字 節(jié)點(diǎn),或稱元數(shù)據(jù)節(jié)點(diǎn)服務(wù)器(簡稱元數(shù)據(jù)節(jié)點(diǎn)),NameNode),它是一個管理文件命名空 間和調(diào)節(jié)客戶端訪問文件的主服務(wù)器,當(dāng)然還有一些數(shù)據(jù)節(jié)點(diǎn)服務(wù)器(簡稱數(shù)據(jù)節(jié)點(diǎn), DataNode),通常是一個節(jié)點(diǎn)一個機(jī)器,它來管理對應(yīng)節(jié)點(diǎn)的存儲,數(shù)據(jù)節(jié)點(diǎn)定時向名字節(jié) 點(diǎn)發(fā)送必跳,W維持與名字節(jié)點(diǎn)之間的通信。
[0086] 皿FS對外開放文件命名空間并允許用戶數(shù)據(jù)W文件形式存儲。皿FS的內(nèi)部機(jī)制 是將一個文件分割成一個或多個塊block,送些塊被存儲在一組數(shù)據(jù)節(jié)點(diǎn)中。名字節(jié)點(diǎn)用來 操作文件命名空間的文件或目錄操作,如打開,關(guān)閉,重命名等等,它同時確定塊與數(shù)據(jù)節(jié) 點(diǎn)的映射。數(shù)據(jù)節(jié)點(diǎn)來負(fù)責(zé)來自文件系統(tǒng)客戶的讀寫請求,數(shù)據(jù)節(jié)點(diǎn)同時還要執(zhí)行塊的創(chuàng) 建,刪除,和來自名字節(jié)點(diǎn)的塊復(fù)制指令。
[0087] Datanode把數(shù)據(jù)保存在data server的本地磁盤結(jié)構(gòu)中。系統(tǒng)可W有多個存 儲目錄,其存儲目錄可W通過配置文件conf/h壯s-site. xml文件的配置項(xiàng)壯S. data, dir保存了其放置數(shù)據(jù)塊block的目錄,用","隔開,可W設(shè)置多項(xiàng)。每一項(xiàng)稱為存儲目 錄,在化tanode上,其對應(yīng)的空間為一個Volume,用FSVolume來管理,所有的存儲目錄用 FSVolumeSet 來管理。
[0088] 用戶可W通過客戶端Client發(fā)送讀寫請求,客戶端接收到用戶的請求后可W通 過網(wǎng)絡(luò),與NameNode和化taNode交互,發(fā)送讀寫請求。其中,客戶端Client是一個皿FS 提供的lib庫,用戶的應(yīng)用程序需要包含該庫,調(diào)用該庫提供的函數(shù)來訪問NameNode和 DataPfcde。
[0089] 參照圖2,示出了本發(fā)明一個實(shí)施例的一種基于分布式文件系統(tǒng)的文件讀取方法 實(shí)施例的步驟流程圖,具體可W包括如下步驟:
[0090] 步驟101,數(shù)據(jù)節(jié)點(diǎn)服務(wù)器接收客戶端發(fā)送的數(shù)據(jù)訪問請求,所述數(shù)據(jù)訪問請求包 括需要讀取的目標(biāo)數(shù)據(jù)塊的信息;
[0091] 在具體實(shí)現(xiàn)中,客戶端與數(shù)據(jù)節(jié)點(diǎn)化taNode通信之前,先與名字節(jié)點(diǎn)NameNode 通信,客戶端與名字節(jié)點(diǎn)的交互過程可W為:客戶端向遠(yuǎn)程的NameNode發(fā)起RPC請求; NameNode會視情況返回文件的部分或者全部block列表,對于每個block, NameNode都會 返回有該block拷貝的化taNode地址。
[0092] 客戶端獲得block列表后,選取離客戶端最接近的化taNode來讀取block ;如果 客戶端本身就是化taNode,郝么將從本地直接讀取數(shù)據(jù)。具體的,客戶端通過向DataNode 發(fā)送數(shù)據(jù)訪問請求來讀取化taNode中的數(shù)據(jù),其中,數(shù)據(jù)訪問請求可W包括需要讀取的目 標(biāo)數(shù)據(jù)塊的信息,可W表示為如下指令:
[0093]
[0094] 上述各參數(shù)含義如下:
[0095] Version ;Client所需要的數(shù)據(jù)與化tanode所提供數(shù)據(jù)的版本是否一致;
[0096] Operator ;client所需要的操作,讀取一個block、寫入一個block等等;
[0097] blockid ;所要讀取 block 的 blockID (目標(biāo)數(shù)據(jù)塊 ID);
[009引 generationStamp :所需要讀取block的時間戳(目標(biāo)數(shù)據(jù)塊的時間戳 GenerationStamp);
[0099] startOffset ;塊內(nèi)偏移量(目標(biāo)數(shù)據(jù)塊的塊內(nèi)偏移量startOffset);
[0100] length ;讀取block的長度(目標(biāo)數(shù)據(jù)塊的長度);
[OW] clientname ;客戶端的名字;
[010引 accesstoken ;Client提供的驗(yàn)證信息,用戶名密碼等。
[0103] 而在化taNode中,DataNode接收到數(shù)據(jù)訪問請求后,首先依據(jù)所述數(shù)據(jù)訪問 請求建立與所述客戶端的socket連接。具體的,DataNode包含化taXceiverServer, DataXceiverServer 是一個 socket server,負(fù)責(zé)接收 client 發(fā)起的 socket 連接。 當(dāng)DataXceiverServer接收到一個socket連接后,啟動一個線程DataXceiver,由 DataXceiver具體負(fù)責(zé)該scoket的處理。DataXceiver從client讀取client想要進(jìn)行操 作的操作碼,若操作碼是〇P_READ_BLOCK,則DataXceiver負(fù)責(zé)讀取該block,并將數(shù)據(jù)發(fā)送 給 client。
[0104] 進(jìn)一步地,當(dāng)化taXceiver接收到數(shù)據(jù)訪問請求后,按照上述指令的格式依次 讀取各變量,讀取完成后,如果需要進(jìn)行訪問控制,則根據(jù)Client提供的accesstoken 進(jìn)行驗(yàn)證。驗(yàn)證通過后,依據(jù)所述目標(biāo)數(shù)據(jù)塊的信息創(chuàng)建一個BlockSender實(shí)例,通過 blockSender進(jìn)行數(shù)據(jù)的傳送。
[0105] 步驟102,獲得與所述目標(biāo)數(shù)據(jù)塊的信息匹配的目標(biāo)數(shù)據(jù)塊;
[0106] DataNode接收到文件訪問請求后,可W依據(jù)文件訪問請求定位目標(biāo)數(shù)據(jù)塊,在本 發(fā)明實(shí)施例的一種優(yōu)選實(shí)施例中,步驟102可W包括如下子步驟:
[0107] 子步驟S10,依據(jù)所述目標(biāo)數(shù)據(jù)塊ID W及所述目標(biāo)數(shù)據(jù)塊的時間戳 GenerationStamp,遍歷磁盤中存儲的數(shù)據(jù)塊,所述數(shù)據(jù)塊包括數(shù)據(jù)塊ID W及數(shù)據(jù)塊時間 戳;
[010引子步驟S20,查找所述數(shù)據(jù)塊ID與所述目標(biāo)數(shù)據(jù)塊ID相同,W及所述數(shù)據(jù)塊時間 戳與所述目標(biāo)數(shù)據(jù)塊的時間戳GenerationStamp相同的數(shù)據(jù)塊作為目標(biāo)數(shù)據(jù)塊。
[0109] 應(yīng)用于本發(fā)明實(shí)施例,數(shù)據(jù)塊的標(biāo)識信息(即數(shù)據(jù)塊名稱)中包括校驗(yàn)屬 性信息。具體而言,DataNode在本地磁盤中存儲的數(shù)據(jù)塊,其名稱(或標(biāo)識信息)中 包含了校驗(yàn)屬性信息,數(shù)據(jù)塊的標(biāo)識信息可W表示如下;blk_W_generationStamp_ Inlinechecksumversion_checksumtype_bytesPerCh ecksum ;其中,blk_id 為數(shù)據(jù)塊 ID, 其可W是一串隨機(jī)數(shù)字;generationStamp是數(shù)據(jù)塊的時間戳,Inlinechecksumversion是 校驗(yàn)和版本(或稱內(nèi)聯(lián)校驗(yàn)和版本),可W取值為1或2,1表示為非inlinechecksum版本, 2表示為改進(jìn)的inlinechecksum版本;checksumtype為校驗(yàn)和類型,可W取值為0, 1,-1, 其中,0表示沒有checksum,l表示CRC校驗(yàn),-1表示未知的校驗(yàn)方式;bytesPerOiecksum 表示每個校驗(yàn)和字節(jié)數(shù)。
[0110] 例如,某數(shù)據(jù)塊的標(biāo)識信息為;Wk_6151475469424452664_2267176246_2_l_512, 則 block_id 為 6151475469424452664,數(shù)據(jù)塊的時間戳為 2267176246, checksum 類型;1, 每個checksum校驗(yàn)的字節(jié)數(shù);512。
[0111] DataNode接收到文件訪問請求后,依據(jù)文件訪問請求攜帶的目標(biāo)數(shù)據(jù)塊ID W及 所述目標(biāo)數(shù)據(jù)塊的時間戳GenerationStamp,遍歷本地磁盤中存儲的數(shù)據(jù)塊,在所述數(shù)據(jù)塊 的命名中查找數(shù)據(jù)塊ID與目標(biāo)數(shù)據(jù)塊ID相同,W及數(shù)據(jù)塊時間戳與目標(biāo)數(shù)據(jù)塊的時間戳 GenerationStamp相同的數(shù)據(jù)塊,若查找成功,則該查找到的數(shù)據(jù)塊為目標(biāo)數(shù)據(jù)塊。
[0112] 本發(fā)明實(shí)施例將校驗(yàn)屬性信息(即校驗(yàn)和版本Inlinechecksumversion,校驗(yàn)和 類型checksumtype,W及每個校驗(yàn)和字節(jié)數(shù)bytesPer化ecksum)添加到數(shù)據(jù)塊的標(biāo)識信息 中,使得標(biāo)識信息除了提供數(shù)據(jù)塊ID W及數(shù)據(jù)塊時間戳等標(biāo)記數(shù)據(jù)塊的信息外,還提供校 驗(yàn)和的相關(guān)信息,送樣在定位到具體的目標(biāo)數(shù)據(jù)塊時,可W從該目標(biāo)數(shù)據(jù)塊的標(biāo)識信息中 獲得校驗(yàn)和相關(guān)信息,節(jié)省了存儲空間的同時,提高了數(shù)據(jù)獲取效率,整體上提升了分布式 文件系統(tǒng)的性能。
[0113] 另外,本發(fā)明實(shí)施例中,目標(biāo)數(shù)據(jù)塊中還可W包括第一數(shù)據(jù)信息,而第一數(shù)據(jù)信息 進(jìn)一步可W包括分片數(shù)據(jù)chunk (chunk是進(jìn)行數(shù)據(jù)校驗(yàn)的基本單位)W及與每個分片數(shù)據(jù) chunk對應(yīng)的校驗(yàn)和數(shù)據(jù)checksum(在默認(rèn)情況下一個chunk的大小是5^byte,生成的校 驗(yàn)和是4byte),并且分片數(shù)據(jù)chunk W及校驗(yàn)和數(shù)據(jù)checksum存儲在磁盤的同一個存儲介 質(zhì)(例如一個block文件)中,而無需分開兩個文件分別存儲分片數(shù)據(jù)chunk W及存儲校 驗(yàn)和數(shù)據(jù)checksum,從而有利于有效地管理第一數(shù)據(jù)信息,并且有效地提高了數(shù)據(jù)讀取的 效率。
[0114] 在實(shí)際中,如圖3的第一數(shù)據(jù)信息存儲方式示意圖所示,校驗(yàn)和數(shù)據(jù)checksum 在存儲介質(zhì)中的位置位于對應(yīng)的分片數(shù)據(jù)chunk的存儲位置之后,位于對應(yīng)的分片數(shù)據(jù) chunk的下一個分片數(shù)據(jù)chunk的存儲位置之前。
[0115] 步驟103,將所述校驗(yàn)屬性信息W及所述第一數(shù)據(jù)信息發(fā)送至所述客戶端;
[0116] 當(dāng)定位到具體的目標(biāo)數(shù)據(jù)塊W后,可W從目標(biāo)數(shù)據(jù)塊的名稱中獲得校驗(yàn)屬性信 息,并將校驗(yàn)屬性信息W及第一數(shù)據(jù)信息發(fā)送至客戶端。在本發(fā)明實(shí)施例的一種優(yōu)選實(shí)施 例中,步驟103可W包括如下子步驟:
[0117] 子步驟S11,從所述目標(biāo)數(shù)據(jù)塊的標(biāo)識信息中讀取所述校驗(yàn)屬性信息發(fā)送至所述 客戶端;
[0118] 當(dāng)定位出目標(biāo)數(shù)據(jù)塊W后,可W從目標(biāo)數(shù)據(jù)塊的標(biāo)識信息中獲得該目標(biāo)數(shù)據(jù)塊的 校驗(yàn)屬性信息,并通過blockSender將該校驗(yàn)屬性信息返回客戶端,W告知客戶端具體的 校驗(yàn)方式。
[0119] 子步驟S12,從所述存儲介質(zhì)中讀取預(yù)設(shè)大小的分片數(shù)據(jù)chunk W及對應(yīng)的校驗(yàn)