亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種容量獲取方法及系統(tǒng)的制作方法

文檔序號:6522845閱讀:131來源:國知局
一種容量獲取方法及系統(tǒng)的制作方法
【專利摘要】本申請?zhí)峁┝艘环N容量獲取方法及系統(tǒng),以解決獲取容量中IO消耗過大對系統(tǒng)造成負(fù)擔(dān)的問題。為了解決上述問題,本申請公開了一種容量獲取方法,包括:向磁盤的文件系統(tǒng)發(fā)送調(diào)用磁盤元數(shù)據(jù)的請求;接收返回的磁盤元數(shù)據(jù),所述磁盤元數(shù)據(jù)包括磁盤中存儲(chǔ)塊的總量和存儲(chǔ)塊的空閑量;通過對所述磁盤中存儲(chǔ)塊的總量和存儲(chǔ)塊的空閑量的計(jì)算,獲得磁盤的容量信息。本申請直接調(diào)用磁盤元數(shù)據(jù),不會(huì)產(chǎn)生IO消耗,使得磁盤的利用率始終保持在正常的水平,不會(huì)對系統(tǒng)造成負(fù)擔(dān)。
【專利說明】一種容量獲取方法及系統(tǒng)
[0001]本發(fā)明專利申請是申請日為2011年12月27日、申請?zhí)枮?01110444072.1、名稱為“分布式文件系統(tǒng)中的容量獲取方法及容量獲取系統(tǒng)”的中國發(fā)明專利申請的分案申請。
【技術(shù)領(lǐng)域】
[0002]本申請涉及計(jì)算機(jī)存儲(chǔ)技術(shù),特別是涉及一種容量獲取方法及系統(tǒng)。
【背景技術(shù)】
[0003]HDFS (Hadoop Distributed File System)是一個(gè)分布式文件系統(tǒng),有著高容錯(cuò)性的特點(diǎn),并且提供高吞吐量來訪問應(yīng)用程序的數(shù)據(jù),適合有著超大數(shù)據(jù)集的應(yīng)用程序,可以解決海量數(shù)據(jù)存儲(chǔ)的問題。
[0004]HDFS的主節(jié)點(diǎn)(NameNode)通過與存儲(chǔ)節(jié)點(diǎn)(DataNode)進(jìn)行周期性的心跳通信,來獲取各個(gè)存儲(chǔ)節(jié)點(diǎn)的容量信息,進(jìn)而獲取整個(gè)集群的容量信息。而每一個(gè)存儲(chǔ)節(jié)點(diǎn)包含多個(gè)磁盤,因此存儲(chǔ)節(jié)點(diǎn)采用du命令方式獲取每一個(gè)磁盤的空間占用量,進(jìn)而獲取本地的空間占用量。
[0005]du命令方式獲取每一個(gè)磁盤的空間占用量的具體做法是,循環(huán)遍歷存儲(chǔ)節(jié)點(diǎn)包含的每一個(gè)磁盤,并對于每一個(gè)磁盤執(zhí)行如下操作:從磁盤存儲(chǔ)數(shù)據(jù)的根目錄(例如,參數(shù)dfs.data, dir配置的目錄)開始,以此根目錄為根節(jié)點(diǎn)按照深度優(yōu)先的方式遍歷這個(gè)目錄樹。若遇到中間節(jié)點(diǎn),即該節(jié)點(diǎn)對應(yīng)是子目錄,則繼續(xù)遍歷子目錄,直到遇到葉子節(jié)點(diǎn),即該節(jié)點(diǎn)對應(yīng)的是文件,則獲取對應(yīng)的文件元數(shù)據(jù),從文件元數(shù)據(jù)中獲取文件的大小信息。然后將某個(gè)中間節(jié)點(diǎn)對應(yīng)的所有葉子節(jié)點(diǎn)文件的大小信息累加求和后作為給中間節(jié)點(diǎn)對應(yīng)子目錄的大小。然后逐層累加直到所述目錄樹遍歷完成,獲取了整個(gè)目錄樹中所有文件的空間占用量,即獲得到了該磁盤的空間占用量,然后返回給du命令。
[0006]上述的過程中需要掃描磁盤中的所有文件,因此通常會(huì)產(chǎn)生大量的10(lnput/Output,輸入/輸出)消耗,此過程導(dǎo)致磁盤利用率飽和,即磁盤利用率達(dá)到了 100%,這對系統(tǒng)造成了很大的負(fù)擔(dān),甚至在某些情況下會(huì)影響HDFS的性能。

【發(fā)明內(nèi)容】

[0007]本申請?zhí)峁┝艘环N容量獲取方法及系統(tǒng),以解決獲取容量中10消耗過大對系統(tǒng)造成負(fù)擔(dān)的問題。
[0008]為了解決上述問題,本申請公開了一種容量獲取方法,包括:
[0009]向磁盤的文件系統(tǒng)發(fā)送調(diào)用磁盤元數(shù)據(jù)的請求;
[0010]接收返回的磁盤元數(shù)據(jù),所述磁盤元數(shù)據(jù)包括磁盤中存儲(chǔ)塊的總量和存儲(chǔ)塊的空閑量;
[0011]通過對所述磁盤中存儲(chǔ)塊的總量和存儲(chǔ)塊的空閑量的計(jì)算,獲得磁盤的容量信
肩、Ο
[0012]優(yōu)選的,所述容量信息包括空間總量、空間剩余量和空間占用量。[0013]優(yōu)選的,每個(gè)存儲(chǔ)塊的容量是固定的,所述通過對所述磁盤中存儲(chǔ)塊的總量和存儲(chǔ)塊的空閑量的計(jì)算,獲得磁盤的容量信息,包括:
[0014]將所述存儲(chǔ)塊的容量與所述磁盤中存儲(chǔ)塊的總量相乘,計(jì)算結(jié)果作為磁盤的空間總量;
[0015]將所述存儲(chǔ)塊的容量與所述磁盤中存儲(chǔ)塊的空閑量相乘,計(jì)算結(jié)果作為磁盤的空間剩余量。
[0016]優(yōu)選的,將磁盤的空間總量減去磁盤的空間剩余量,計(jì)算結(jié)果磁盤的空間占用量。
[0017]優(yōu)選的,獲得磁盤的容量信息之后,還包括:
[0018]將磁盤的容量信息返回給df命令。
[0019]優(yōu)選的,存儲(chǔ)節(jié)點(diǎn)調(diào)用df命令以獲取每個(gè)磁盤的容量信息,并將所有磁盤的容量信息相加的和作為該存儲(chǔ)節(jié)點(diǎn)的容量信息。
[0020]優(yōu)選的,類DF用于實(shí)現(xiàn)調(diào)用df命令,所述存儲(chǔ)節(jié)點(diǎn)通過執(zhí)行df命令以獲取每個(gè)磁盤的空間占用量,包括:
[0021]存儲(chǔ)節(jié)點(diǎn)通過調(diào)用FSDataset類的getDfsUsed方法,最終調(diào)用FSVolume類的getDfsUsed 方法;
[0022]所述FSVolume類的getDfsUsed方法通過類DF實(shí)現(xiàn)調(diào)用df命令,以獲取磁盤的
容量信息。
[0023]優(yōu)選的,存儲(chǔ)節(jié)點(diǎn)周期性的調(diào)用df命令以獲取對應(yīng)的容量信息,并將所述容量信息周期性的傳輸給主節(jié)點(diǎn)。
[0024]優(yōu)選的,存儲(chǔ)節(jié)點(diǎn)以各個(gè)磁盤的容量信息為基準(zhǔn),在對應(yīng)的磁盤中分配并保存數(shù)據(jù)。
[0025]相應(yīng)的,本申請還公開了一種容量獲取系統(tǒng),包括:
[0026]發(fā)送請求模塊,用于向磁盤的文件系統(tǒng)發(fā)送調(diào)用磁盤元數(shù)據(jù)的請求;
[0027]接收元數(shù)據(jù)模塊,用于接收返回的磁盤元數(shù)據(jù),所述磁盤元數(shù)據(jù)包括磁盤中存儲(chǔ)塊的總量和存儲(chǔ)塊的空閑量;
[0028]計(jì)算容量模塊,用于通過對所述磁盤中存儲(chǔ)塊的總量和存儲(chǔ)塊的空閑量的計(jì)算,獲得磁盤的容量信息。
[0029]優(yōu)選的,所述容量信息包括空間總量、空間剩余量和空間占用量。
[0030]優(yōu)選的,每個(gè)存儲(chǔ)塊的容量是固定的,所述計(jì)算容量模塊,包括:
[0031]計(jì)算空間總量子模塊,用于將所述存儲(chǔ)塊的容量與所述磁盤中存儲(chǔ)塊的總量相乘,計(jì)算結(jié)果作為磁盤的空間總量;
[0032]計(jì)算空間剩余量子模塊,用于將所述存儲(chǔ)塊的容量與所述磁盤中存儲(chǔ)塊的空閑量相乘,計(jì)算結(jié)果作為磁盤的空間剩余量。
[0033]優(yōu)選的,所述計(jì)算容量模塊,還包括:
[0034]計(jì)算空間占用量子模塊,用于將磁盤的空間總量減去磁盤的空間剩余量,計(jì)算結(jié)果磁盤的空間占用量。
[0035]優(yōu)選的,所述的系統(tǒng)還包括:
[0036]容量返回模塊,用于將磁盤的容量信息返回給df命令。
[0037]優(yōu)選的,所述的系統(tǒng)還包括:[0038]獲取容量模塊,用于存儲(chǔ)節(jié)點(diǎn)調(diào)用df命令以獲取每個(gè)磁盤的容量信息,并將所有磁盤的容量信息相加的和作為該存儲(chǔ)節(jié)點(diǎn)的容量信息。
[0039]優(yōu)選的,類DF用于實(shí)現(xiàn)調(diào)用df命令,所述獲取容量模塊包括:
[0040]調(diào)用方法子模塊,用于存儲(chǔ)節(jié)點(diǎn)通過調(diào)用FSDataset類的getDfsUsed方法,最終調(diào)用 FSVolume 類的 getDfsUsed 方法;
[0041]調(diào)用命令子模塊,用于所述FSVolume類的getDfsUsed方法通過類DF實(shí)現(xiàn)調(diào)用df命令,以獲取磁盤的容量信息。
[0042]優(yōu)選的,所述的系統(tǒng)還包括:
[0043]傳輸模塊,用于存儲(chǔ)節(jié)點(diǎn)周期性的調(diào)用df命令以獲取對應(yīng)的容量信息,并將所述容量信息周期性的傳輸給主節(jié)點(diǎn)。
[0044]分配數(shù)據(jù)模塊,用于存儲(chǔ)節(jié)點(diǎn)以各個(gè)磁盤的容量信息為基準(zhǔn),在對應(yīng)的磁盤中分配并保存數(shù)據(jù)。
[0045]與現(xiàn)有技術(shù)相比,本申請包括以下優(yōu)點(diǎn):
[0046]首先,本申請不需要根據(jù)目錄樹這種邏輯存儲(chǔ)結(jié)構(gòu)來遍歷磁盤的每一個(gè)文件,獲取每一個(gè)文件的元數(shù)據(jù)中的大小信息,再逐層累加后獲得磁盤的空間占用量,而是根據(jù)磁盤的物理存儲(chǔ)結(jié)構(gòu),向磁盤的文件系統(tǒng)發(fā)送調(diào)用磁盤元數(shù)據(jù)的請求,接收返回的磁盤元數(shù)據(jù),所述磁盤元數(shù)據(jù)包括磁盤中存儲(chǔ)塊的總量和存儲(chǔ)塊的空閑量,再通過對所述磁盤中存儲(chǔ)塊的總量和存儲(chǔ)塊的空閑量的計(jì)算,獲得磁盤的容量信息。此過程中直接調(diào)用磁盤元數(shù)據(jù),不會(huì)產(chǎn)生10消耗,使得磁盤的利用率始終保持在正常的水平,不會(huì)對系統(tǒng)造成負(fù)擔(dān)。
【專利附圖】

【附圖說明】
[0047]圖1是本申請實(shí)施例所述一種容量獲取方法流程圖;
[0048]圖2是本申請實(shí)施例所述分布式系統(tǒng)結(jié)構(gòu)圖;
[0049]圖3是本申請實(shí)施例所述一種容量獲取系統(tǒng)結(jié)構(gòu)圖。
【具體實(shí)施方式】
[0050]為使本申請的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和【具體實(shí)施方式】對本申請作進(jìn)一步詳細(xì)的說明。
[0051]本申請?zhí)峁┮环N容量獲取方法,存儲(chǔ)節(jié)點(diǎn)在獲取每個(gè)磁盤的容量信息時(shí)根據(jù)數(shù)據(jù)存儲(chǔ)的物理結(jié)構(gòu)直接調(diào)用磁盤元數(shù)據(jù),進(jìn)而獲取磁盤的容量信息不會(huì)產(chǎn)生10消耗,使得磁盤的利用率始終保持在正常的水平,不會(huì)對系統(tǒng)造成負(fù)擔(dān)。
[0052]磁盤在存儲(chǔ)數(shù)據(jù)時(shí)可以分為邏輯存儲(chǔ)結(jié)構(gòu)和物理存儲(chǔ)結(jié)構(gòu)。
[0053]所述邏輯存儲(chǔ)結(jié)構(gòu)以文件為存儲(chǔ)單位,建立一個(gè)目錄樹,目錄樹中的主節(jié)點(diǎn)是主目錄,中間節(jié)點(diǎn)是子目錄,葉子節(jié)點(diǎn)就是文件。
[0054]所述物理存儲(chǔ)結(jié)構(gòu)以存儲(chǔ)塊為存儲(chǔ)單位,將一個(gè)磁盤分為許多個(gè)存儲(chǔ)塊,存儲(chǔ)塊的容量比較小,并且存儲(chǔ)塊的容量是固定的,通常一個(gè)文件可以存儲(chǔ)在若干個(gè)存儲(chǔ)塊中,例如存儲(chǔ)塊為1KB,而某文件的大小是5KB,那么就需要5個(gè)存儲(chǔ)塊來存儲(chǔ)這個(gè)文件。
[0055]參照圖1,給出了本申請實(shí)施例所述一種容量獲取方法流程圖。
[0056]步驟11,向磁盤的文件系統(tǒng)發(fā)送調(diào)用磁盤元數(shù)據(jù)的請求;[0057]磁盤的文件系統(tǒng)中存有磁盤元數(shù)據(jù),所述磁盤元數(shù)據(jù)保存的與容量有關(guān)的數(shù)據(jù)是按照磁盤物理存儲(chǔ)結(jié)構(gòu)存儲(chǔ)的,因此磁盤元數(shù)據(jù)可以包括磁盤中存儲(chǔ)塊的總量和存儲(chǔ)塊的空閑量等數(shù)據(jù)。
[0058]本申請按照磁盤物理存儲(chǔ)結(jié)構(gòu)來獲取容量,因此在獲取每個(gè)磁盤的容量信息時(shí),可以直接調(diào)用磁盤文件系統(tǒng)中的磁盤元數(shù)據(jù)。因此需要向磁盤的文件系統(tǒng)發(fā)送調(diào)用磁盤元數(shù)據(jù)的請求。
[0059]所述文件系統(tǒng),也稱文件管理系統(tǒng),是操作系統(tǒng)中負(fù)責(zé)管理和存儲(chǔ)文件信息的軟件機(jī)構(gòu)。文件系統(tǒng)由三部分組成:與文件管理有關(guān)軟件、被管理文件以及實(shí)施文件管理所需數(shù)據(jù)結(jié)構(gòu)。
[0060]步驟12,接收返回的磁盤元數(shù)據(jù),所述磁盤元數(shù)據(jù)包括磁盤中存儲(chǔ)塊的總量和存儲(chǔ)塊的空閑量;
[0061]磁盤的文件系統(tǒng)在接收到調(diào)用磁盤元數(shù)據(jù)的請求后,會(huì)返回磁盤元數(shù)據(jù),此時(shí)接收所述磁盤元數(shù)據(jù),就可以接收到磁盤中存儲(chǔ)塊的總量和存儲(chǔ)塊的空閑量等數(shù)據(jù)。
[0062]步驟13,通過計(jì)算所述磁盤中存儲(chǔ)塊的總量和存儲(chǔ)塊的空閑量,獲得磁盤的容量信息。
[0063]所述容量信息包括空間總量、空間剩余量和空間占用量,每個(gè)存儲(chǔ)塊的容量是固定的,因此根據(jù)磁盤元數(shù)據(jù)中存儲(chǔ)塊的總量和存儲(chǔ)塊的空閑量,可以計(jì)算獲得磁盤的容量信息。
[0064]具體計(jì)算步驟如下:
[0065]步驟131,將所述存儲(chǔ)塊的容量與所述磁盤中存儲(chǔ)塊的總量相乘,計(jì)算結(jié)果作為磁盤的空間總量;
[0066]步驟132,將所述存儲(chǔ)塊的容量與所述磁盤中存儲(chǔ)塊的空閑量相乘,計(jì)算結(jié)果作為磁盤的空間剩余量。
[0067]步驟133,將磁盤的空間總量減去磁盤的空間剩余量,計(jì)算結(jié)果磁盤的空間占用量。
[0068]例如,某個(gè)磁盤中存儲(chǔ)塊的總量為1024個(gè),存儲(chǔ)塊的空閑量為512個(gè),每個(gè)存儲(chǔ)塊的容量是1KB。
[0069]則該磁盤的空間總量為1KBX1024=1024KB=1M
[0070]該磁盤的空間剩余量為1KBX512=512KB
[0071]則該磁盤的空間占用量為1024KB-512KB=512KB
[0072]通過上述的計(jì)算方法可以獲取該磁盤的容量信息。
[0073]現(xiàn)有技術(shù)是依照磁盤的邏輯存儲(chǔ)結(jié)構(gòu)從主節(jié)點(diǎn)開始,沿著中間節(jié)點(diǎn)最終可以遍歷到葉子節(jié)點(diǎn),即從主目錄開始最終遍歷到文件,并獲取文件元數(shù)據(jù),再逐層累加直到主目錄,來獲取該磁盤的空間占有量。此過程常會(huì)產(chǎn)生大量的10 (Input/Output,輸入/輸出)消耗,此過程導(dǎo)致磁盤利用率飽和,即磁盤利用率達(dá)到了 100%,這對系統(tǒng)造成了很大的負(fù)擔(dān),甚至在某些情況下會(huì)影響HDFS的性能。
[0074]本申請根據(jù)磁盤的物理存儲(chǔ)結(jié)構(gòu),向磁盤的文件系統(tǒng)發(fā)送調(diào)用磁盤元數(shù)據(jù)的請求,接收返回的磁盤元數(shù)據(jù),所述磁盤元數(shù)據(jù)包括磁盤中存儲(chǔ)塊的總量和存儲(chǔ)塊的空閑量,再通過對所述磁盤中存儲(chǔ)塊的總量和存儲(chǔ)塊的空閑量的計(jì)算,獲得磁盤的容量信息。此過程中直接調(diào)用磁盤元數(shù)據(jù),不會(huì)產(chǎn)生10消耗,使得磁盤的利用率始終保持在正常的水平,不會(huì)對系統(tǒng)造成負(fù)擔(dān)。
[0075]優(yōu)選的,獲得磁盤的容量信息之后,還包括:
[0076]將磁盤的容量信息返回給df命令。
[0077]df命令會(huì)調(diào)用函數(shù)執(zhí)行步驟11到步驟13的過程,該函數(shù)最終可以獲取到磁盤的容量信息,然后將所述容量信息返回給df命令。
[0078]優(yōu)選的,存儲(chǔ)節(jié)點(diǎn)調(diào)用df命令以獲取每個(gè)磁盤的容量信息,并將所有磁盤的容量信息相加的和作為該存儲(chǔ)節(jié)點(diǎn)的容量信息。
[0079]本申請中通過df命令調(diào)用函數(shù)最終獲取到磁盤的容量信息,因此所述存儲(chǔ)節(jié)點(diǎn)可以調(diào)用df命令來獲取每個(gè)磁盤的容量信息,然后將所有磁盤的容量信息相加的和作為該存儲(chǔ)節(jié)點(diǎn)的容量信息。
[0080]例如,某一存儲(chǔ)節(jié)點(diǎn)包含3個(gè)磁盤,通過df命令調(diào)用函數(shù),該函數(shù)通過發(fā)送請求、接收磁盤元數(shù)據(jù)和計(jì)算,最終返回磁盤1的容量信息包括:空間總量為100M、空間剩余量40M和空間占用量60M。磁盤2的容量信息包括:空間總量為200M、空間剩余量120M和空間占用量80M。磁盤3的容量信息包括:空間總量為50M、空間剩余量40M和空間占用量10M。
[0081]則最終該存儲(chǔ)節(jié)點(diǎn)的容量信息為:
[0082]空間總量100M+200M+50M=350M
[0083]空間剩余量40M+120M+40M=200M
[0084]空間占用量60M+80M+10M=150M
[0085]優(yōu)選的,類DF用于實(shí)現(xiàn)調(diào)用df命令,所述存儲(chǔ)節(jié)點(diǎn)通過執(zhí)行df命令以獲取每個(gè)磁盤的空間占用量,包括:
[0086]存儲(chǔ)節(jié)點(diǎn)通過調(diào)用FSDataset類的getDfsUsed方法,最終調(diào)用FSVolume類的getDfsUsed 方法;
[0087]所述FSVolume類的getDfsUsed方法通過類DF實(shí)現(xiàn)調(diào)用df命令,以獲取磁盤的
容量信息。
[0088]存儲(chǔ)節(jié)點(diǎn)(DataNode)調(diào)用FSDataset類的getDfsUsed方法獲取磁盤的容量信息,然后通過和主節(jié)點(diǎn)(NameNode)的心跳通信傳遞該信息。而FSDataset類的getDfsUsed方法最終調(diào)用FSVolume類的getDfsUsed方法。
[0089]由于在FSVolume中已經(jīng)包含了 df的實(shí)現(xiàn)類,即類DF。所以需要將getDfsUsed方法的實(shí)現(xiàn)設(shè)置為使用DF類的版本。
[0090]設(shè)置文如下的情況:
[0091]long getDftlJsed() throws lOException {if( usage.getUsed() - reserved > 0 ) {return usage.getUsedQ - reserved;
} else {return 0;
}
}
[0092]其中,對象usage是DF類的實(shí)例,調(diào)用“usage.getUsedO ”是df命令的一個(gè)實(shí)現(xiàn),最終調(diào)用函數(shù)從每一塊磁盤的文件系統(tǒng)的管理結(jié)構(gòu)中獲取磁盤的空間總量與空間剩余量,在計(jì)算獲得磁盤的空間占用量。
[0093]優(yōu)選的,存儲(chǔ)節(jié)點(diǎn)周期性的調(diào)用df命令以獲取對應(yīng)的容量信息,并將所述容量信息周期性的傳輸給主節(jié)點(diǎn)。
[0094]在HDFS系統(tǒng)中,HDFS的主節(jié)點(diǎn)(NameNode)通過與存儲(chǔ)節(jié)點(diǎn)(DataNode)進(jìn)行周期性的心跳通信,來獲取各個(gè)存儲(chǔ)節(jié)點(diǎn)的容量信息,進(jìn)而獲取整個(gè)集群的容量信息。
[0095]因此存儲(chǔ)節(jié)點(diǎn)會(huì)周期性的調(diào)用df命令以獲取對應(yīng)的容量信息,然后再將所述容量信息周期性的傳輸給主節(jié)點(diǎn)。
[0096]本申請可以應(yīng)用于HDFS(Hadoop Distributed File System)分布式文件系統(tǒng)中,該系統(tǒng)可以解決海量數(shù)據(jù)存儲(chǔ)的問題。
[0097]后續(xù),主節(jié)點(diǎn)在存儲(chǔ)新數(shù)據(jù)時(shí),可以根據(jù)各個(gè)存儲(chǔ)節(jié)點(diǎn)傳輸?shù)娜萘啃畔ⅲ_定應(yīng)該存儲(chǔ)在哪個(gè)存儲(chǔ)節(jié)點(diǎn)中。
[0098]存儲(chǔ)節(jié)點(diǎn)在接收到主節(jié)點(diǎn)傳輸?shù)臄?shù)據(jù)后,以各個(gè)磁盤的容量信息為基準(zhǔn),在對應(yīng)的磁盤中分配并保存數(shù)據(jù)。
[0099]例如,某個(gè)數(shù)據(jù)的大小是200M,存儲(chǔ)節(jié)點(diǎn)1的容量信息為:磁盤A空間總量為100M、空間剩余量40M和空間占用量60M,磁盤B空間總量為300M、空間剩余量120M和空間占用量180M。存儲(chǔ)節(jié)點(diǎn)2的容量信息為:磁盤A空間總量為500M、空間剩余量105M和空間占用量395M,磁盤B空間總量為500M、空間剩余量320M和空間占用量180M。
[0100]因此,主節(jié)點(diǎn)會(huì)將數(shù)據(jù)存儲(chǔ)在存儲(chǔ)節(jié)點(diǎn)2中,存儲(chǔ)節(jié)點(diǎn)2再以各個(gè)磁盤的容量信息為基準(zhǔn),磁盤B的空間剩余量為320M,大于數(shù)據(jù)的大小200M,因此可以將數(shù)據(jù)分配到在磁盤B中存儲(chǔ)。
[0101]參照圖2,給出了本申請實(shí)施例所述分布式系統(tǒng)結(jié)構(gòu)圖。
[0102]在所述分布式系統(tǒng)架構(gòu)中,包含了以下幾個(gè)模塊:
[0103]Client是客戶端,從主節(jié)點(diǎn)處獲取某個(gè)文件的存儲(chǔ)位置,再到對應(yīng)的存儲(chǔ)節(jié)點(diǎn)處
進(jìn)行寫/讀操作。
[0104]NameNode是hadoop分布式文件系統(tǒng)中的主節(jié)點(diǎn),維護(hù)了 hadoop分布式文件系統(tǒng)中的所有文件的元數(shù)據(jù)信息,包含文件的訪問權(quán)限、宿主、以及文件的數(shù)據(jù)存儲(chǔ)的位置等,而這些元數(shù)據(jù)信息最終都會(huì)被持久化到磁盤中。
[0105]DataNode是hadoop分布式文件系統(tǒng)中的存儲(chǔ)節(jié)點(diǎn),存儲(chǔ)了 hadoop分布式文件系統(tǒng)中的文件的內(nèi)容。
[0106]SecondaryNameNode是hadoop分布式文件系統(tǒng)的備主節(jié)點(diǎn),所述備主節(jié)點(diǎn)定期和主節(jié)點(diǎn)保持的hadoop分布式文件系統(tǒng)元數(shù)據(jù)進(jìn)行同步,同時(shí)對主節(jié)點(diǎn)上持久化的數(shù)據(jù)進(jìn)行合并。
[0107]其中,hadoop分布式文件系統(tǒng)的每個(gè)存儲(chǔ)節(jié)點(diǎn)中的文件,最終被分成大小固定的塊(例如一個(gè)塊的大小為128MB,可配置)存放。如果文件的大小不足一個(gè)塊大小,則文件存儲(chǔ)為一個(gè)塊,其大小為文件的真實(shí)大小,不會(huì)多占用空間。如果文件大小不是塊大小對齊,則最后一個(gè)塊不會(huì)占滿一個(gè)塊的空間,所有塊大小總和為文件真實(shí)大小的空間。
[0108]具體實(shí)施中,每個(gè)存儲(chǔ)節(jié)點(diǎn)(DataNode)會(huì)定期地把存儲(chǔ)在本地的塊發(fā)送給主節(jié)點(diǎn)(NameNode)ο以使得NameNode能夠感知hadoop文件系統(tǒng)中所有文件的數(shù)據(jù)存儲(chǔ)位置。
[0109]此時(shí),所述文件被分成大小固定的塊存放,是這對hadoop分布式文件系統(tǒng)而言的,用于確定文件的數(shù)據(jù)存儲(chǔ)位置。
[0110]而上文論述的文件被分成若干個(gè)存儲(chǔ)塊來存放,是針對磁盤而言的,僅可以獲取到容量信息。這兩處論述的技術(shù)是不同的,不能混淆視之。
[0111]本申請所述的容量獲取方法可以應(yīng)用于hadoop分布式文件系統(tǒng),具體應(yīng)用于該系統(tǒng)的存儲(chǔ)節(jié)點(diǎn)在獲取每個(gè)磁盤的容量信息。存儲(chǔ)節(jié)點(diǎn)通過調(diào)用df命令獲取每個(gè)磁盤的容量信息,進(jìn)而獲取該存儲(chǔ)節(jié)點(diǎn)的容量信息,再周期性的與主節(jié)點(diǎn)進(jìn)行心跳通信,告知自己的容量信息。
[0112]后續(xù)主節(jié)點(diǎn)在決策新數(shù)據(jù)的存放位置時(shí),可以通過某個(gè)存儲(chǔ)節(jié)點(diǎn)的容量信息,來決策該存儲(chǔ)節(jié)點(diǎn)是否還可以繼續(xù)存放新數(shù)據(jù)。
[0113]參照圖3,給出了本申請實(shí)施例所述一種容量獲取系統(tǒng)結(jié)構(gòu)圖。
[0114]相應(yīng)的,本申請還提供了一種容量獲取系統(tǒng),包括發(fā)送請求模塊11、接收元數(shù)據(jù)模塊12和計(jì)算容量模塊13,其中
[0115]發(fā)送請求模塊11,用于向磁盤的文件系統(tǒng)發(fā)送調(diào)用磁盤元數(shù)據(jù)的請求;
[0116]接收元數(shù)據(jù)模塊12,用于接收返回的磁盤元數(shù)據(jù),所述磁盤元數(shù)據(jù)包括磁盤中存儲(chǔ)塊的總量和存儲(chǔ)塊的空閑量;
[0117]計(jì)算容量模塊13,用于通過對所述磁盤中存儲(chǔ)塊的總量和存儲(chǔ)塊的空閑量的計(jì)算,獲得磁盤的容量信息。
[0118]其中,所述容量信息包括空間總量、空間剩余量和空間占用量。
[0119]優(yōu)選的,每個(gè)存儲(chǔ)塊的容量是固定的,所述計(jì)算容量模塊13,包括:
[0120]計(jì)算空間總量子模塊131,用于將所述存儲(chǔ)塊的容量與所述磁盤中存儲(chǔ)塊的總量相乘,計(jì)算結(jié)果作為磁盤的空間總量;
[0121]計(jì)算空間剩余量子模塊132,用于將所述存儲(chǔ)塊的容量與所述磁盤中存儲(chǔ)塊的空閑量相乘,計(jì)算結(jié)果作為磁盤的空間剩余量;
[0122]計(jì)算空間占用量子模塊133,用于將磁盤的空間總量減去磁盤的空間剩余量,計(jì)算結(jié)果磁盤的空間占用量。
[0123]優(yōu)選的,所述的系統(tǒng)還包括:
[0124]容量返回模塊14,用于將磁盤的容量信息返回給df命令。
[0125]獲取容量模塊15,用于存儲(chǔ)節(jié)點(diǎn)調(diào)用df命令以獲取每個(gè)磁盤的容量信息,并將所有磁盤的容量信息相加的和作為該存儲(chǔ)節(jié)點(diǎn)的容量信息。
[0126]傳輸模塊16,用于存儲(chǔ)節(jié)點(diǎn)周期性的調(diào)用df命令以獲取對應(yīng)的容量信息,并將所述容量信息周期性的傳輸給主節(jié)點(diǎn)。
[0127]分配數(shù)據(jù)模塊17,用于存儲(chǔ)節(jié)點(diǎn)以各個(gè)磁盤的容量信息為基準(zhǔn),在對應(yīng)的磁盤中分配并保存數(shù)據(jù)。
[0128]優(yōu)選的,類DF用于實(shí)現(xiàn)調(diào)用df命令,所述獲取容量模塊15包括:
[0129]調(diào)用方法子模塊151,用于存儲(chǔ)節(jié)點(diǎn)通過調(diào)用FSDataset類的getDfsUsed方法,最終調(diào)用FSVolume類的getDfsUsed方法;
[0130]調(diào)用命令子模塊152,用于所述FSVolume類的getDfsUsed方法通過類DF實(shí)現(xiàn)調(diào)用df命令,以獲取磁盤的容量信息。
[0131]對于系統(tǒng)實(shí)施例而言,由于其與方法實(shí)施例基本相似,所以描述的比較簡單,相關(guān)之處參見方法實(shí)施例的部分說明即可。
[0132]本說明書中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似的部分互相參見即可。 [0133]本申請可以在由計(jì)算機(jī)執(zhí)行的計(jì)算機(jī)可執(zhí)行指令的一般上下文中描述,例如程序模塊。一般地,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)等等。也可以在分布式計(jì)算環(huán)境中實(shí)踐本申請,在這些分布式計(jì)算環(huán)境中,由通過通信網(wǎng)絡(luò)而被連接的遠(yuǎn)程處理設(shè)備來執(zhí)行任務(wù)。在分布式計(jì)算環(huán)境中,程序模塊可以位于包括存儲(chǔ)設(shè)備在內(nèi)的本地和遠(yuǎn)程計(jì)算機(jī)存儲(chǔ)介質(zhì)中。
[0134]最后,還需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個(gè)實(shí)體或者操作與另一個(gè)實(shí)體或操作區(qū)分開來,而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過程、方法、商品或者設(shè)備中還存在另外的相同要素。
[0135]以上對本申請所提供的一種容量獲取方法及系統(tǒng),進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對本申請的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助理解本申請的方法及其核心思想;同時(shí),對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本申請的思想,在【具體實(shí)施方式】及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對本申請的限制。
【權(quán)利要求】
1.一種容量獲取方法,其特征在于,包括:向磁盤的文件系統(tǒng)發(fā)送調(diào)用磁盤元數(shù)據(jù)的請求;接收返回的磁盤元數(shù)據(jù),所述磁盤元數(shù)據(jù)包括磁盤中存儲(chǔ)塊的總量和存儲(chǔ)塊的空閑量;通過對所述磁盤中存儲(chǔ)塊的總量和存儲(chǔ)塊的空閑量的計(jì)算,獲得磁盤的容量信息。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述容量信息包括空間總量、空間剩余量和空間占用量。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,每個(gè)存儲(chǔ)塊的容量是固定的,所述通過對所述磁盤中存儲(chǔ)塊的總量和存儲(chǔ)塊的空閑量的計(jì)算,獲得磁盤的容量信息,包括:將所述存儲(chǔ)塊的容量與所述磁盤中存儲(chǔ)塊的總量相乘,計(jì)算結(jié)果作為磁盤的空間總量;將所述存儲(chǔ)塊的容量與所述磁盤中存儲(chǔ)塊的空閑量相乘,計(jì)算結(jié)果作為磁盤的空間剩余量。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,還包括:將磁盤的空間總量減去磁盤的空間剩余量,計(jì)算結(jié)果磁盤的空間占用量。
5.根據(jù)其權(quán)利要求1至4任`一所述的方法,其特征在于,獲得磁盤的容量信息之后,還包括:將磁盤的容量信息返回給df命令。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,還包括:存儲(chǔ)節(jié)點(diǎn)調(diào)用df命令以獲取每個(gè)磁盤的容量信息,并將所有磁盤的容量信息相加的和作為該存儲(chǔ)節(jié)點(diǎn)的容量信息。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,類DF用于實(shí)現(xiàn)調(diào)用df命令,所述存儲(chǔ)節(jié)點(diǎn)通過執(zhí)行df命令以獲取每個(gè)磁盤的空間占用量,包括:存儲(chǔ)節(jié)點(diǎn)通過調(diào)用FSDataset類的getDfsUsed方法,最終調(diào)用FSVolume類的getDfsUsed 方法;所述FSVolume類的getDfsUsed方法通過類DF實(shí)現(xiàn)調(diào)用df命令,以獲取磁盤的容量信息。
8.根據(jù)權(quán)利要求6所述的方法,其特征在于,還包括:存儲(chǔ)節(jié)點(diǎn)周期性的調(diào)用df命令以獲取對應(yīng)的容量信息,并將所述容量信息周期性的傳輸給主節(jié)點(diǎn)。
9.根據(jù)權(quán)利要求6所述的方法,其特征在于,還包括:存儲(chǔ)節(jié)點(diǎn)以各個(gè)磁盤的容量信息為基準(zhǔn),在對應(yīng)的磁盤中分配并保存數(shù)據(jù)。
10.一種容量獲取系統(tǒng),其特征在于,包括:發(fā)送請求模塊,用于向磁盤的文件系統(tǒng)發(fā)送調(diào)用磁盤元數(shù)據(jù)的請求;接收元數(shù)據(jù)模塊,用于接收返回的磁盤元數(shù)據(jù),所述磁盤元數(shù)據(jù)包括磁盤中存儲(chǔ)塊的總量和存儲(chǔ)塊的空閑量;計(jì)算容量模塊,用于通過對所述磁盤中存儲(chǔ)塊的總量和存儲(chǔ)塊的空閑量的計(jì)算,獲得磁盤的容量信息。
11.根據(jù)權(quán)利要求10所述的系統(tǒng),其特征在于,所述容量信息包括空間總量、空間剩余量和空間占用量。
12.根據(jù)權(quán)利要求11所述的系統(tǒng),其特征在于,每個(gè)存儲(chǔ)塊的容量是固定的,所述計(jì)算容量模塊,包括:計(jì)算空間總量子模塊,用于將所述存儲(chǔ)塊的容量與所述磁盤中存儲(chǔ)塊的總量相乘,計(jì)算結(jié)果作為磁盤的空間總量;計(jì)算空間剩余量子模塊,用于將所述存儲(chǔ)塊的容量與所述磁盤中存儲(chǔ)塊的空閑量相乘,計(jì)算結(jié)果作為磁盤的空間剩余量。
13.根據(jù)權(quán)利要求12所述的系統(tǒng),其特征在于,所述計(jì)算容量模塊,還包括:計(jì)算空間占用量子模塊,用于將磁盤的空間總量減去磁盤的空間剩余量,計(jì)算結(jié)果磁盤的空間占用量。
14.根據(jù)權(quán)利要求10至12任一所述的系統(tǒng),其特征在于,還包括:容量返回模塊,用于將磁盤的容量信息返回給df命令。
15.根據(jù)權(quán)利要求14所述的系統(tǒng),其特征在于,還包括:獲取容量模塊,用于存儲(chǔ)節(jié)點(diǎn)調(diào)用df命令以獲取每個(gè)磁盤的容量信息,并將所有磁盤的容量信息相加的和作為該存儲(chǔ)節(jié)點(diǎn)的容量信息。
16.根據(jù)權(quán)利要求15所述的系統(tǒng),其特征在于,類DF用于實(shí)現(xiàn)調(diào)用df命令,所述獲取容量模塊包括:調(diào)用方法子模塊,用于存儲(chǔ)節(jié)點(diǎn)通過調(diào)用FSDataset類的getDfsUsed方法,最終調(diào)用FSVolume 類的 getDfsUsed 方法;調(diào)用命令子模塊,用于所述FSVolume類的getDfsUsed方法通過類DF實(shí)現(xiàn)調(diào)用df命令,以獲取磁盤的容量信息。
17.根據(jù)權(quán)利要求15所述的系統(tǒng),其特征在于,還包括:傳輸模塊,用于存儲(chǔ)節(jié)點(diǎn)周期性的調(diào)用df命令以獲取對應(yīng)的容量信息,并將所述容量信息周期性的傳輸給主節(jié)點(diǎn)。
18.根據(jù)權(quán)利要求15所述的系統(tǒng),其特征在于,還包括:分配數(shù)據(jù)模塊,用于存儲(chǔ)節(jié)點(diǎn)以各個(gè)磁盤的容量信息為基準(zhǔn),在對應(yīng)的磁盤中分配并保存數(shù)據(jù)。
【文檔編號】G06F3/06GK103678563SQ201310659397
【公開日】2014年3月26日 申請日期:2011年12月27日 優(yōu)先權(quán)日:2011年12月27日
【發(fā)明者】趙健博, 洪亮 申請人:北京奇虎科技有限公司, 奇智軟件(北京)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會(huì)獲得點(diǎn)贊!
1