Hadoop下水環境模擬集羣運算模式

Hadoop下水環境模擬集羣運算模式算法

馬金鋒1, 唐力2, 饒凱鋒1, 洪綱3, 馬梅1,4數據庫

1 中國科學院飲用水科學與技術重點實驗室(中國科學院生態環境研究中心),北京 100085安全

2 深圳市環境監測中心站,廣東 深圳 518057服務器

3 石家莊市環境信息中心,河北 石家莊 050051網絡

4 中國科學院大學資源與環境學院,北京 100190架構

摘要:水環境數值模型是模擬、分析及預測水體中物質遷移轉化過程及其效應的有效工具。水環境模型的高性能批量計算是當前水環境模擬研究的熱點。大數據技術中的分佈式集羣計算模式爲水環境模擬批量計算提供一種可行的解決方案。探索了水環境數值模型在大數據分佈式計算框架下的適應性,提出了一種適用於水環境模擬的大數據分佈式集羣運算模式,並經過實例驗證了該運算模式的可行性。併發

關鍵詞: 水環境模擬 ; 集羣運算 ; 大數據 ; Hadoop負載均衡

論文引用格式:框架

馬金鋒, 唐力, 饒凱鋒, 洪綱, 馬梅. Hadoop下水環境模擬集羣運算模式. 大數據[J], 2019, 5(6):73-83機器學習

MA J F, TANG L, RAO K F, HONG G, MA M.Cluster computing mode for water environment simulation based on Hadoop. Big Data Research[J], 2019, 5(6):73-83

1 引言

水環境模型是指水體中的污染物(養分物質、懸浮物、藻類、有毒物質等)隨水流在遷移過程當中,因水動力和生物化學等因素的影響而發生的物理、化學和生物反應的數學描述和模擬。水環境中污染物的遷移轉化過程模擬和預測是水生態環境健康診斷、預測、預警及控制管理的重要基礎,水環境數學模型在國內外已有很是普遍的應用,而且成爲國內外學者研究的熱點。隨着對水環境過程認知的進步、計算機運算能力的加強以及模型大量的普及應用,水環境模型取得了快速的發展,功能日益強大,但模型也變得更加複雜,這對運算的需求急劇增長。
儘管過去幾十年間計算機的運算速度和容量獲得快速提高,但水環境模型的高性能批量計算一直面臨巨大挑戰。綜合運用並行技術和集羣技術提升模型計算效率已成爲環境領域和高端計算領域的研究熱點。目前,研究工做主要集中在CPU、GPU獨立或協同並行計算,包括經過單機多處理器實現高速計算能力、與普通計算機經過高速網絡互聯共享計算能力實現集羣計算。前者嚴重依賴於單機性能,成本昂貴且計算速度的提升空間有限;後者將任務分散到各個節點執行,適用於計算密集型的做業,當節點須要訪問的數據量較龐大時,網絡帶寬可能會成爲系統的性能瓶頸。此外,在大規模分佈式計算環境下,協調各個進程是一個很大的挑戰,其中最困難的是合理處理系統的部分失效問題。從本質上講,上述並行和集羣技術都是基於區域分解和分塊計算策略的,單算例被分解爲多個子任務同時執行,以減小執行時間,適合單算例高性能計算。
在水環境模擬應用領域,水環境模擬預測、水污染風險動態預警、水質目標管理、突發水污染事故應急決策、洪水風險製圖等應用對模型建模過程(參數率定、不肯定性分析、模型驗證)以及應用過程(情景分析)均提出了批量計算需求。單算例模式不適合批量計算應用。
大數據技術提供了一種新興海量數據管理和計算模式,尤爲是以Hadoop爲表明的開源大數據平臺,採用無共享(sharednothing)框架,可以實現失敗檢測,並提供良好的橫向擴展和容錯處理機制。這種分佈式集羣計算架構隱藏了併發、容錯、數據分佈和均衡負載等細節,能夠運行在一羣廉價的PC上,爲水環境模擬批量計算提供了一種潛在的、經濟可行的解決方案。
本文針對多算例並行計算需求,探索水環境模型在大數據技術框架下的適應性,提出一種適用於水環境模型模擬的分佈式集羣運算模式,以解決目前集羣計算面臨的橫向擴展和容錯處理問題,即不但須要將計算「本地化」以節約網絡帶寬,從而得到高效率的計算性能,並且須要設計良好的機器故障處理(容錯)機制以保障計算的可靠性。實例驗證了開源大數據平臺Hadoop環境下Delft3D水環境模型集羣運算模式,證實該模式的可用性、可擴展性和可靠性。

2 水環境模擬集羣運算模式與構架

2.1 運算模式

基於大數據技術中的分佈式並行計算框架實現的集羣運算模式屬於多算例多任務分解並行計算,即每個算例對應一個計算任務,這種模式適合大批量模型計算,應用面更廣,其核心是並行分佈式存儲和計算 。位置感知將計算移動到數據所在的位置(存儲)是一個重大的進步,即經過「數據本地化」可減小數據遷移,以節約網絡帶寬,得到高效率的計算性能。分佈式存儲將數據分散存儲到多個節點,而且同一份數據在不一樣節點上保存多個副本,不但實現了數據本地化,還實現了數據冗餘備份,同時保障了數據的安全性。分佈式計算則經過位置感知將算法/模型等計算資源分發到數據的所在位置,達到「計算本地化優化」的目的。
水環境模擬集羣運算模式充分借鑑「數據本地化」和「計算本地化」的思想,將模擬場景模型配置文件分佈到各個計算節點以實現「配置文件本地化」,模型計算程序則經過感知定位並將程序分發到模型配置文件所在節點,從而實現「計算程序本地化」。圖1描述了水環境模擬集羣運算模式。配置文件的分佈式存儲冗餘備份機制縮短了計算程序尋址感知時間。
水環境模型的分佈式計算包括位置感知、本地化計算和計算結果分佈式存儲3個過程。分佈式分發機制能夠快速定位到配置文件所在的計算節點,水環境模型執行文件被自動下載到計算節點,並建立運行空間,啓動模型讀取配置文件,執行模型本地化計算,最後將計算結果寫入分佈式存儲。

Hadoop下水環境模擬集羣運算模式
圖1 水環境模擬集羣運算模式

2.2 技術架構

綜合現有水環境模型和大數據技術的發展示狀,圖2給出了水環境模擬集羣運算模式實現的技術架構。實現流程爲:在「數據」層造成「模型/算法」層運行所需的基礎配置文件集合;而後文件集合和模型/算法被上傳到「存儲」層,並以Hadoop分佈式文件系統(Hadoop distributed file system,HDFS)格式存儲;在「計算」層中,計算做業調度啓動離線批量計算程序,實現多個模型/算法的分佈式併發計算,計算結果解析後被存入HBase數據庫,「計算」層利用Spark分析HBase數據庫中存儲的記錄,以支持業務應用。
水環境數值模型模擬計算是典型的CPU密集型運算,具備計算性能需求高、運行時間長、計算結果文件大的特色。針對此特色,「計算」層中須要篩選合適的技術框架,其中MapReduce和Spark均屬於分佈式計算框架,前者處理「本地化」模型輸入文件數據,後者處理「本地化」模型輸出的結果數據。MapReduce適合離線式批量計算,Spark 適合內存式迭代計算,此外還引入了QUARTZ定時任務框架,用於週期性執行的計算做業調度管理。鑑於數值模型計算耗時的特色,採用MapReduce離線式計算框架,而對於計算結果的交互式分析,則採用Spark內存迭代式計算框架。

Hadoop下水環境模擬集羣運算模式
圖2 水環境模擬集羣運算模式技術架構

在分佈式文件存儲和數據庫存儲方面,HDFS和HBase已經獲得普遍應用。水環境模型配置和原始模擬結果一般以文件格式存儲,適合採用HDFS存儲;模擬結果解析後的結構化數據則適合採用HBase數據庫進行存儲。此外對於其餘經常使用的數據,如模型運算相關基本信息描述、集羣軟硬件資源描述等,適合採用常規關係型數據庫或者其餘外部存儲方式。
數值模型/算法是水環境模擬的計算引擎和核心價值,通常根據實際應用側重的功能需求來選擇合適的模型。基於開源、具備商業應用背景和完善的社區技術支持等篩選依據,圖2推薦Delft3D和SELFE 2種水動力水質模型,此外還包括TELEMAC、EFDC等其餘模型。針對大規模集羣計算產生的模擬結果分析,在技術架構的「模型/算法」層集成機器學習算法庫,如Apache Mahout、Spark MLib等。爲了支持用戶自定義算法,在「模型/算法」層也提供用戶自定義函數。鑑於模擬結果存儲在HBase中,於是推薦採用Spark實現自定義操做。
「數據」層中定義了數值模型/算法運行所須要的一系列基礎配置文件。典型的水環境模型配置文件包括研究區網格剖分、地形插值、初始場、邊界條件設定等。根據參數率定、不肯定性分析及情景決策的應用須要,可造成一系列場景文件集合。

3 應用案例

3.1 模式設計

以Hadoop MapReduce環境下Delft3D模型運算爲例,驗證集羣運算模式的可行性。Delft3D模型由荷蘭WL|Delft Hydraulics公司開發,用於河流、湖泊、水庫、河口和海岸等自由地表水環境的水動力和水生態計算。Delft3D由7個模塊組成,包括:水動力模塊(Delft3DFLOW)、波浪模塊(Delft3D–WAVE)、水質模塊(Delft3D-WAQ)、顆粒跟蹤模塊(Delft3D-PART)、生態模塊(Delft3D–ECO)、泥沙輸移模塊(Delft3D-SED)和動力地貌模塊(Delft3D-MOR)。這些模塊功能獨立且相互聯繫,每個模塊均可單獨執行或與一個或多個其餘模塊組合執行,可以模擬二維和三維水流、波浪、水質、生態、泥沙輸移及牀底地貌以及各個過程之間的相互做用。Delft3D模型是目前國際上先進的水動力-水質模型之一,在國際上應用十分普遍。圖3中水環境模擬集羣運算模式設計的核心在於將Delft3D模型的每一個參數集文件經過集羣分發機制分佈到各個數據節點,集羣經過位置感知機制將計算程序定位到數據節點,在節點上經過讀取參數集文件,重構模型配置文件,並完成模型計算過程。

Hadoop下水環境模擬集羣運算模式圖3 水環境模擬集羣MapReduce運算核心流程

3.2 集羣環境

Hadoop採用傳統的主/從框架體系,集羣搭建中至少採用3臺服務器,一臺服務器做爲集羣的主節點,即各稱節點(NameNode)。NameNode的失敗會致使集羣失敗。爲了保障NameNode故障時恢復集羣運轉,選擇另一臺服務器做爲NameNode的備份節點,即第二名稱節點(secondary NameNode)。NameNode負責管理整個文件系統,維護和更新文件的分塊、存儲信息,監視文件系統的健康狀態。爲了維護整個文件系統,NameNode須要在內存磁盤中進行大量的讀寫操做,這些操做會搶佔計算資源,所以,一般託管NameNode的機器再也不承擔數據節點(DataNode)和任務追蹤器(TaskTracker)任務。剩餘集羣同時做爲TaskTracker和DataNode。
表1中採用7臺機器搭建Hadoop集羣,其中「Master」在集羣中承擔NameNode和做業追蹤器(JobTracker)的角色,「Master2」承擔secondary NameNode的角色,「s200~s204」承擔DataNode和TaskTracker的角色。7臺機器經過千兆交換機進行網絡鏈接,網絡結構如圖4所示。

Hadoop下水環境模擬集羣運算模式

Hadoop下水環境模擬集羣運算模式
圖4 Hadoop集羣網絡結構

3.3 實現流程

圖5按照「情景定義-集羣計算」2層結構描述了實現流程。「情景定義」負責爲模型運行提供一系列不一樣的場景文件,它包括模型定義、參數提取和參數集定義3個部分。圖6中,模型定義過程提供了水環境數值模型運行的一系列基礎配置文件,包括研究區網格剖分、地形插值、邊界條件設定、初始化狀態設定等過程對應的參數設置文件,這些文件由一個項目工程統一進行管理;參 數提取過程根據參數率定、不肯定性分析及情景決策的須要,從模型定義文件中選取相應的參數,如河牀底部糙率、紊動粘滯係數、污染物降解係數等;參數集定義過程將上述參數採用拉丁超立方抽樣,生成一系列參數集文件,該文件與基礎配置文件壓縮後存入HDFS,副本數默認取3;計算任務分發過程當中,「集羣運算」負責搭建集羣運算環境,並將參數集定義過程當中的參數集文件分發到集羣的計算節點(task slot);計算任務執行過程在每一個計算節點上讀取參數集文件,重構模型配置文件,執行模型計算,並將模型計算結果存儲到集羣。
Hadoop下水環境模擬集羣運算模式
圖5 水環境模擬集羣運算模式實現流程
Hadoop下水環境模擬集羣運算模式圖6 運行時間/計算節點個數對比

3.4 實驗設計

爲了測試集羣的可用性,同時也爲了確保測試過程的可複製性,模型文件採用官方弗里斯蘭潮汐口(Frisian tidal inlet)案例;爲了測試不一樣模型大小對集羣運算過程的影響,案例的模擬時間分別設計爲1年、半年和1個月;爲了測試集羣的可靠性和可擴展性,設計了動態增刪計算節點測試實驗。集羣計算性能評價採用加速比指標,加速比是同一個計算任務在單處理器系統和並行處理器系統中運行消耗的時間比率,用來衡量並行系統或程序並行化的性能和效果。加速比計算式爲SN=T1/TN,其中N指計算節點的數量,T1指單計算節點完成計算的用時,TN指N個計算節點完成計算的用時。

3.5 測試結果

圖6代表,不管是常規的單做業多任務模式(集羣只有惟一一個job,內含多個task算例),仍是多做業單任務模式(集羣擁有多個job,每一個job只含有惟一的task算例),集羣成功地實現了全部計算任務,證實Hadoop MapReduce環境下Delft3D模型集羣運算模式的可行性。此外,上述2種做業模式隨着計算節點的增長呈現出如下規律。
首先,隨着計算節點的增長,集羣的運行時間顯著下降。起初,圖6(a)的總運行時間略高於圖6(b)的總運行時間,隨着計算節點的增長,運行時間的降幅明顯高於後者。並且,隨着計算節點的增長,模型複雜度和運行時間也呈現出規律:低複雜度模型(模型3)的運行時間降幅明顯高於中複雜度模型(模型2),中複雜度模型的運行時間降幅明顯高於高複雜度模型(模型1)。整體上,圖6(a)中模型的運行時間降幅分別高於圖6(b)中相應模型的運行時間降幅。
其次,圖7中集羣的加速比與計算節點呈現近似線性關係:隨着節點個數的增長,集羣加速比有明顯的偏離趨勢。相對於圖7(b),圖7(a)的加速比更接近理想值。除了計算節點爲1時二者加速比均接近理想值1以外,圖7(a)明顯優於圖7(b)。當計算節點爲5時,圖7(a)3種模型(模型三、模型二、模型1)的加速比分別爲4.0八、4.22和4.25,圖7(b)中的加速比分別爲3.8九、4.22和3.89。圖7(a)稍優於圖7(b),主要歸結於前者具備更合理的集羣設置。圖7(a)中總任務數等於總模擬數,所以做業被分爲多個任務,這有利於任務負載均衡和充分利用計算資源。

Hadoop下水環境模擬集羣運算模式
圖7 加速比/計算節點個數對比

並且,模型的大小與加速比在整體上呈現相關關係,集羣中低複雜度模型(模型1)得到的加速比明顯高於中複雜度模型(模型2),中複雜度模型得到的加速比明顯高於高複雜度模型(模型3)。不考慮模型複雜度,除了當計算節點爲1時,2種模式加速比相似接近理想值1以外,隨着計算節點增長,3種不一樣複雜度模型的加速比均與計算節點呈現近似線性關係,且圖7(a)中不一樣複雜度模型得到的加速比均明顯高於圖7(b)中對應模型得到的加速比。複雜度越高的模型會損失越多的加速比,其主要緣由在於模型計算越複雜,對磁盤I/O需求越大,模擬結果寫入磁盤耗時越長。
最後,集羣中動態增刪計算節點測試(圖8)結果顯示,在做業1~做業19的運行過程當中,每一個做業運行時間維持在600 s;當第20個做業運行時,關閉2個計算節點,運行時間迅速升至1 300 s左右,而後平緩下降至900 s左右(位於做業39處);當在做業40處增長一個計算節點時,做業運行時間緩慢降至740 s左右(位於做業59處);當在做業60處再增長一個計算節點時,集羣恢復起始狀態,做業運行情況和做業1~做業19相似;當在做業79處關閉3個計算節點時,做業80的運行時間迅速升至1 500 s左右,而後緩慢降到1 200 s左右,直至剩餘做業計算完成。研究結果代表,集羣運行過程當中動態增刪計算節點會影響計算做業的執行過程,可是不會形成計算任務的失敗和集羣環境崩潰,證實集羣模式具備優秀的容錯性、可擴展性和可靠性。

Hadoop下水環境模擬集羣運算模式
圖8 集羣中動態增刪計算節點測試

4 結束語

水環境模型結構的日益複雜和應用的不斷深刻,對高性能計算和海量數據處理提出了新挑戰。積極探索利用大數據技術將各類計算資源聚合,實現協同計算,是現代水環境模擬面臨的一個迫切需求。本文基於大數據分佈式計算框架,創建了一種適用於水環境模型批量模擬計算的運算模式。實例驗證了Hadoop MapReduce環境下Delft3D模型集羣運算模式的可行性,結果代表集羣運算模式可顯著加快運算過程,可提供良好的橫向擴展和容錯的模型運行環境,是解決水環境模擬大規模批量計算需求的一種理想方法。集羣運算模式的軟件體系基於開源技術架構,硬件體系基於商業PC或者服務器,所以,集羣構建具備過程靈活、節約成本的特色,適用於參數率定、不肯定性分析以及情景決策等批量計算應用場景。同時該模式也適用於其餘環境建模,具備較強的通用性。

相關文章
相關標籤/搜索