周晴紅
(蘇州健雄職業(yè)技術(shù)學(xué)院,江蘇 太倉 215400)
海量數(shù)據(jù)存儲(chǔ)平臺的設(shè)計(jì)與運(yùn)行維護(hù)難點(diǎn)在于:(1)數(shù)據(jù)量過大,數(shù)據(jù)應(yīng)用過程中任何情況都有可能發(fā)生;(2)對構(gòu)成平臺的軟硬件的要求極高,導(dǎo)致系統(tǒng)資源占用率高,稍有不慎便可能導(dǎo)致平臺崩塌;(3)對處理方法和技巧的要求同樣較高??紤]到上述因素,海量數(shù)據(jù)存儲(chǔ)平臺必須具備如下功能:其一,對多種類型的數(shù)據(jù)進(jìn)行全過程正常處理,不能發(fā)生“前面正常處理,進(jìn)展至某個(gè)環(huán)節(jié)突然無法繼續(xù)處理,造成程序終止運(yùn)行”的情況。其二,需要選用優(yōu)秀的數(shù)據(jù)庫工具、編寫優(yōu)良的程序代碼,能夠?qū)A繑?shù)據(jù)進(jìn)行分區(qū)操作。若要支持上述功能的實(shí)現(xiàn),必須搭配性能良好的硬件。在此基礎(chǔ)上,還應(yīng)建立廣泛的索引功能、緩存機(jī)制,保證虛擬內(nèi)存強(qiáng)大以及能夠?qū)?shù)據(jù)進(jìn)行分批處理。
1.1.1 Hadoop的特點(diǎn)
Hadoop全稱Apache Hadoop,是一種由Apache基金會(huì)開發(fā)的分布式系統(tǒng)基礎(chǔ)架構(gòu)[1]。這種架構(gòu)模式的最大特點(diǎn)在于:使用者無須掌握架構(gòu)底層的搭建細(xì)節(jié),只需根據(jù)應(yīng)用層的功能指引便可以開展分布式程序的開發(fā)工作。在此基礎(chǔ)上,通過充分利用集群的優(yōu)勢,實(shí)現(xiàn)對數(shù)據(jù)信息的高速運(yùn)轉(zhuǎn)和存儲(chǔ)?;贖adoop進(jìn)行程序開發(fā)必須建立在對應(yīng)的分布式文件系統(tǒng)(Hadoop Distributed File System,HDFS)之上。這種分布式文件系統(tǒng)的容錯(cuò)性極高,可以搭載在價(jià)格低廉的硬件之上。不僅如此,HDFS系統(tǒng)還能夠提供較高的數(shù)據(jù)吞吐量,用以支持訪問應(yīng)用程序。綜合而言,HDFS系統(tǒng)非常適合具有超大數(shù)據(jù)集的應(yīng)用程序,是設(shè)計(jì)海量數(shù)據(jù)存儲(chǔ)平臺的最佳框架之一?,F(xiàn)階段,HDFS系統(tǒng)已經(jīng)在很大程度上放寬了對可移植操作系統(tǒng)接口(Portable Operating System Interface of UNIX,POSIX)的要求,并可以通過“數(shù)據(jù)流”的形式對文件系統(tǒng)中的數(shù)據(jù)進(jìn)行訪問[2]。
1.1.2 Hadoop開發(fā)的便利性
Hadoop框架最核心的設(shè)計(jì)部分除了HDFS系統(tǒng)之外,還包含MapReduce。MapReduce是一種編程模型,主要用于規(guī)模超過1TB的大規(guī)模數(shù)據(jù)集的并行運(yùn)算,以“映射”和“規(guī)約”為主要概念。這種模型的便利性在于編程人員在無須掌握分布式并行編程規(guī)則的情況下,只需按照指引,便可以將自己編寫的程序在分布式系統(tǒng)上運(yùn)行,主要實(shí)現(xiàn)方法為:在當(dāng)前使用的編程軟件中指定一個(gè)Map映射函數(shù),之后將一組鍵值按照映射規(guī)律,轉(zhuǎn)換成一組新的鍵值對。在此基礎(chǔ)上,可以指定并發(fā)的Reduce規(guī)約函數(shù),最終保證所有映射的鍵值對都能夠共享相同的鍵組?;贖DFS系統(tǒng)以及MapReduce編程模型設(shè)計(jì)的海量數(shù)據(jù)存儲(chǔ)平臺中,前者會(huì)為海量數(shù)據(jù)提供優(yōu)質(zhì)存儲(chǔ)功能,后者主要為海量數(shù)據(jù)提供計(jì)算功能。
1.2.1 Hadoop的優(yōu)點(diǎn)
(1)Hadoop能夠?qū)A繑?shù)據(jù)進(jìn)行分布式處理,過程可靠性和處理效率均極高。此外,Hadoop還可以通過可伸縮的方式實(shí)現(xiàn)對數(shù)據(jù)的處理。
(2)Hadoop的可靠性體現(xiàn)在:“數(shù)據(jù)計(jì)算或存儲(chǔ)過程會(huì)受多種原因的影響而失敗”均在系統(tǒng)的“假設(shè)”之內(nèi)?;谶@種考量,Hadoop會(huì)自動(dòng)開展對多個(gè)工作數(shù)據(jù)副本的維護(hù)作業(yè),在真正出現(xiàn)“數(shù)據(jù)操作失敗”的情況下,系統(tǒng)依然能夠確保對所有失敗的數(shù)據(jù)節(jié)點(diǎn)進(jìn)行重新分布處理。
(3)Hadoop的高效性體現(xiàn)在:系統(tǒng)整體能夠進(jìn)行并行工作,可大幅度加快對數(shù)據(jù)的處理速度。Hadoop的可伸縮性在于,最小能夠處理KB規(guī)模的數(shù)據(jù),最高能夠處理PB量級的數(shù)據(jù)。有研究顯示,Hadoop面向的對象是“社區(qū)服務(wù)”,即能夠被任何人使用,成本較低。用戶可根據(jù)自己的想法,選擇Java(Hadoop自帶)、C++等編程語言進(jìn)行軟件開發(fā)[3]。
1.2.2 Hadoop的核心架構(gòu)
HDFS系統(tǒng)用于存儲(chǔ)Hadoop集群中所有存儲(chǔ)節(jié)點(diǎn)對應(yīng)的文件。HDFS的上一層是上文提到的MapReduce引擎,主要由JobTrackers和TaskTrackers組成。HDFS類似于傳統(tǒng)的分級文件系統(tǒng),支持文件的創(chuàng)建、刪除、移動(dòng)、重命名等,操作過程幾乎不具備任何難度。但HDFS的架構(gòu)主要基于一組特定的節(jié)點(diǎn)完成構(gòu)建。這種特性取決于HDFS本身的特點(diǎn),優(yōu)點(diǎn)在于只有一個(gè)NameNode節(jié)點(diǎn),為HDFS的內(nèi)部單元提供原數(shù)據(jù)相關(guān)服務(wù),并為HDFS系統(tǒng)提供存儲(chǔ)模塊。缺點(diǎn)在于:由于NameNode的數(shù)量只有一個(gè),一旦出現(xiàn)“單點(diǎn)失敗”情況,便會(huì)導(dǎo)致整個(gè)HDFS系統(tǒng)的運(yùn)行難以為繼。存儲(chǔ)在HDPS中的文件一般會(huì)被分成若干個(gè)模塊。這些模塊經(jīng)過復(fù)制之后,會(huì)進(jìn)入多個(gè)計(jì)算機(jī)的DataNode。這種架構(gòu)與人們熟知的RAID架構(gòu)存在極大的差異,主要特點(diǎn)為:模塊一般設(shè)置為64 MB,具體的模塊復(fù)制數(shù)量根據(jù)客戶機(jī)創(chuàng)建文件時(shí)的具體需求而定。理論上,Name Node能夠控制所有文件的操作,且HDFS內(nèi)部的所有通信都是基于標(biāo)準(zhǔn)的TCP/IP協(xié)議而決定。
基于Hadoop進(jìn)行海量數(shù)據(jù)存儲(chǔ)平臺設(shè)計(jì)時(shí),首先需要考慮平臺的數(shù)據(jù)來源、針對相關(guān)數(shù)據(jù)進(jìn)行存儲(chǔ)時(shí)設(shè)計(jì)的時(shí)間、空間范圍查詢等因素[4]。以交通部門為例,若要針對某一種交通工具的運(yùn)行線路、運(yùn)行時(shí)間、乘客搭載量等數(shù)據(jù)進(jìn)行收集與分析時(shí),應(yīng)該確保數(shù)據(jù)收集的穩(wěn)定性以及準(zhǔn)確性,數(shù)據(jù)來源的偏倚控制必須到位。具體的“數(shù)據(jù)來源的偏倚控制”過程如下。
(1)如圖1所示,在城市某條公共交通沿線存在A,B,C 3路公共汽車,那么針對A路信息進(jìn)行收集時(shí),由于A,B,C 3路公共汽車在同一路段有數(shù)個(gè)??空疽约敖?jīng)過的線路完全重合,故有可能出現(xiàn)下列情況:部分城市居民出行的線路區(qū)間恰好在3路公共汽車行駛、??恐睾系膮^(qū)間內(nèi),對這些居民而言,每次出行并不會(huì)定向選擇3路公共汽車中具體的哪一路,而是會(huì)根據(jù)“哪一趟車先來”“當(dāng)前車輛是否擁擠”等原因決定是否乘坐這一輛汽車。
圖1 設(shè)計(jì)流程
(2)對上述情況下的數(shù)據(jù)信息進(jìn)行收集分析時(shí),應(yīng)該設(shè)置一種特殊的算法,可行性方法為:針對這段重合線路區(qū)間,從始發(fā)站開始(注:此處提到的始發(fā)站是指“3路公共汽車??空局睾蠀^(qū)間的第一站,不是每一條線路的始發(fā)站”),到終末站(與上述“始發(fā)站”相同)之間所有上下車的乘客數(shù)量進(jìn)行集中統(tǒng)計(jì),之后編程程序處理指令“÷3”,得出的平均結(jié)果便是每一條公共汽車線路在此段區(qū)間內(nèi)得到偏倚控制后的數(shù)據(jù)信息。
2.2.1 基于Hadoop的數(shù)據(jù)信息存儲(chǔ)管理系統(tǒng)整體運(yùn)行結(jié)構(gòu)
基于上文所述的考量要素,得到的Hadoop數(shù)據(jù)信息存儲(chǔ)管理系統(tǒng)的整體運(yùn)行結(jié)構(gòu)為:(1)存儲(chǔ)業(yè)務(wù)處理層是海量數(shù)據(jù)存儲(chǔ)平臺的核心層。(2)該核心層共包含5個(gè)重要功能模塊,分別為元數(shù)據(jù)管理模塊、Hive數(shù)據(jù)加載模塊、存儲(chǔ)映射模塊、查詢處理模塊、節(jié)點(diǎn)存儲(chǔ)管理模塊。其中,新建及刪除數(shù)據(jù)全部集中在存儲(chǔ)映射模塊,數(shù)據(jù)查詢對應(yīng)的數(shù)據(jù)全部集中在查詢處理模塊。
HDFS目錄的具體結(jié)構(gòu)如下:
-/table-000
-/metadata
-/bucket-000
-/region-000
-/baock-000
-/region-001
-/bucket-001
-/region-000
-/region-001
-/table-001
數(shù)據(jù)存儲(chǔ)業(yè)務(wù)處理層的主要功能在于可以將收集而來的原始數(shù)據(jù)進(jìn)行定向轉(zhuǎn)化,并根據(jù)預(yù)定的存儲(chǔ)結(jié)構(gòu)附加到數(shù)據(jù)庫之中。經(jīng)過優(yōu)化處理之后,數(shù)據(jù)會(huì)在存儲(chǔ)模塊的作用下,周期性地重新組織成存儲(chǔ)結(jié)構(gòu)。在此基礎(chǔ)上,查詢處理模塊會(huì)根據(jù)用戶的需求,靈活地提供歷史數(shù)據(jù)查詢接口,以根據(jù)用戶的需求,實(shí)現(xiàn)對歷史數(shù)據(jù)的精確、高效率查詢。
2.2.2 基于Hadoop的數(shù)據(jù)存儲(chǔ)映射模塊構(gòu)建
根據(jù)上文所述可知,存儲(chǔ)映射功能是Hadoop下海量數(shù)據(jù)存儲(chǔ)的核心模塊。主要建構(gòu)思路為:根據(jù)數(shù)據(jù)信息自動(dòng)采集系統(tǒng)收集而來的數(shù)據(jù)在時(shí)間、空間層面上的差異,進(jìn)行分層存儲(chǔ)。此外,為了提升數(shù)據(jù)訪問調(diào)用的加載效率,需要進(jìn)行快速文件布局、優(yōu)質(zhì)壓縮處理,實(shí)現(xiàn)海量數(shù)據(jù)的分布式存儲(chǔ)。
(1)數(shù)據(jù)存儲(chǔ)模型原理。
該模塊的主要功能是對數(shù)據(jù)對應(yīng)的時(shí)間和空間信息進(jìn)行精確定位。為了達(dá)到這一目的,需要設(shè)計(jì)一種新的數(shù)據(jù)存儲(chǔ)模型,并能夠?qū)?shù)據(jù)分為兩個(gè)部分:核心數(shù)據(jù)和次要數(shù)據(jù)?;贖adoop的數(shù)據(jù)信息定義結(jié)構(gòu)的分項(xiàng)具體信息排布順序如下:
①數(shù)據(jù)id,實(shí)際上是對所收集到的信息進(jìn)行命名。要注意,具體命名完全由操作者本人決定。其中的道理類似于:人們在日常使用電腦工作時(shí),可能會(huì)新建一個(gè)工作文檔。這個(gè)文檔的名字在建立的當(dāng)下便可以立刻給出,也可以保持系統(tǒng)常規(guī)命名不變(如一個(gè)文檔剛剛建立時(shí),當(dāng)前給出的系統(tǒng)名字就叫“新建-文本文檔”),在日后的任何時(shí)刻自行決定更改后的名字。這里需要區(qū)分一個(gè)概念,即有些人的工作習(xí)慣非常好,在對文件(數(shù)據(jù)信息)進(jìn)行命名的過程中,為了方便文件排放和后續(xù)查詢具有更高的效率,會(huì)在總文件名上加上一些表示時(shí)間和空間的數(shù)據(jù)。比如按照月度排布的文件命名為“姓名+XX月工作任務(wù)表”。在此基礎(chǔ)上,如果有必要區(qū)分工作人員所在的分公司,則需要進(jìn)一步在文件名的前方加上“XXX分公司”。但這種人為的命名只是為了查詢和統(tǒng)計(jì)方便,對系統(tǒng)的數(shù)據(jù)錄入、存放、調(diào)取等均不會(huì)有任何便利性。
②在數(shù)據(jù)存儲(chǔ)功能模塊下,緊隨的第2個(gè)信息記錄數(shù)據(jù)為空間信息,英文簡稱為“l(fā)oc”。
③第3個(gè)信息記錄數(shù)據(jù)為時(shí)間信息,對應(yīng)的英文單詞為“time”。
上述3項(xiàng)數(shù)據(jù)即為海量數(shù)據(jù)存儲(chǔ)功能中的核心統(tǒng)計(jì)數(shù)據(jù),表明數(shù)據(jù)的名稱、被記錄在案時(shí)的空間和時(shí)間信息。在此基礎(chǔ)上,還需根據(jù)統(tǒng)計(jì)要素額外設(shè)計(jì)一些具體但優(yōu)先級相對落后的統(tǒng)計(jì)項(xiàng)。
在新冠疫情肆虐的當(dāng)下,確保司機(jī)體溫處于正常狀態(tài)是一個(gè)重要的考量因素,故在3個(gè)核心數(shù)據(jù)之外,第4項(xiàng)可以設(shè)置成司機(jī)的姓名,第5項(xiàng)為司機(jī)對應(yīng)車輛的車牌號,第6項(xiàng)為司機(jī)的體溫。按照上述順序,一輛公共汽車對應(yīng)的數(shù)據(jù)信息每天收集一次并在海量數(shù)據(jù)庫中存放。如果需要調(diào)用信息時(shí),可以在數(shù)據(jù)管理平臺中搜索關(guān)鍵詞,按照當(dāng)前關(guān)鍵詞對應(yīng)的順序優(yōu)先級完成信息的排布。比如規(guī)定體溫在37℃以下為正常體溫,達(dá)到38℃便意味著存在感冒發(fā)燒、患肺炎的可能性。在數(shù)據(jù)查詢的過程中,可以將溫度信息優(yōu)先顯示,并篩選出某一日體溫在37℃以上的司機(jī)信息,即可進(jìn)行定向追蹤,可大幅度提高信息調(diào)取的效率。
(2)基于數(shù)據(jù)信息存儲(chǔ)層次的精確索引設(shè)計(jì)。
由于所收集的數(shù)據(jù)信息量極大,很多時(shí)候圍繞某個(gè)關(guān)鍵字進(jìn)行信息檢索、篩選時(shí),可能需要較多的時(shí)間。為了提高處理和搜索的效率,需進(jìn)一步劃分海量數(shù)據(jù)存儲(chǔ)平臺的數(shù)據(jù)信息存儲(chǔ)層次。
這種存儲(chǔ)思路與上文所述的存儲(chǔ)思路的區(qū)別在于:上文所述的存儲(chǔ)思路沒有脫離“數(shù)據(jù)信息整體存儲(chǔ)”的框架,即獲取一個(gè)數(shù)據(jù)信息之后,圍繞該信息中的多個(gè)可能存在的子信息設(shè)定排布順序。完成整理之后儲(chǔ)存在海量數(shù)據(jù)平臺之中。在此種情況下,進(jìn)行數(shù)據(jù)查閱及調(diào)取工作時(shí),系統(tǒng)實(shí)際上無法對信息中的某個(gè)子信息進(jìn)行針對性的查詢,而是需要按照一定的順序,對所有信息進(jìn)行全面檢索,必定費(fèi)時(shí)費(fèi)力。
劃分存儲(chǔ)層次之后,可圍繞位置(空間)、時(shí)間信息進(jìn)行分區(qū)存儲(chǔ)。這種存儲(chǔ)分區(qū)基于Hadoop下InputFormar接口下的getSplits方法加以實(shí)現(xiàn)。將原本粗大的數(shù)據(jù)集基于空間、時(shí)間特性分為多個(gè)較小規(guī)模的數(shù)據(jù)集之后,每個(gè)數(shù)據(jù)集都可以進(jìn)行獨(dú)立的查詢、加載、優(yōu)化?;诖?,實(shí)際解決的問題為:海量數(shù)據(jù)存儲(chǔ)平臺的數(shù)據(jù)寫入和存儲(chǔ)優(yōu)化時(shí)間較長的問題已經(jīng)不復(fù)存在;針對小規(guī)模數(shù)據(jù)集進(jìn)行掃描時(shí),定位的精準(zhǔn)程度也會(huì)隨之提升。
綜上所述,基于Hadoop的海量數(shù)據(jù)存儲(chǔ)平臺具備的最大優(yōu)勢在于數(shù)據(jù)信息的存儲(chǔ)和讀取效率會(huì)基于數(shù)據(jù)信息的存儲(chǔ)區(qū)間、存儲(chǔ)層級方面的差異而大幅度提升。此外,在進(jìn)行設(shè)計(jì)時(shí),無需考慮Hadoop框架的底層結(jié)構(gòu),只需根據(jù)應(yīng)用層的功能指引便可以實(shí)現(xiàn)平臺的開發(fā),最終效果一般可以達(dá)到預(yù)期。