周晴紅
(蘇州健雄職業技術學院,江蘇 太倉 215400)
海量數據存儲平臺的設計與運行維護難點在于:(1)數據量過大,數據應用過程中任何情況都有可能發生;(2)對構成平臺的軟硬件的要求極高,導致系統資源占用率高,稍有不慎便可能導致平臺崩塌;(3)對處理方法和技巧的要求同樣較高。考慮到上述因素,海量數據存儲平臺必須具備如下功能:其一,對多種類型的數據進行全過程正常處理,不能發生“前面正常處理,進展至某個環節突然無法繼續處理,造成程序終止運行”的情況。其二,需要選用優秀的數據庫工具、編寫優良的程序代碼,能夠對海量數據進行分區操作。若要支持上述功能的實現,必須搭配性能良好的硬件。在此基礎上,還應建立廣泛的索引功能、緩存機制,保證虛擬內存強大以及能夠對數據進行分批處理。
1.1.1 Hadoop的特點
Hadoop全稱Apache Hadoop,是一種由Apache基金會開發的分布式系統基礎架構[1]。這種架構模式的最大特點在于:使用者無須掌握架構底層的搭建細節,只需根據應用層的功能指引便可以開展分布式程序的開發工作。在此基礎上,通過充分利用集群的優勢,實現對數據信息的高速運轉和存儲。基于Hadoop進行程序開發必須建立在對應的分布式文件系統(Hadoop Distributed File System,HDFS)之上。這種分布式文件系統的容錯性極高,可以搭載在價格低廉的硬件之上。不僅如此,HDFS系統還能夠提供較高的數據吞吐量,用以支持訪問應用程序。綜合而言,HDFS系統非常適合具有超大數據集的應用程序,是設計海量數據存儲平臺的最佳框架之一。現階段,HDFS系統已經在很大程度上放寬了對可移植操作系統接口(Portable Operating System Interface of UNIX,POSIX)的要求,并可以通過“數據流”的形式對文件系統中的數據進行訪問[2]。
1.1.2 Hadoop開發的便利性
Hadoop框架最核心的設計部分除了HDFS系統之外,還包含MapReduce。MapReduce是一種編程模型,主要用于規模超過1TB的大規模數據集的并行運算,以“映射”和“規約”為主要概念。這種模型的便利性在于編程人員在無須掌握分布式并行編程規則的情況下,只需按照指引,便可以將自己編寫的程序在分布式系統上運行,主要實現方法為:在當前使用的編程軟件中指定一個Map映射函數,之后將一組鍵值按照映射規律,轉換成一組新的鍵值對。在此基礎上,可以指定并發的Reduce規約函數,最終保證所有映射的鍵值對都能夠共享相同的鍵組。基于HDFS系統以及MapReduce編程模型設計的海量數據存儲平臺中,前者會為海量數據提供優質存儲功能,后者主要為海量數據提供計算功能。
1.2.1 Hadoop的優點
(1)Hadoop能夠對海量數據進行分布式處理,過程可靠性和處理效率均極高。此外,Hadoop還可以通過可伸縮的方式實現對數據的處理。
(2)Hadoop的可靠性體現在:“數據計算或存儲過程會受多種原因的影響而失敗”均在系統的“假設”之內。基于這種考量,Hadoop會自動開展對多個工作數據副本的維護作業,在真正出現“數據操作失敗”的情況下,系統依然能夠確保對所有失敗的數據節點進行重新分布處理。
(3)Hadoop的高效性體現在:系統整體能夠進行并行工作,可大幅度加快對數據的處理速度。Hadoop的可伸縮性在于,最小能夠處理KB規模的數據,最高能夠處理PB量級的數據。有研究顯示,Hadoop面向的對象是“社區服務”,即能夠被任何人使用,成本較低。用戶可根據自己的想法,選擇Java(Hadoop自帶)、C++等編程語言進行軟件開發[3]。
1.2.2 Hadoop的核心架構
HDFS系統用于存儲Hadoop集群中所有存儲節點對應的文件。HDFS的上一層是上文提到的MapReduce引擎,主要由JobTrackers和TaskTrackers組成。HDFS類似于傳統的分級文件系統,支持文件的創建、刪除、移動、重命名等,操作過程幾乎不具備任何難度。但HDFS的架構主要基于一組特定的節點完成構建。這種特性取決于HDFS本身的特點,優點在于只有一個NameNode節點,為HDFS的內部單元提供原數據相關服務,并為HDFS系統提供存儲模塊。缺點在于:由于NameNode的數量只有一個,一旦出現“單點失敗”情況,便會導致整個HDFS系統的運行難以為繼。存儲在HDPS中的文件一般會被分成若干個模塊。這些模塊經過復制之后,會進入多個計算機的DataNode。這種架構與人們熟知的RAID架構存在極大的差異,主要特點為:模塊一般設置為64 MB,具體的模塊復制數量根據客戶機創建文件時的具體需求而定。理論上,Name Node能夠控制所有文件的操作,且HDFS內部的所有通信都是基于標準的TCP/IP協議而決定。
基于Hadoop進行海量數據存儲平臺設計時,首先需要考慮平臺的數據來源、針對相關數據進行存儲時設計的時間、空間范圍查詢等因素[4]。以交通部門為例,若要針對某一種交通工具的運行線路、運行時間、乘客搭載量等數據進行收集與分析時,應該確保數據收集的穩定性以及準確性,數據來源的偏倚控制必須到位。具體的“數據來源的偏倚控制”過程如下。
(1)如圖1所示,在城市某條公共交通沿線存在A,B,C 3路公共汽車,那么針對A路信息進行收集時,由于A,B,C 3路公共汽車在同一路段有數個停靠站以及經過的線路完全重合,故有可能出現下列情況:部分城市居民出行的線路區間恰好在3路公共汽車行駛、停靠重合的區間內,對這些居民而言,每次出行并不會定向選擇3路公共汽車中具體的哪一路,而是會根據“哪一趟車先來”“當前車輛是否擁擠”等原因決定是否乘坐這一輛汽車。

圖1 設計流程
(2)對上述情況下的數據信息進行收集分析時,應該設置一種特殊的算法,可行性方法為:針對這段重合線路區間,從始發站開始(注:此處提到的始發站是指“3路公共汽車停靠站重合區間的第一站,不是每一條線路的始發站”),到終末站(與上述“始發站”相同)之間所有上下車的乘客數量進行集中統計,之后編程程序處理指令“÷3”,得出的平均結果便是每一條公共汽車線路在此段區間內得到偏倚控制后的數據信息。
2.2.1 基于Hadoop的數據信息存儲管理系統整體運行結構
基于上文所述的考量要素,得到的Hadoop數據信息存儲管理系統的整體運行結構為:(1)存儲業務處理層是海量數據存儲平臺的核心層。(2)該核心層共包含5個重要功能模塊,分別為元數據管理模塊、Hive數據加載模塊、存儲映射模塊、查詢處理模塊、節點存儲管理模塊。其中,新建及刪除數據全部集中在存儲映射模塊,數據查詢對應的數據全部集中在查詢處理模塊。
HDFS目錄的具體結構如下:
-/table-000
-/metadata
-/bucket-000
-/region-000
-/baock-000
-/region-001
-/bucket-001
-/region-000
-/region-001
-/table-001
數據存儲業務處理層的主要功能在于可以將收集而來的原始數據進行定向轉化,并根據預定的存儲結構附加到數據庫之中。經過優化處理之后,數據會在存儲模塊的作用下,周期性地重新組織成存儲結構。在此基礎上,查詢處理模塊會根據用戶的需求,靈活地提供歷史數據查詢接口,以根據用戶的需求,實現對歷史數據的精確、高效率查詢。
2.2.2 基于Hadoop的數據存儲映射模塊構建
根據上文所述可知,存儲映射功能是Hadoop下海量數據存儲的核心模塊。主要建構思路為:根據數據信息自動采集系統收集而來的數據在時間、空間層面上的差異,進行分層存儲。此外,為了提升數據訪問調用的加載效率,需要進行快速文件布局、優質壓縮處理,實現海量數據的分布式存儲。
(1)數據存儲模型原理。
該模塊的主要功能是對數據對應的時間和空間信息進行精確定位。為了達到這一目的,需要設計一種新的數據存儲模型,并能夠將數據分為兩個部分:核心數據和次要數據。基于Hadoop的數據信息定義結構的分項具體信息排布順序如下:
①數據id,實際上是對所收集到的信息進行命名。要注意,具體命名完全由操作者本人決定。其中的道理類似于:人們在日常使用電腦工作時,可能會新建一個工作文檔。這個文檔的名字在建立的當下便可以立刻給出,也可以保持系統常規命名不變(如一個文檔剛剛建立時,當前給出的系統名字就叫“新建-文本文檔”),在日后的任何時刻自行決定更改后的名字。這里需要區分一個概念,即有些人的工作習慣非常好,在對文件(數據信息)進行命名的過程中,為了方便文件排放和后續查詢具有更高的效率,會在總文件名上加上一些表示時間和空間的數據。比如按照月度排布的文件命名為“姓名+XX月工作任務表”。在此基礎上,如果有必要區分工作人員所在的分公司,則需要進一步在文件名的前方加上“XXX分公司”。但這種人為的命名只是為了查詢和統計方便,對系統的數據錄入、存放、調取等均不會有任何便利性。
②在數據存儲功能模塊下,緊隨的第2個信息記錄數據為空間信息,英文簡稱為“loc”。
③第3個信息記錄數據為時間信息,對應的英文單詞為“time”。
上述3項數據即為海量數據存儲功能中的核心統計數據,表明數據的名稱、被記錄在案時的空間和時間信息。在此基礎上,還需根據統計要素額外設計一些具體但優先級相對落后的統計項。
在新冠疫情肆虐的當下,確保司機體溫處于正常狀態是一個重要的考量因素,故在3個核心數據之外,第4項可以設置成司機的姓名,第5項為司機對應車輛的車牌號,第6項為司機的體溫。按照上述順序,一輛公共汽車對應的數據信息每天收集一次并在海量數據庫中存放。如果需要調用信息時,可以在數據管理平臺中搜索關鍵詞,按照當前關鍵詞對應的順序優先級完成信息的排布。比如規定體溫在37℃以下為正常體溫,達到38℃便意味著存在感冒發燒、患肺炎的可能性。在數據查詢的過程中,可以將溫度信息優先顯示,并篩選出某一日體溫在37℃以上的司機信息,即可進行定向追蹤,可大幅度提高信息調取的效率。
(2)基于數據信息存儲層次的精確索引設計。
由于所收集的數據信息量極大,很多時候圍繞某個關鍵字進行信息檢索、篩選時,可能需要較多的時間。為了提高處理和搜索的效率,需進一步劃分海量數據存儲平臺的數據信息存儲層次。
這種存儲思路與上文所述的存儲思路的區別在于:上文所述的存儲思路沒有脫離“數據信息整體存儲”的框架,即獲取一個數據信息之后,圍繞該信息中的多個可能存在的子信息設定排布順序。完成整理之后儲存在海量數據平臺之中。在此種情況下,進行數據查閱及調取工作時,系統實際上無法對信息中的某個子信息進行針對性的查詢,而是需要按照一定的順序,對所有信息進行全面檢索,必定費時費力。
劃分存儲層次之后,可圍繞位置(空間)、時間信息進行分區存儲。這種存儲分區基于Hadoop下InputFormar接口下的getSplits方法加以實現。將原本粗大的數據集基于空間、時間特性分為多個較小規模的數據集之后,每個數據集都可以進行獨立的查詢、加載、優化。基于此,實際解決的問題為:海量數據存儲平臺的數據寫入和存儲優化時間較長的問題已經不復存在;針對小規模數據集進行掃描時,定位的精準程度也會隨之提升。
綜上所述,基于Hadoop的海量數據存儲平臺具備的最大優勢在于數據信息的存儲和讀取效率會基于數據信息的存儲區間、存儲層級方面的差異而大幅度提升。此外,在進行設計時,無需考慮Hadoop框架的底層結構,只需根據應用層的功能指引便可以實現平臺的開發,最終效果一般可以達到預期。