尹承督
(32167 部隊,拉薩 850000)
本文主要基于Hadoop 系統(tǒng)與SQL-Server2014 分別就無人機裝備訓練過程中的非結構化數(shù)據(jù)與結構化數(shù)據(jù)的存儲進行了分析,鑒于部隊信息化建設以傳統(tǒng)數(shù)據(jù)倉庫為主的實際,在此我們建立Hadoop 平臺與傳統(tǒng)數(shù)據(jù)倉庫SQL-Server2014 協(xié)作的無人機裝備訓練數(shù)據(jù)存儲系統(tǒng),從而突破數(shù)據(jù)存儲量擴展的瓶頸,同時增強多結構化數(shù)據(jù)的存儲與分析處理的能力。
Sqoop 的含義本質(zhì)是 Sql to Hadoop 的縮寫[1]。Sqoop 適用于Hadoop 系統(tǒng)與結構化數(shù)據(jù)存儲系統(tǒng)(本文采用SQLServer2014)之間進行數(shù)據(jù)交換的軟件,本文Hadoop 平臺與SQL-Server2014 之間進行數(shù)據(jù)的交換,主要依靠Sqoop進行數(shù)據(jù)的導入導出。其具體過程如圖1、圖2 所示。
1.1 數(shù)據(jù)導入過程 Sqoop 在導入數(shù)據(jù)的過程中主要依靠MapReduce 將任務通過規(guī)定的接口從數(shù)據(jù)庫讀取記錄,然后寫入HDFS 中的過程,這里所要求規(guī)定的關系型數(shù)據(jù)庫支持接口是JDBC(Java DataBase Connectivity),因此在使用Sqoop 進行數(shù)據(jù)導入、導出時,接口都采用JDBC技術。數(shù)據(jù)導入過程如圖1 所示。
具體數(shù)據(jù)導入步驟:
①導入數(shù)據(jù)庫的指令由客戶端在Sqoop,通過命令行方式輸入,指令明確數(shù)據(jù)所在的服務器位置、數(shù)據(jù)庫、數(shù)據(jù)表名稱等相關信息。
圖1 Sqoop 導入數(shù)據(jù)原理
②客戶端接收到導入數(shù)據(jù)指令后,需要對導入的字段類型與列信息經(jīng)JDBC 接口進行檢索。Hadoop 支持的數(shù)據(jù)類型與檢索類型映射,然后適用于MapReduce 作業(yè)的相應數(shù)據(jù)類型與生成數(shù)據(jù)表的類代碼。
③類代碼由Sqoop 根據(jù)字段類型與數(shù)據(jù)表列信息生成,其中包含有提取數(shù)據(jù)列的方法。
④經(jīng)過Sqoop 的規(guī)劃后的Map 任務,主要為了利用Hadoop 的導入性能與高效數(shù)據(jù)并行處理。
⑤數(shù)據(jù)庫中讀取數(shù)據(jù)依然通過JDBC 接口,相應節(jié)點執(zhí)行Map 任務。
⑥按照用戶的指定格式進行數(shù)據(jù)讀取,備份存儲在HDFS,大多以二進制或是文本形式存儲。
具體Sqoop 進行無人機裝備訓練數(shù)據(jù)導入過程:
無人機裝備訓練管理原始數(shù)據(jù)保存在關系型數(shù)據(jù)庫中,開源的數(shù)據(jù)導入工具Sqoop 可將數(shù)據(jù)導入Hadoop 中去,導入時命令[2]:
% sqoop import - connect jdbc:sql://192.168.1.100/EMP
>--table uavtrainingdatainfo-m 2
Sqoop 中的import 指令會運行一個MapReduce 作業(yè),用于連接關系型數(shù)據(jù)庫并從中讀取數(shù)據(jù)。192.168.1.100 是服務器sql 的IP 地址,此處EMP(Enterprise Monitoring Platform)是監(jiān)管數(shù)據(jù)庫名稱。uavtrainingdatainfo 是指無人機裝備訓練數(shù)據(jù)信息,(-m2)說明使用map 任務2 個。重復Sqoop 命令,將無人機裝備訓練數(shù)據(jù)表中數(shù)據(jù)導入到Hadoop 中。
1.2 數(shù)據(jù)導出過程 數(shù)據(jù)導出過程步驟如圖2 所示[3]。
①導出數(shù)據(jù)庫的指令由客戶端在Sqoop,通過命令行方式輸入,指令明確數(shù)據(jù)所在的服務器位置、數(shù)據(jù)庫、數(shù)據(jù)表名稱等相關信息。
②客戶端接收到導出數(shù)據(jù)指令后,需要對導出的字段類型與列信息經(jīng)JDBC 接口進行檢索。Hadoop 支持的數(shù)據(jù)類型與檢索類型映射,然后適用于MapReduce 作業(yè)的相應數(shù)據(jù)類型與生成數(shù)據(jù)表的類代碼。
③Sqoop 由字段類型與數(shù)據(jù)表信息生成所需要導出的數(shù)據(jù)表相應的類代碼,用于解析HDFS 文件,從而生成數(shù)據(jù)庫記錄,進而實現(xiàn)更新或是插入數(shù)據(jù)。
④同導入一樣為了實現(xiàn)Hadoop 的高效數(shù)據(jù)并行處理與性能,Sqoop 需要對導出的數(shù)據(jù)執(zhí)行Map 任務規(guī)劃。
⑤從HDFS 中讀取數(shù)據(jù),由節(jié)點執(zhí)行Map 任務,并解析相關記錄。
⑥數(shù)據(jù)庫中的數(shù)據(jù)以Insert 或是Update 的形式存儲,通常采用一條請求對應插入或更新多條數(shù)據(jù)的方式進行。一般情況Sqoop 可以實現(xiàn)上千條記錄同時一起提交。由于Sqoop 目前進行數(shù)據(jù)傳輸?shù)臋C制存在的弊端,由于網(wǎng)絡或是Map 任務提交失敗,容易造成數(shù)據(jù)的重復記錄現(xiàn)象。
圖2 數(shù)據(jù)導出過程
為了方便無人機裝備訓練數(shù)據(jù)的查詢,通過Sqoop 可以把Hive 查詢的數(shù)據(jù)結果導出到傳統(tǒng)關系型數(shù)據(jù)庫中,從而可以節(jié)約裝備管理人員或是部隊指揮員對于Hive 在執(zhí)行查詢時的等待時間,因此在關系數(shù)據(jù)庫管理系統(tǒng)中創(chuàng)建接受數(shù)據(jù)的目標表[4]:
Sqoop 導出命令:
查詢關系型數(shù)據(jù)庫中的數(shù)據(jù),并按照count 降序排列
Select*form alarm by type order by count desc;
針對協(xié)作系統(tǒng)要實現(xiàn)數(shù)據(jù)采集、數(shù)據(jù)存儲、數(shù)據(jù)應用的功能性需求,以及系統(tǒng)的通用性、易用性、可用性、健壯性、安全性和可擴展性等非功能性需求,將整個系統(tǒng)分為數(shù)據(jù)采集、數(shù)據(jù)存儲、數(shù)據(jù)應用[3]三大模塊。協(xié)作系統(tǒng)的三大模塊功能如圖3 所示。
此處采用程序流程圖的形式介紹大數(shù)據(jù)與傳統(tǒng)數(shù)據(jù)倉庫協(xié)作的過程,為接下來的無人機裝備訓練數(shù)據(jù)倉庫架設提供依據(jù)。如圖4 所示。
通過對流程圖分析,整個系統(tǒng)從數(shù)據(jù)采集到數(shù)據(jù)應用結束,整個過程需要依托Hadoop 平臺的支撐,其中最重要的環(huán)節(jié)是數(shù)據(jù)存儲、傳統(tǒng)數(shù)據(jù)倉庫與大數(shù)據(jù)平臺的數(shù)據(jù)通信問題。
總的來說,大數(shù)據(jù)平臺與傳統(tǒng)數(shù)據(jù)倉庫協(xié)作對無人機裝備訓練數(shù)據(jù)進行存儲,主要是在Hadoop 平臺下搭建,主要的關鍵軟件技術是Apache 項目下的三大模塊:Hadoop、Sqoop、Hive。系統(tǒng)可以實現(xiàn)多類型數(shù)據(jù)的采集,根據(jù)需要將數(shù)據(jù)存儲在Hadoop 下Hive 數(shù)據(jù)倉庫中,同時系統(tǒng)還能實現(xiàn)傳統(tǒng)數(shù)據(jù)倉庫與Hive 之間進行數(shù)據(jù)傳輸與通信,最關鍵的的是使用Sqoop 實現(xiàn)數(shù)據(jù)在兩者之間的傳輸。傳統(tǒng)數(shù)據(jù)倉庫中的數(shù)據(jù)可以將許多長期不用的歷史數(shù)據(jù)存入Hadoop 平臺下,從而降低傳統(tǒng)數(shù)據(jù)倉庫的數(shù)據(jù)存儲負擔。而且可以實現(xiàn)對Hadoop 平臺中數(shù)據(jù)的刪除、增加、查詢等操作。
圖3 大數(shù)據(jù)與傳統(tǒng)數(shù)據(jù)倉庫協(xié)作系統(tǒng)功能模塊圖
圖4 協(xié)作存儲系統(tǒng)完整流程圖
協(xié)作系統(tǒng)實質(zhì)可以表示為SQL-Server2104+Sqoop+Hadoop=協(xié)作存儲系統(tǒng)。前面介紹了協(xié)作系統(tǒng)主要由三大功能模塊組成:數(shù)據(jù)采集、數(shù)據(jù)存儲、數(shù)據(jù)應用。此處主要介紹數(shù)據(jù)的采集與存儲問題。其中的關鍵技術是Sqoop 對于SQLServer2104 與Hadoop 之間如何進行數(shù)據(jù)通信。下面從模塊功能進行介紹兩者是如何進行協(xié)作的,如圖5 所示。
3.1 數(shù)據(jù)采集方面
數(shù)據(jù)采集是數(shù)據(jù)獲取的關鍵步驟,一般數(shù)據(jù)采集是分為傳統(tǒng)數(shù)據(jù)庫通過手動輸入或是SQL語句及代碼編寫連接數(shù)據(jù)庫實現(xiàn)數(shù)據(jù)收集,這些數(shù)據(jù)大多經(jīng)過為經(jīng)過處理的結構化數(shù)據(jù)為主。
另一種數(shù)據(jù)采集為大數(shù)據(jù)平臺下的數(shù)據(jù)從文件系統(tǒng)以代碼進行連接獲取數(shù)據(jù)為主,這些數(shù)據(jù)不限大小、類型。
協(xié)作系統(tǒng)構建之后隨之出現(xiàn)了第三種數(shù)據(jù)獲取方式,Sqoop 可以實現(xiàn)傳統(tǒng)關系型數(shù)據(jù)庫與大數(shù)據(jù)平臺下的文件系統(tǒng)數(shù)據(jù)的導入導出,大數(shù)據(jù)平臺下的規(guī)范化數(shù)據(jù)可以直接導入關系型數(shù)據(jù)庫搭建的數(shù)據(jù)倉庫,同樣,大數(shù)據(jù)平臺只要有符合支持的數(shù)據(jù)接口,同樣可以接受傳統(tǒng)數(shù)據(jù)倉庫的數(shù)據(jù)。
圖5 協(xié)作系統(tǒng)的功能模塊圖
3.2 數(shù)據(jù)存儲方面
在傳統(tǒng)單節(jié)點數(shù)據(jù)倉庫而言,數(shù)據(jù)主要存儲在節(jié)點服務器上;大數(shù)據(jù)平臺數(shù)據(jù)主要存儲在分布式數(shù)據(jù)文件系統(tǒng)HDFS,數(shù)據(jù)存儲平臺以集群形式存在,數(shù)據(jù)存儲的數(shù)據(jù)量以及數(shù)據(jù)類型都不受限制。本文研究的協(xié)作系統(tǒng)對于數(shù)據(jù)存儲分工是:傳統(tǒng)關系型數(shù)據(jù)倉庫主要用于存儲實時性結構化數(shù)據(jù),其余數(shù)據(jù)均由大數(shù)據(jù)平臺存儲,當傳統(tǒng)數(shù)據(jù)存儲達到上限時,大數(shù)據(jù)平臺可以利用Sqoop 分擔傳統(tǒng)數(shù)據(jù)庫的壓力。
本節(jié)對大數(shù)據(jù)存儲系統(tǒng)進行搭建,繼而完成協(xié)作平臺的搭建,實現(xiàn)協(xié)作系統(tǒng)的數(shù)據(jù)采集、管理功能、數(shù)據(jù)應用等工作,由于系統(tǒng)設計主要以代碼實現(xiàn)為主,具體代碼設計過程簡要介紹。
4.1 協(xié)作平臺的搭建及相關工具的準備
本文針對無人機裝備訓練數(shù)據(jù)進行搭建一個Hadoop的小型集群,模擬無人機裝備訓練時各系統(tǒng)單元組的數(shù)據(jù)采集節(jié)點。
假設由五個節(jié)點組成,其中一個節(jié)點作為NameNode、輔助 NameNode 與 TaskTracker,其余四個節(jié)點作為DataNode 和TaskTracker。此外還有一臺主機采用傳統(tǒng)數(shù)據(jù)倉庫進行存儲結構化數(shù)據(jù),用來存儲Hive 數(shù)據(jù)倉庫的元數(shù)據(jù),Hadoop 數(shù)據(jù)倉庫構架如圖6 所示。
圖6 Hadoop 與傳統(tǒng)數(shù)據(jù)倉庫協(xié)作結構示意圖
大數(shù)據(jù)存儲系統(tǒng)搭建的硬件準備工具還需要很多的hadoop 的相關工具,它們主要包括數(shù)據(jù)傳輸工具Sqoop、大數(shù)據(jù)的數(shù)據(jù)倉庫工具Hive、傳統(tǒng)數(shù)據(jù)倉庫搭建工具SQL-Server2014、大數(shù)據(jù)hadoop 的開發(fā)軟件eclipse 等等。具體見表 1 所示[5]。
4.2 相關軟件在集群中的配置
首先對 Hive、Sqoop、MySQL 等軟件的安裝與配置,將 Hadoop、Hive、Sqoop、MySQL 在Master 節(jié)點上進行配置,Slave 節(jié)點上與Master 配置的Hadoop 一樣進行配置,且只需配置Hadoop。進行正確配置后,然后進行正確測試后才能進行存儲系統(tǒng)的搭建。在此首先介紹協(xié)作系統(tǒng)的環(huán)境準備過程,對于代碼實現(xiàn)簡單介紹。
表1 工具硬件軟件準備表
①安裝window7 專業(yè)版操作系統(tǒng),設置主機名稱(Master)、主機的 IP(192.168.100)地址,使用 SSH(Secure Shell Client)無密碼登入;
②安裝 JDK(Java Development Kit),Eclipse 軟件,搭建Java 運行環(huán)境;大數(shù)據(jù)建立在Eclipse 的系統(tǒng)開發(fā)軟件下,首先電腦安裝 JDK(Java SE Development Kit),然后安裝Eclipse 軟件,打開Eclipse 軟件,將Hadoop 的插件hadoop-eclipse-plugin-2.7.1.jar 解壓在E:盤后加載Eclipse軟件下的plugins 文件中,如圖7 所示。
圖7 加載Hadoop 插件過程圖
加載插件后,重啟Eclipse 軟件,便可以運行HDFS Locations。最后搭建大數(shù)據(jù)平臺過程,如圖8 所示。
③安裝Hadoop,在Hadoop-env.sh 文件中設置Java 環(huán)境,修改配置文件 master、slaves、cor-site.xml、mapred-site.xml、hafs-site.xml,加載 Hadoop 過程,如圖 9 所示。
至此Hadoop 在eclipse 的環(huán)境下安裝完畢,而且在eclipse 中集成了 HDFS 與 MapReduce 等 Hadoop 的分系統(tǒng),完成了環(huán)境的配置,接下來便可以進行協(xié)作系統(tǒng)的開發(fā)了。這里需要注意一般Hadoop 是在Linux 系統(tǒng)下安裝,此處對于在Window 系統(tǒng)下安裝,需要修改相關配置與路徑。
圖8 搭建大數(shù)據(jù)Hadoop 數(shù)據(jù)倉庫過程
圖9 加載hadoop 系統(tǒng)
4.3 協(xié)作系統(tǒng)數(shù)據(jù)采集、管理、應用的實現(xiàn)
前面已經(jīng)介紹了協(xié)作系統(tǒng)是由三大模塊組成,其中數(shù)據(jù)應用模塊由兩部分組成:數(shù)據(jù)倉庫的應用、大數(shù)據(jù)平臺應用。此處從功能角度進行介紹協(xié)作系統(tǒng)的實現(xiàn)過程。
①數(shù)據(jù)采集過程。此處主要介紹傳統(tǒng)數(shù)據(jù)倉庫中的數(shù)據(jù)如何傳輸?shù)酱髷?shù)據(jù)平臺,將傳統(tǒng)數(shù)據(jù)倉庫中存放的歷史數(shù)據(jù)、近期不常用的數(shù)據(jù)導入到大數(shù)據(jù)存儲系統(tǒng),解決單節(jié)點傳統(tǒng)數(shù)據(jù)倉庫的存儲量瓶頸問題。這里協(xié)作存儲主要用到Hadoop 的第三方工具模塊Sqoop,在Sqoop 的協(xié)助下可以輕松的實現(xiàn)數(shù)據(jù)在關系數(shù)據(jù)庫管理系統(tǒng)(RDBMS)與大數(shù)據(jù)平臺Hadoop 之間的傳輸。
對于數(shù)據(jù)采集過程,主要是采用Sqoop 工具,實現(xiàn)關系型數(shù)據(jù)輕松導入到Hadoop 平臺下的HBase 和Hive中。利用Java 語言實現(xiàn)大數(shù)據(jù)平臺下數(shù)據(jù)導入到HDFS文件系統(tǒng)中,導出數(shù)據(jù)過程類似導入過程,具體代碼如圖10 所示。
上面介紹的是數(shù)據(jù)存儲在HDFS 中,但是數(shù)據(jù)存儲在HDFS 中不便于應用,結構化數(shù)據(jù)導入到Hive 中可以采用Hive-SQL 語言HSQL 進行管理,本質(zhì)上也是SQL 語言實現(xiàn)MapReduce 的過程,結構化數(shù)據(jù)導入Hive 數(shù)據(jù)存儲的具體代碼如圖11 所示。
以上完成數(shù)據(jù)采集系統(tǒng)的搭建,數(shù)據(jù)的具體采集過程在此不做詳細介紹。
圖10 數(shù)據(jù)采集代碼1
圖11 數(shù)據(jù)采集代碼2
②數(shù)據(jù)管理、應用過程。無人機裝備訓練數(shù)據(jù)的種類多樣,要實現(xiàn)系統(tǒng)處理各種數(shù)據(jù)的能力,導致數(shù)據(jù)采集后存儲在HDFS 中,這對數(shù)據(jù)的應用不利,因此考慮數(shù)據(jù)存儲在Hive 中,便于數(shù)據(jù)的管理。但是數(shù)據(jù)在大數(shù)據(jù)Hadoop 中存儲,基于HDFS 的高容錯、低硬件要求,數(shù)據(jù)歸根到底還是存儲在HDFS 中。數(shù)據(jù)應用主要是在數(shù)據(jù)采集、存儲后的最終步驟,數(shù)據(jù)應用在此處分成傳統(tǒng)數(shù)據(jù)倉庫與大數(shù)據(jù)平臺兩部分。
無人機裝備訓練數(shù)據(jù)存儲的協(xié)作系統(tǒng)的實現(xiàn),是基于Hadoop 平臺的分布式系統(tǒng),其次是其他相關軟件,如Hive、Sqoop 等的正確配置、安裝、調(diào)試、測試后進行的。
Sqoop 作為Hadoop 的第三方模塊,成功實現(xiàn)數(shù)據(jù)在關系型數(shù)據(jù)庫與Hadoop 平臺之間的導入與導出。成功解決了無人機裝備訓練數(shù)據(jù)存儲的難題,協(xié)作系統(tǒng)的成功實現(xiàn)也是眾多系統(tǒng)、軟件的功能融合。本文研究的協(xié)作存儲系統(tǒng)不僅適用于無人機裝備訓練數(shù)據(jù)的存儲,同樣適用于其它信息化裝備訓練數(shù)據(jù)的存儲,尤其是未來聯(lián)合作戰(zhàn)中各種數(shù)據(jù)的存儲,因此該協(xié)作系統(tǒng)為未來部隊數(shù)據(jù)存儲提供了技術支撐,為未來數(shù)據(jù)在部隊中的實際應用提供了現(xiàn)實依據(jù)。