一種針對海量非結構化數據的資源管理方法【
技術領域:
】[0001]本發明涉及分布式數據庫HBase以及分布式文件系統HDFS領域,特別涉及一種針對海量非結構化數據的資源管理方法。【
背景技術:
】[0002]HDFS的全稱為HadoopDistributedFilesystem,是Hadoop的旗艦級文件系統。其思想來源于Google文件系統(GoogleFileSystem,GFS),并適合一次寫入、多次讀取的訪問模式,滿足城市多源數據應用場景。它是一個適合存儲大文件的分布式文件系統,可以作為Hadoop和Spark的數據源。[0003]HBase是基于谷歌Bigtable開發的開源分布式數據庫,它不是傳統的關系型數據庫,其最初的宗旨就是解決傳統關系型數據庫在處理大規模海量數據時理論以及實踐上的不足問題。由于HBase的底層數據是存儲在HDFS上,故HBase同樣具有高容錯性。HBase的主要特點有:[0004]I)高可擴展性。在存儲容量上,HBase實現了線性水平擴展。當數據量達到一定閥值時,HBase將對數據進行水平分割,并將分割塊分配到集群的上千個服務器中。當數據的規模到達集群的極限時,HBase還支持擴大集群數量,實現不停機動態無縫擴容。[0005]2)高性能。HBase的設計初衷就是要滿足用戶高并發的海量數據查詢。它有兩點機制來保障高效的并發查詢。一是數據分割。HBase將數據分割到集群的每個節點,當用戶查詢數據時,每個節點可同時返回相應的數據塊,實現并發查詢。二是緩存機制。HBase設計了高效的緩存機制,特別設置了MemStore單元作為數據讀寫時的Cache,能夠顯著地提高數據訪問的命中率。[0006]3)高可用性。HBase的底層是利用HDFS來存儲數據的,HDFS本身即具有高容錯性。當某臺機器數據丟失時,HBase可通過HDFS找到這些數據的備份,并重新復制拷貝,更新系統記錄表。這樣保證了HBase系統的高可用性。[0007]而隨著目前城市數據量日益龐大,非結構化數據種類越來越多,如何在分布式系統上對海量非結構化數據進行存儲和管理正成為研究的方向。【
發明內容】[0008]本發明針對城市非結構化數據日益龐大,處理日益費時的技術問題,提出一種針對海量非結構化數據的資源管理方法,該方法能夠對海量非結構化數據進行有效的組織和管理。[0009]—種針對海量非結構化數據的資源管理方法,包括以下步驟:[0010]步驟a:根據非結構化數據文件的大小確定其存儲方式,當所述非結構化數據文件大小超過給定閾值時,將其存入HDFS文件系統,并在HBase上創建的數據表中存儲其基本信息及在HDFS上的路徑;當所述非結構化數據文件大小小于等于給定閾值時,將所述文件序列化并直接存儲在HBase數據庫中;[0011]步驟b:根據所述非結構化數據構建元數據表和數據索引表,并利用所述元數據表構建元數據索引表;[0012]步驟c:當查詢元數據時,根據要查找的元數據的主題或標簽對所述元數據索引表進行查找,以獲得對應的數據表;以及[0013]步驟d:當查詢非結構化數據記錄時,根據所述數據索引表的命名規則找到數據表對應的數據索引表,之后在所述數據索引表中查找所述非結構化數據記錄的語義標簽,獲得所要查找的數據記錄的主鍵,然后根據所述主鍵在所述數據表中快速定位數據。[0014]根據本發明的針對海量非結構化數據的資源管理方法,對于海量非結構化數據,可以進行有效組織和管理,能夠進行快速、高效地查詢,大大提高了數據處理效率。【附圖說明】[0015]圖1是根據本發明方法的數據處理流程圖。[0016]圖2是非結構化數據統一存儲示例圖。[0017]圖3是數據庫中數據表的層次結構圖。[0018]圖4為數據資源查詢示意圖。【具體實施方式】[0019]以下結合附圖對本發明進行詳細說明。以下實施例并不是對本發明的限制。在不背離發明構思的精神和范圍下,本領域技術人員能夠想到的變化和優點都被包括在本發明中。[0020]圖1是根據本發明方法的數據處理流程圖,包含數據的存儲過程,元數據表、數據索弓I表及元數據索弓I創建過程,數據請求處理過程三部分。[0021]下面先對數據的存儲過程進行詳細說明。存儲過程包括將在HBase上創建數據表以及將原始數據按要求存儲在HBase和HDFS上。如圖1所示,具體如下:[0022]步驟al:首先根據要上傳的數據,在HBase上創建對應數據表。創建的數據表的內容主要是非結構化數據的一些基本信息,如表名、文件大小、訪問方式、內容、語義標簽等。[0023]步驟a2:接著用戶選擇所要上傳的文件,調用上傳接口進行文件傳輸。[0024]步驟a3:判斷數據文件的大小。[0025]步驟a4:若文件大小超過IMB,就將其存入HDFS,并在HBase的數據表中存儲其基本信息及在HDFS上的路徑,否則進入步驟a5。[0026]步驟a5:將文件序列化并直接存儲在HBase數據庫中。[0027]HBase是一個具有高可靠性,高性能,列存儲,可擴展,實時讀寫特性的分布式數據庫系統,能夠滿足城市非結構化數據對存儲的一般需求。但是,由于HBase自身的設計,它在直接存儲大數據對象的時候性能會有問題。例如,當HBase的reg1n增長到一定大小的時候(默認256MB)會自動進行拆分操作(split),這時會阻塞所有對當前分區的寫操作。此外,對同一個分區的大量寫入會導致多次的刷寫操作(flush),從而頻繁觸發合并操作(Compact1n),占用集群的I/O。[0028]對于上述問題,一個解決方案是將非結構化數據對象存放在HDFS上,然后將文件路徑寫入HBase的特定列族,當要訪問該非結構化數據對象時,就通過讀取HDFS上的對應文件。雖然這種方案能夠解決HBase存儲大數據對象所引起的性能問題,但是如果不對所需存儲的非結構化數據對象大小進行判斷,一律采用這種方法,會導致HDFS上的小文件過多。而過多的小文件會影響到HDFS的性能。因此合理的做法是根據非結構化數據對象容量的大小來選擇它的存儲方式。正是基于上述的考慮,本發明以IMB為這兩種方式的分割線。當非結構化數據對象小于等于IMB的時候,會將其序列化為Byte數組后存入HBase的特定列族。反之,則會以文件的形式將其存放在HDFS上,然后將文件的路徑存放在HBase的特定列族。同時HBase會專門設置一列用來標識數據的存儲方式。[0029]圖2是非結構化數據統一存儲示例圖。例如有兩個非結構化數據對象需要存儲,其中a是txt格式的文件,b是png格式的圖片。a的大小較小,為3KB,可以直接將文件內容轉化為字節數組存放在HBase的一個列當中。而b的大小較大,為5MB,則可以將其存放在HDFS上,將路徑寫入HBase當中。同時通過一個標識列來判斷數據對象的存儲方式。[°03°]如圖2所示,HBase通過一個列族(ColumnFamily)來存放非結構化數據對象,這個列族(ColumnFamily)包含五個列:Name列,Size列,Format列,Access列,Content列和Tags列,分別表示非結構化數據對象所對應的文件名,大小,文件類型,存儲方式,內容以及語義標簽。當Access設置為直接存儲在hbase時,則Content的內容為非結構化數據的Byte數組。否則,設為非結構化數據在HDFS上的存放路徑。[0031]數據存儲完成后進行數據索引表、元數據表以及元數據索引表的構建,下面結合圖1和圖3進行說明。[0032]首先,構建數據索引表和元數據表(步驟bl)。[0033]對所有非結構化數據都在HBase數據庫上創建數據索引表,數據索引表以數據信息中的語義標簽字段為行鍵,內容為與所述語義標簽相關的所有非結構化數據記錄的主鍵。多個主鍵之間以“#”隔開,形式為〈“語義標簽”,“主鍵1#主鍵2#主鍵3#...”>。語義標簽字段是對每一條非結構化數據記錄的描述,非結構化數據的主鍵即文件名(filename)。[0034]并且,對所有非結構化數據都在HBase數據庫上創建元數據表,所述元數據表中為非結構化數當前第1頁1 2