趙 輝
(內(nèi)蒙古自治區(qū)地震局,呼和浩特 010000)
在地震系統(tǒng)內(nèi),日常的地震監(jiān)測(cè)數(shù)據(jù)都是保存在服務(wù)器或者相關(guān)電腦上,對(duì)數(shù)據(jù)的應(yīng)用也是將數(shù)據(jù)保存到本地主機(jī)后再進(jìn)行分析使用,然而隨著日常地震監(jiān)測(cè)數(shù)據(jù)量的增長(zhǎng),常規(guī)的單機(jī)以及服務(wù)器存儲(chǔ)方式逐漸將無法滿足日常監(jiān)測(cè)數(shù)據(jù)的存儲(chǔ)需求。以測(cè)震數(shù)據(jù)為例,內(nèi)蒙古自治區(qū)地震局共有測(cè)震臺(tái)站48個(gè),日均產(chǎn)生的測(cè)震數(shù)據(jù)在1.4 G以上,這些數(shù)據(jù)在存儲(chǔ)的過程中又分為“臺(tái)站卷”與“臺(tái)網(wǎng)卷”,所以每日最終所產(chǎn)生的需要存儲(chǔ)的測(cè)震數(shù)據(jù)就在4.48G以上,光測(cè)震數(shù)據(jù)的年均存儲(chǔ)量就在1.6T以上。
因此,為了滿足地震監(jiān)測(cè)數(shù)據(jù)的存儲(chǔ)需求,創(chuàng)新性的將目前較為流行hadoop技術(shù)應(yīng)用到地震監(jiān)測(cè)數(shù)據(jù)的存儲(chǔ)中,既解決了海量監(jiān)測(cè)數(shù)據(jù)的存儲(chǔ)問題,也增加了監(jiān)測(cè)數(shù)據(jù)的分析手段。本文將會(huì)從物理環(huán)境到軟件配置以及對(duì)數(shù)據(jù)的簡(jiǎn)單操作給出相應(yīng)的實(shí)現(xiàn)方法和解決策略,以實(shí)現(xiàn)對(duì)地震監(jiān)測(cè)數(shù)據(jù)的大規(guī)模存儲(chǔ)。
Hadoop是一個(gè)由Apache基金會(huì)所開發(fā)的分布式系統(tǒng)基礎(chǔ)架構(gòu),主要解決海量數(shù)據(jù)的存儲(chǔ)和海量數(shù)據(jù)的分析計(jì)算問題,具有高可靠性、高擴(kuò)展性、高效性、高容錯(cuò)性等特點(diǎn)。廣義上來說,Hadoop通常指一個(gè)更廣泛的概念—Hadoop生態(tài)圈。
Hadoop由HDFS、MapReduce、YARN、Common等組件構(gòu)成,這四個(gè)組建是其基本生態(tài)圈的框架。
MapReduce是Hadoop中的計(jì)算工具,主要用于進(jìn)行離線計(jì)算,其將計(jì)算過程分為兩個(gè)階段。首先Map階段對(duì)輸入的數(shù)據(jù)進(jìn)行并行處理,然后Reduce階段對(duì)Map階段所處理數(shù)據(jù)的結(jié)果進(jìn)行匯總。將MapReduce技術(shù)應(yīng)用到對(duì)地震監(jiān)測(cè)數(shù)據(jù)的分析上,便可以實(shí)現(xiàn)對(duì)歷史地震監(jiān)測(cè)數(shù)據(jù)的大規(guī)模并行處理分析。這樣在分析過程中,所獲得的數(shù)據(jù)將更為全面準(zhǔn)確。
YARN是Hadoop的資源管理器,主要負(fù)責(zé)集群的資源管理和調(diào)度,它的引入為集群在利用率、資源統(tǒng)一管理和數(shù)據(jù)共享等方面帶來了巨大的好處。
YARN主要由四部分構(gòu)成。ResourceManager是總調(diào)度,用來處理請(qǐng)求,資源分配與調(diào)度。NodeManager負(fù)責(zé)單個(gè)節(jié)點(diǎn)上的資源管理。ApplicationMaster負(fù)責(zé)管理任務(wù)job,申請(qǐng)資源。Container是對(duì)任務(wù)運(yùn)行環(huán)境的抽象,封裝了CPU、內(nèi)存等多維資源以及環(huán)境變量、啟動(dòng)命令等,任務(wù)運(yùn)行相關(guān)信息(圖1)。
由于YARN在整個(gè)Hadoop中起著最為關(guān)鍵的作用,因此在部署集群的過程中, YARN是否能部署好,直接關(guān)系到整個(gè)方案的成敗。下文在部署集群時(shí)將會(huì)著重說明如何部署YARN。
圖1 YARN資源調(diào)度流程圖Fig.1 Resources schedule flow chart of YARN
以測(cè)震數(shù)據(jù)為例,內(nèi)蒙古自治區(qū)地震局48個(gè)測(cè)震點(diǎn)分布相對(duì)稀疏,需要處理的測(cè)震數(shù)據(jù)相對(duì)較分散。因此從測(cè)震數(shù)據(jù)的使用需求來看,更加側(cè)重于數(shù)據(jù)分析,即對(duì)歷史測(cè)震數(shù)據(jù)進(jìn)行分析研究。但是,現(xiàn)階段采用的是將監(jiān)測(cè)數(shù)據(jù)存儲(chǔ)到服務(wù)器與PC擴(kuò)展硬盤上,隨著數(shù)據(jù)量的不斷增長(zhǎng),存儲(chǔ)介質(zhì)易損壞、恢復(fù)難、數(shù)據(jù)導(dǎo)入導(dǎo)出慢等問題也日益突出,構(gòu)建可靠性高的存儲(chǔ)分析系統(tǒng)也更為重要。
以測(cè)震數(shù)據(jù)為例,目前國(guó)家地震臺(tái)網(wǎng)中心采用基于JOPENS的SSS流服務(wù)器來負(fù)責(zé)接收和分發(fā)波形數(shù)據(jù),接收512字節(jié)的純數(shù)據(jù)SEED卷(Miniseed數(shù)據(jù)),包含有固定頭段本分(48字節(jié))和數(shù)據(jù)部分,主要記錄臺(tái)站名、起始時(shí)間、樣本數(shù)目、測(cè)震數(shù)據(jù)等,以一個(gè)臺(tái)站一個(gè)分項(xiàng)[1]。而對(duì)測(cè)震數(shù)據(jù)的分析與應(yīng)用所使用的軟件是Jopens-msdp5.2,所以考慮到應(yīng)用數(shù)據(jù)時(shí)的便捷性,我們?cè)跀?shù)據(jù)的存儲(chǔ)過程仍采用這一結(jié)構(gòu)對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ),數(shù)據(jù)包為seed格式。同理,其他監(jiān)測(cè)數(shù)據(jù)也均采用目前所使用的格式直接進(jìn)行存儲(chǔ)。
數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)可以確定后,就需要確定數(shù)據(jù)的數(shù)量級(jí)以便選擇合適的硬件。內(nèi)蒙古地震局測(cè)震數(shù)據(jù)存儲(chǔ)量年均在1.6 T以上,加上分析后所產(chǎn)出的測(cè)震數(shù)據(jù),年均需要存儲(chǔ)量在6T以上。另外還有前兆的相關(guān)監(jiān)測(cè)與分析數(shù)據(jù),年數(shù)據(jù)規(guī)模在10 T以上。面對(duì)如此規(guī)模龐大的數(shù)據(jù)量需要引入大數(shù)據(jù)的數(shù)量級(jí)這一概念來加以探討。因此以大數(shù)據(jù)的數(shù)量級(jí)來看,根據(jù)內(nèi)蒙古地震局的數(shù)據(jù)規(guī)模以及確保系統(tǒng)有一定的數(shù)據(jù)冗余這兩點(diǎn)要求來確定大數(shù)據(jù)數(shù)量級(jí),需要達(dá)到EB級(jí)。所以在選擇服務(wù)器與存儲(chǔ)矩陣時(shí)要遵循EB級(jí)的數(shù)量級(jí)這一原則。
對(duì)集群硬件的選擇往往被輕視,認(rèn)為選擇配置較高價(jià)格較貴的硬件既可滿足一切需要。然而幾乎在所有情形下,MapReduce要么會(huì)在從硬盤讀取數(shù)據(jù)時(shí)遇到瓶頸,要么在處理數(shù)據(jù)數(shù)時(shí)遇到瓶頸,前者稱為IO受限后者稱為CPU受限。所以在選擇硬件時(shí),一定要根據(jù)工作負(fù)載進(jìn)行選擇。在這里可以將根據(jù)工作負(fù)載選擇硬件的一般原則總結(jié)成一張圖(圖2)。
因此,根據(jù)對(duì)使用需求以及內(nèi)蒙古自治區(qū)地震局現(xiàn)有的監(jiān)測(cè)數(shù)據(jù)量進(jìn)行分析,依據(jù)工作負(fù)載,在性能和經(jīng)濟(jì)性上選擇硬件的最佳平衡。基于硬件選擇的規(guī)律,在這里選擇了通用的服務(wù)器均衡配置,結(jié)果見表1。
圖2 根據(jù)工作負(fù)載選擇服務(wù)器原則Fig.2 Principles for selecting servers based on workload
表1 服務(wù)器配置方案表Table 1 Server configuration schema table
HDFS的三個(gè)組件均需要部署,YARN的四個(gè)組件其中兩個(gè)組件需要部署。HDFS中的NameNode、SecondaryNameNode比 較 占資 源,需要部署在一個(gè)節(jié)點(diǎn)上,DataNode為實(shí)際存放數(shù)據(jù)的模塊,根據(jù)需要部署即可。YARN中需要部署的ResourceManager較占資源,需要部署在一個(gè)節(jié)點(diǎn)上。NodeManager與NameNode對(duì)應(yīng)部署。因此,根據(jù)上述原理,我們?yōu)榧阂?guī)劃了3臺(tái)服務(wù)器,并按表2進(jìn)行規(guī)劃部署。
從表2中可以看到將比較占用資源的Name No de、Se conda ryNa meNode、ResourceManager部署在了不同的節(jié)點(diǎn)上。隨著數(shù)據(jù)量的增多,如果需要對(duì)集群進(jìn)行擴(kuò)展,我們也可以將這三個(gè)較為占資源的服務(wù)部署在三個(gè)獨(dú)立的服務(wù)器上,其余服務(wù)器均作為數(shù)據(jù)存儲(chǔ)服務(wù)器,便于日后進(jìn)行再次擴(kuò)展。
表2 集群規(guī)劃部署表Table 2 The table of cluster planning and deployment
根據(jù)上述原則做好集群的搭建后,需要對(duì)集群環(huán)境進(jìn)行配置。選擇Linux系統(tǒng)一般都會(huì)選擇較為穩(wěn)定的CentOS-6.8版本。同時(shí)需要安裝JAVA、ant、maven和protobuf工 具 為 編 譯Hadoop做好準(zhǔn)備。在這里之所以要重新配置環(huán)境變量以及編譯Hadoop的源代碼,是為了讓整個(gè)系統(tǒng)與硬件更加適配。所配置的軟件與Hadoop源碼參考版本如下:
jdk-8u181-linux-x64.tar、ant-1.9.14-bin.tar、maven-3.6.1-bin.tar、protobuf-2.5.0.tar、glibc-2.14.1.tar、hadoop-2.7.7-src.tar。
在這里需要需注意的是,CentOS7.1以前的版本,默認(rèn)支持的glibc最高版本為glibc-2.12,而hadoop-2.7.1以上的源碼所需要的glibc版本需要在2.14以上,如果我們不對(duì)CentOS-6.8中的glibc進(jìn)行升級(jí)的話,在進(jìn)行源碼編譯的過程中會(huì)報(bào)錯(cuò),從而導(dǎo)致編譯失敗。因此在這里需要下載glibc-2.14.1或以上的版本對(duì)原系統(tǒng)中的glibc進(jìn)行升級(jí)。
對(duì)相關(guān)環(huán)境做好配置后,再根據(jù)具體情況 與 參 數(shù) 做 好core-site.xml、yarn-site.xml、mapred-site.xml這3個(gè)核心配置文件的配置,這樣Hadoop的存儲(chǔ)集群就搭建完畢了。
為驗(yàn)證上述方案的可行性,我們通過在電腦上安裝VMware軟件,并搭建偽分布式集群的形式來進(jìn)行測(cè)震數(shù)據(jù)的上傳存儲(chǔ)并對(duì)已上傳的數(shù)據(jù)進(jìn)行簡(jiǎn)單的操作以驗(yàn)證上傳數(shù)據(jù)的可操作性。所使用的電腦配置參數(shù)如下表3所示。
表3 電腦配置參數(shù)Table 3 Computer configuration parameters
在VMware上 安 裝Linux的CentOS-6.8版本,并在此系統(tǒng)上搭建偽分布式集群,做好相應(yīng)的集群環(huán)境準(zhǔn)備。配置好相應(yīng)的環(huán)境后,安裝Hadoop2.7.7版本。
啟動(dòng)hadoop,創(chuàng)建“tz”(臺(tái)站卷)與“tw”(臺(tái)網(wǎng)卷)文件目錄,分別存儲(chǔ)對(duì)應(yīng)數(shù)據(jù)。使用“hdfs dfs –put”命令分別上傳內(nèi)蒙古自治區(qū)地震局2018年1月1日的臺(tái)網(wǎng)卷與臺(tái)站卷的部分測(cè)震數(shù)據(jù)進(jìn)行測(cè)試(圖3)。
從圖中可以看出,名為20180101.NM.AGL的臺(tái)站卷與2018010100.NM的臺(tái)網(wǎng)卷數(shù)據(jù)已經(jīng)上傳,并提供了可下載數(shù)據(jù)的對(duì)應(yīng)地址。因此,此次實(shí)驗(yàn)的測(cè)震數(shù)據(jù)已成功上傳。
圖3 數(shù)據(jù)上傳測(cè)試圖Fig.3 Data upload test chart
我們繼續(xù)使用YARN運(yùn)行簡(jiǎn)單的MR程序?qū)σ焉蟼鞯臄?shù)據(jù)進(jìn)行運(yùn)算操作,并通過Hadoop的All Applications進(jìn)行監(jiān)控(圖4、圖5)。
圖4 數(shù)據(jù)操作圖Fig.4 Data manipulation chart
從圖4與圖5可以看出,對(duì)臺(tái)站卷數(shù)據(jù)20180101.NM.AGL與臺(tái)網(wǎng)卷2018010100.NM的WORDCOUNT操作已經(jīng)成功運(yùn)行,分別用時(shí)為1分58秒與4分39秒,并在文件夾“tzwc”與“twwc”產(chǎn)出了對(duì)應(yīng)的數(shù)據(jù)文件。因此,上傳至服務(wù)器的測(cè)震數(shù)據(jù)文件均可正常使用,并可使用大數(shù)據(jù)技術(shù)對(duì)已上傳的數(shù)據(jù)進(jìn)行操作。
圖5 數(shù)據(jù)操作記錄圖Fig.5 Data operation record chart
根據(jù)上述的測(cè)試結(jié)果來看,本文所提出的地震監(jiān)測(cè)數(shù)據(jù)的Hadoop存儲(chǔ)解決方案可行。雖然本方案還未應(yīng)用到內(nèi)蒙古地震局實(shí)際工作中,但使用Hadoop技術(shù)對(duì)地震監(jiān)測(cè)數(shù)據(jù)進(jìn)行存儲(chǔ)與分析勢(shì)必將應(yīng)用到整個(gè)地震行業(yè)。Hadoop技術(shù)不僅可以使地震監(jiān)測(cè)數(shù)據(jù)在日常存儲(chǔ)上具有更高的可靠性,同時(shí)在對(duì)歷史地震監(jiān)測(cè)數(shù)據(jù)進(jìn)行處理時(shí),具有了更多的分析統(tǒng)計(jì)手段和更快的數(shù)據(jù)讀取速度。同時(shí)在地震監(jiān)測(cè)數(shù)據(jù)不斷增長(zhǎng)的情況下,使用Hadoop技術(shù)對(duì)監(jiān)測(cè)數(shù)據(jù)進(jìn)行存儲(chǔ)日后對(duì)服務(wù)器進(jìn)行存儲(chǔ)擴(kuò)展也極為便利。