李 碩,盧華明
(北京信息科技大學 信息管理學院,北京 100192)
環(huán)境大數(shù)據(jù)的應(yīng)用目前還處于起步的階段[1],面臨著一系列挑戰(zhàn):環(huán)境管理信息系統(tǒng)已經(jīng)積累了一定數(shù)量的環(huán)境數(shù)據(jù),但數(shù)據(jù)往往分散地存儲在多個信息系統(tǒng),存在數(shù)據(jù)孤島現(xiàn)象;在物聯(lián)網(wǎng)技術(shù)的發(fā)展下,資源環(huán)境大數(shù)據(jù)的類型不再僅僅局限于傳統(tǒng)的結(jié)構(gòu)化形式,更多的是以文本、項目報告等半結(jié)構(gòu)化與非結(jié)構(gòu)化的形式來呈現(xiàn);多種數(shù)據(jù)來源的存儲沒有統(tǒng)一的技術(shù)規(guī)范,存儲同一種數(shù)據(jù)的格式不盡相同,存在大量的異構(gòu)化數(shù)據(jù)[2]。
針對相關(guān)領(lǐng)域結(jié)構(gòu)化、半結(jié)構(gòu)化和非結(jié)構(gòu)化等異構(gòu)數(shù)據(jù)增加,數(shù)據(jù)來源越來越多元化的現(xiàn)狀,James Dixon提出數(shù)據(jù)湖作為一種大數(shù)據(jù)存儲處理和共享服務(wù)機制[3]。數(shù)據(jù)湖是一種能夠保存數(shù)據(jù)原始格式的新型存儲架構(gòu)[4-6],它將所有結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)存儲在一個集中式存儲庫中,支持分布式地存儲海量的結(jié)構(gòu)化數(shù)據(jù)、半結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)。Sawadogo P.等[7]總結(jié)了一種數(shù)據(jù)湖的3層存儲治理模型,數(shù)據(jù)湖設(shè)計成原始數(shù)據(jù)層、處理層和訪問層。針對相關(guān)領(lǐng)域大數(shù)據(jù)多源異構(gòu)特性,Joseph Mesterhazy等[8]搭建了數(shù)據(jù)湖用于存儲醫(yī)學影像,使得研究可以快速周轉(zhuǎn)。Chao-Tung Yang等[9]提出將Spark應(yīng)用于搭建電量使用數(shù)據(jù)湖。劉志勇等[10]構(gòu)建了電信數(shù)據(jù)的數(shù)據(jù)湖架構(gòu),可將原始數(shù)據(jù)總體壓縮44%。亞馬遜、微軟、阿里云等國內(nèi)外領(lǐng)先云計算與人工智能企業(yè)基于數(shù)據(jù)湖技術(shù)需求,分別提出了AWS Lake Formation、Azure Data Lake、阿里云云原生數(shù)據(jù)湖分析(data lake analytics,DLA)等技術(shù)。相關(guān)研究表明DLA相較于Spark,在同等性能條件下成本可節(jié)約90%[11]。
目前,對于環(huán)境領(lǐng)域大數(shù)據(jù)的存儲管理問題,張文信等[12]對數(shù)據(jù)的集成及應(yīng)用提出了較為系統(tǒng)的建設(shè)思路,仲陽等[13]科學分析了自然資源數(shù)據(jù)生產(chǎn)加工現(xiàn)狀,提出以數(shù)據(jù)湖為核心的數(shù)據(jù)組織體系構(gòu)建框架。然而開展環(huán)境大數(shù)據(jù)挖掘分析研究需要數(shù)據(jù)驅(qū)動,一方面數(shù)據(jù)所占用的存儲空間與日俱增,另一方面對查詢速度和響應(yīng)時間有更高要求。本文提出了一種基于DLA的數(shù)據(jù)存儲模型,將數(shù)據(jù)湖應(yīng)用于環(huán)境大數(shù)據(jù),研究構(gòu)建多源異構(gòu)數(shù)據(jù)存儲策略,在存儲空間和查詢時間2個方面進行實驗驗證。
環(huán)境數(shù)據(jù)來源多樣、類型復雜、結(jié)構(gòu)多種,本文分析選取的環(huán)境數(shù)據(jù)源包括空氣質(zhì)量數(shù)據(jù)、水質(zhì)數(shù)據(jù)、實時人口位置數(shù)據(jù)、聯(lián)合國貿(mào)易統(tǒng)計數(shù)據(jù)庫UN Comtrade等數(shù)據(jù)源。對已有環(huán)境數(shù)據(jù)從4個維度進行歸納總結(jié),如表1所示。
表1 環(huán)境數(shù)據(jù)類型分析
針對環(huán)境大數(shù)據(jù)多源異構(gòu)的特點和數(shù)據(jù)孤島問題,本文在對環(huán)境數(shù)據(jù)組成進行數(shù)據(jù)源分析的基礎(chǔ)上,提出環(huán)境數(shù)據(jù)存儲的資源管理層、存儲層和分析層的3層數(shù)據(jù)管理架構(gòu),存儲模型如圖1所示。為適應(yīng)環(huán)境大數(shù)據(jù)具有的增長變化快和數(shù)據(jù)來源種類眾多的特點,在Fatemeh Nargesian等[14]提出數(shù)據(jù)湖作為數(shù)據(jù)的中間存儲層的基礎(chǔ)上,基于函數(shù)計算實現(xiàn)了事件驅(qū)動的數(shù)據(jù)采集獲取,使用對象存儲統(tǒng)一了數(shù)據(jù)存儲層。
圖1 數(shù)據(jù)湖存儲模型
2.1.1 資源管理層
DLA原生支持csv、json等文件格式,也支持關(guān)聯(lián)MySQL、PostgreSQL等關(guān)系型數(shù)據(jù)庫,針對多源異構(gòu)的環(huán)境數(shù)據(jù),在資源管理層采用Python腳本等方式完成數(shù)據(jù)處理,環(huán)境數(shù)據(jù)流入數(shù)據(jù)湖。
2.1.2 存儲層
使用對象存儲技術(shù)支持多種數(shù)據(jù)格式的存儲,采用Avro、Parquet等為大數(shù)據(jù)優(yōu)化的數(shù)據(jù)格式縮短數(shù)據(jù)查詢時間和節(jié)約存儲空間,應(yīng)用分區(qū)存儲策略將開放存儲服務(wù)(open storage service,OSS)存儲層數(shù)據(jù)與數(shù)據(jù)湖建立映射。
2.1.3 分析層
數(shù)據(jù)湖采用讀時模式,已建立好挖掘關(guān)聯(lián)關(guān)系的數(shù)據(jù)回流到數(shù)據(jù)庫等結(jié)構(gòu)化或關(guān)系型存儲,同時支持Flink等計算模型直接訪問存儲層。
在資源管理層實現(xiàn)環(huán)境數(shù)據(jù)從其他數(shù)據(jù)源到數(shù)據(jù)湖的遷移,即數(shù)據(jù)流入數(shù)據(jù)湖。數(shù)據(jù)處理流程如圖2所示。
圖2 數(shù)據(jù)湖的數(shù)據(jù)處理流程
根據(jù)環(huán)境數(shù)據(jù)源分析,數(shù)據(jù)按照其操作特點可劃分為實時增量和定時批量。對于實時增量數(shù)據(jù),利用函數(shù)計算的觸發(fā)器,基于事件驅(qū)動(functions as a service,F(xiàn)aaS)進行觸發(fā)。以人口位置數(shù)據(jù)為例,觸發(fā)器監(jiān)測到更新的數(shù)據(jù),每15 min自動觸發(fā)執(zhí)行1次,完成數(shù)據(jù)獲取。對于定時批量更新的數(shù)據(jù),數(shù)據(jù)更新上傳的頻率一般較低,往往數(shù)月完成1次更新上傳,采用的數(shù)據(jù)遷移工具有DataX和OSSutil。DataX是阿里開源的一款數(shù)據(jù)同步工具,支持OSS等多種數(shù)據(jù)源,作為中間傳輸載體負責連接各種數(shù)據(jù)源。OSSutil是OSS遷移工具,用于關(guān)聯(lián)和建立OSS的連接,將存放原始數(shù)據(jù)的服務(wù)器連接公網(wǎng),配置服務(wù)器本地數(shù)據(jù)源為源數(shù)據(jù),將數(shù)據(jù)文件定時批量遷移至OSS存儲。
結(jié)構(gòu)化數(shù)據(jù)包括數(shù)據(jù)庫數(shù)據(jù)源和csv文件兩類。利用DLA可以加載SQL Server、MySQL、PostgreSQL等關(guān)系型數(shù)據(jù)庫寫入OSS,并可以將查詢結(jié)果或更改通過數(shù)據(jù)回流寫回數(shù)據(jù)庫。對于非結(jié)構(gòu)化數(shù)據(jù),本文所研究的主要有兩大類,分別是Excel電子表格數(shù)據(jù)和Zip壓縮包,電子表格需轉(zhuǎn)換成csv格式,二進制格式的壓縮包需完成解壓,上述操作使用Python程序完成自動處理。
在查詢分析層通過調(diào)用靈活的數(shù)據(jù)分析接口,為環(huán)境數(shù)據(jù)挖掘提供存儲和分析支撐,即數(shù)據(jù)流出數(shù)據(jù)湖。傳統(tǒng)大數(shù)據(jù)平臺采用寫時模式的數(shù)據(jù)處理方式[15],必須經(jīng)過提取、轉(zhuǎn)換、加載等步驟。采用DLA存儲的數(shù)據(jù),由于可以按原樣存儲,可以采取更為靈活的處理方式。不同于傳統(tǒng)數(shù)據(jù)倉庫的schema on write(寫時模式)策略,DLA原生支持schema on read(讀時模式)策略,無需將其轉(zhuǎn)換為預先定義的數(shù)據(jù)結(jié)構(gòu)。在Sawadogo P.所總結(jié)的模型基礎(chǔ)上,為了將異構(gòu)數(shù)據(jù)轉(zhuǎn)換成可管理的數(shù)據(jù),通過讀時模式和寫時模式策略,增加了數(shù)據(jù)流出數(shù)據(jù)湖,支持將原始數(shù)據(jù)通過數(shù)據(jù)模型,加工成特定結(jié)構(gòu)化、規(guī)整化的形態(tài)進行存儲處理。讀時模式和寫時模式的對比分析如表2所示。
表2 讀時模式和寫時模式對比
基于集中式數(shù)據(jù)存儲的OSS構(gòu)建環(huán)境數(shù)據(jù)存儲層,環(huán)境數(shù)據(jù)以本源格式保存,包括結(jié)構(gòu)化的csv、半結(jié)構(gòu)化的json等格式。首先采用讀時模式,在使用數(shù)據(jù)時定義環(huán)境數(shù)據(jù)的模型結(jié)構(gòu),提高數(shù)據(jù)模型定義的靈活性,滿足多樣性、可變性的數(shù)據(jù)分析訴求。傳統(tǒng)的寫時模式有穩(wěn)定的存儲和處理能力,但難以應(yīng)對大量數(shù)據(jù)快速產(chǎn)生且數(shù)據(jù)類型不同的情況,不適合大數(shù)據(jù)存儲,而DLA能完整存儲大量異構(gòu)數(shù)據(jù),支持靈活的讀時模式策略,可以將數(shù)據(jù)轉(zhuǎn)換成需要使用分析的類型。讀時模式和寫時模式相輔相成,利用DLA結(jié)合OSS在環(huán)境大數(shù)據(jù)探索初期采用讀時模式進行數(shù)據(jù)挖掘,在環(huán)境數(shù)據(jù)建立挖掘關(guān)聯(lián)關(guān)系后形成有價值的信息,通過數(shù)據(jù)回流寫入結(jié)構(gòu)化數(shù)據(jù)存儲。同時Flink等計算引擎也支持直接訪問OSS進行運算分析。
通過格式轉(zhuǎn)換方式對原始數(shù)據(jù)進行處理,在OSS存儲層把原始數(shù)據(jù)的格式轉(zhuǎn)換為高性能格式,在使用DLA掃描數(shù)據(jù)時使用轉(zhuǎn)換后的數(shù)據(jù),可以節(jié)省一定的存儲空間。DLA支持Apache ORC、Parquet和Avro這類高性能數(shù)據(jù)格式。其中,ORC和Parquet是列式存儲的數(shù)據(jù)格式,Avro是一種行式存儲的數(shù)據(jù)格式??梢园言紨?shù)據(jù)轉(zhuǎn)換為上述3類格式,然后只掃描需要的數(shù)據(jù)列,無需掃描所有數(shù)據(jù),從而節(jié)省掃描時間。DLA支持處理各類數(shù)據(jù)文件的序列化和反序列化(serialize/deserilize,SerDe),配置示例如下:
CREATE EXTERNAL TABLE comtrade
(pfcode varchar(400),
yr varchar(400),
period varchar(400),
……)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ′|′
STORED AS TEXTFILE
LOCATION ′oss://test-bucket/comtrade′;
TBLPROPERTIES
(′skip.header.line.count′= ′1′,);
這個配置是在DLA連接OSS加載原始數(shù)據(jù)時,通過stored as指定OSS上的數(shù)據(jù)文件格式。
環(huán)境數(shù)據(jù)中文件類型的數(shù)據(jù),會被周期性地直接上傳到OSS。但這些存儲在OSS上的文件缺少元數(shù)據(jù)管理,造成分析的困難。通過編制分區(qū)元數(shù)據(jù)管理存儲策略,元數(shù)據(jù)發(fā)現(xiàn)任務(wù)可以為OSS的環(huán)境數(shù)據(jù)文件新建和修改數(shù)據(jù)湖元數(shù)據(jù)。在DLA中使用分區(qū)表對OSS中的環(huán)境大數(shù)據(jù)進行細化處理,縮短查詢響應(yīng)時間。將存儲在OSS中的資源環(huán)境生態(tài)數(shù)據(jù)映射成一張分區(qū)表,分區(qū)列對應(yīng)OSS中的目錄,在編制目錄時遵循命名規(guī)則,分區(qū)列對應(yīng)表所在OSS路徑下的一個子目錄,目錄的命名規(guī)則為分區(qū)列名對應(yīng)分區(qū)列值。
OSS中一個目錄結(jié)構(gòu)的示例如下:
oss://xxx...xxx/weatherSchema/weatherTable/
file1.csv
oss://xxx...xxx/weatherSchema/weatherTable/
file2.csv
……
oss://xxx...xxx/weatherSchema/weatherPoint Table/file1.csv
oss://xxx...xxx/weatherSchema/ weatherPointTable/file2.csv
……
oss://xxx...xxx/comtradeSchema/HS0Table/year=2020/month=01/file1.json
oss://xxx...xxx/comtradeSchema/HS0Table/year=
2020/month=01/file2.json
……
oss://xxx...xxx/waterSchema/waterTable/file1.json
oss://xxx...xxx/waterSchema/waterTable/file2.json
OSS作為一個可以容納多種格式、多種來源數(shù)據(jù)的開放文件系統(tǒng),為了高效地構(gòu)建基于環(huán)境數(shù)據(jù)的數(shù)據(jù)湖,數(shù)據(jù)源路徑需遵循一定的規(guī)范格式。如圖3所示,OSS數(shù)據(jù)源的元信息發(fā)現(xiàn)支持的格式為庫、表、文件或者庫、表、分區(qū)、文件的格式,OSS路徑的第一級對應(yīng)元信息的schema,第二級對應(yīng)table,OSS路徑的子目錄名需要與元信息的表名進行映射,如果還存在三級及以上的目錄則與元信息的分區(qū)對應(yīng)。
圖3 分區(qū)元數(shù)據(jù)管理存儲策略
以空氣質(zhì)量庫、聯(lián)合國貿(mào)易統(tǒng)計數(shù)據(jù)庫和水質(zhì)庫為樣例,在OSS路徑根目錄oss://xxx...xxx/下有3個子目錄weatherSchema、comtradeSchema、waterSchema分別對應(yīng)空氣質(zhì)量庫、貿(mào)易統(tǒng)計庫和水質(zhì)庫,其中weatherSchema、waterSchema有二級OSS子目錄,把oss://xxx...xxx/weatherSchema/weatherTable/與空氣質(zhì)量庫下的空氣質(zhì)量表建立映射,oss://xxx...xxx/weatherSchema/weatherPointTable/與空氣質(zhì)量檢測站點表做映射,完成第二級table級別的數(shù)據(jù)管理。對于空氣質(zhì)量數(shù)據(jù)和水質(zhì)數(shù)據(jù)由于只有三級OSS路徑,最高級第三級路徑存儲文件粒度數(shù)據(jù),貿(mào)易統(tǒng)計數(shù)據(jù)相較于前兩者,在第二級table之上增加了按年和按月分區(qū),OSS的路徑和元信息的表結(jié)構(gòu)也相應(yīng)增加兩級。
為驗證數(shù)據(jù)轉(zhuǎn)換策略優(yōu)化效果,將原始格式為csv的樣本轉(zhuǎn)換為ORC、Parquet、Avro格式在DLA中進行數(shù)據(jù)掃描,然后在存儲空間和查詢速度兩方面進行對比。首先進行存儲空間方面的實驗,測試分成3個樣本,每個樣本中包含不同年份世界全部匯報國家的聯(lián)合國貿(mào)易統(tǒng)計數(shù)據(jù):樣本1為2000年,樣本2為2000-2004年,樣本3為2000-2009年。3個樣本的數(shù)據(jù)格式均為csv,數(shù)據(jù)占用存儲空間分別為3.402 GB、18.248 GB和30.669 GB。
實驗環(huán)境如下:
測試數(shù)據(jù):聯(lián)合國貿(mào)易統(tǒng)計數(shù)據(jù)庫
數(shù)據(jù)湖:Data Lake Analytics 1.2.0
計算引擎:Alibaba Cloud AnalyticDB
對象存儲:OSS標準類型
結(jié)構(gòu)化數(shù)據(jù)源:RDS for MySQL 1核1G內(nèi)存通用型
測試結(jié)果如表3所示。ORC、Avro、Parquet相較于csv在3個樣本所占用的存儲空間均有優(yōu)化,其中ORC格式占用的存儲空間最小,在3個樣本上的表現(xiàn)相比csv分別節(jié)省約90.4%、90.3%、90.3%,因此在數(shù)據(jù)湖存儲中選用ORC等格式可以節(jié)約存儲空間。
表3 存儲空間測試 GB
進一步驗證幾種格式的查詢速度性能。在上述實驗的基礎(chǔ)上,選取樣本3中編號為270111的無煙煤和編號為270112的煙煤兩種煤礦資源數(shù)據(jù)回流到RDS for MySQL結(jié)構(gòu)化數(shù)據(jù)進行查詢速度的掃描測試。測試結(jié)果如圖4所示。
圖4 數(shù)據(jù)回流性能測試
由圖可知,ORC、Avro、Parquet三種數(shù)據(jù)格式相比csv格式在數(shù)據(jù)湖掃描速度上均有90%以上提升,其中ORC、Parquet格式掃描速度最快,可節(jié)省約90.1%的查詢時間。
針對環(huán)境大數(shù)據(jù)多源異構(gòu)的存儲需求,本文提出了一種基于數(shù)據(jù)湖的環(huán)境大數(shù)據(jù)存儲模型。模型具有整合多種環(huán)境數(shù)據(jù)源的能力,既支持不同類型環(huán)境數(shù)據(jù)的靈活存儲,又提供了查詢訪問功能,相較于傳統(tǒng)數(shù)據(jù)湖方案,在DLA的基礎(chǔ)上采用格式轉(zhuǎn)換策略,在存儲空間和掃描速度上達到優(yōu)化90%以上的效果,可以為下一階段環(huán)境數(shù)據(jù)挖掘分析研究提供數(shù)據(jù)存儲支撐,滿足多樣化、靈活性的數(shù)據(jù)分析需求。