朱曉輝 瞿 波 任紅健
1(南通大學計算機科學與技術學院 江蘇 南通 226019)2(南通大學理學院 江蘇 南通 226019)
?
云計算環境下格陵蘭海鹽度數據提取算法研究
朱曉輝1瞿波2*任紅健1
1(南通大學計算機科學與技術學院江蘇 南通 226019)2(南通大學理學院江蘇 南通 226019)
摘要海洋鹽度與海洋浮游植物和海洋溫度具有緊密聯系,是研究海洋環流和海洋對氣候影響的重要參量。以美國NOAA全球海洋信息數據庫為數據來源,以經度65°N -85°N、維度20°W -10°E之間的北極格陵蘭海地區為研究區域,詳細討論鹽度數據的提取,提出時間復雜度為O(n)的鹽度數據分步歸并算法。利用微軟Azure公有云按需付費、動態擴展的特點,獲取廉價、便捷的計算資源,大大提升了計算效率。該算法具有很強的可擴展性,可以根據實際計算需求動態調整所需的計算資源,從而能滿足不同計算規模的需求。實驗結果表明,該算法可以對海量原始鹽度數據進行快速分析和歸并,生成經緯度、時間、鹽度三個維度上的數據。
關鍵詞鹽度格陵蘭海經緯度數據提取歸并算法云計算
0引言
海洋鹽度是研究海洋環流和海洋對氣候影響的重要參量。目前,由于技術限制和人們對鹽度遙感的認識不足,鹽度遙感觀測技術遠遠滯后于研究的需要,鹽度遙感的研究幾乎處于停滯不前的狀態。近年來,一些鹽度數據庫紛紛興起,但鹽度數據提取方法的研究在國內還屬于初級階段。由于鹽度資料在時空分布上的不足,對鹽度的研究帶來了困難。
一些研究者試圖用各種方法來處理鹽度數據。陳建等[1]用Matlab對基于二進制的混合文件格式的鹽度數據的處理做了讀寫操作方法的研究;朱江等[2]介紹了一個三維變分海洋資料通話系統的設計方案,在海面高度資料同化中引入了一個新的考慮了背景場誤差的垂直相關性和非線性的溫-鹽關系的同化方案,結果有效地改進了對海洋溫度和鹽度的估計。
為研究北極的鹽度數據,我們利用美國NOAA網站數據庫,采用歸并算法[5]思想,并利用云計算按需申請、動態分配、快速部署等特點,多步驟依次對數據進行歸并處理,第一次對鹽度數據在云計算環境下的提取作了嘗試性研究。該研究成果可以很方便地應用于其它海洋數據的提取和處理,為課題所需的其它基礎數據的獲取和分析打下了堅實基礎。
1技術背景
美國NOAA網站數據庫保存了全球海洋鹽度數據,用戶可以通過設定經緯度、日期、測量值類型(例如:風力,溫度,鹽度等)、下載數據文件格式等不同的查詢參數來獲取不同地區、不同類型的數據,并通過FTP服務供用戶下載。
1.1數據提取
因本課題主要對北極地區生態系統進行研究,所以我們只需提取位于經度為65°N -85°N、緯度為20°W -10°E之間的鹽度數據。由于鹽度數據量非常龐大,為方便數據處理,我們以5度為一個經度單位,分4次依次提取65°N-70°N,70°N-75°N,75°N-80°N,80°N-85°N之間的數據。
1.2數據分析
對下載的數據初步分析后發現,不同區域的數據量各不相同,同一區域數據還具有多種數據格式,不同格式數據文件的數據量也不一樣,有的只有幾萬條記錄,而有的多達幾十萬條記錄??紤]到數據的精確性,在每個區域中我們選擇數據量最大的數據文件進行數據分析和統計。原始的數據文件格式如圖1所示。

圖1 原始數據文件格式
雖然不同格式數據文件中數據量各不相同,但其數據格式基本與圖1類似。每個鹽度數據都以“#------”開始,以“END OF VARIABLES SECTION”和“#------”結束。每個數據都包含有經緯度、日期、海水深度、鹽度等信息。
1.3云計算
云計算是信息平臺和服務的一種業務模式, 是通過網絡統一組織和靈活調用各種ICT 資源,實現大規模計算的信息處理方式[8]。其所特有的按需付費、高可用性、高可靠性和高可擴展性等特點使其逐漸成為繼水、電、氣及通信技術之后的第五大公共平臺,成為一個戰略性新興產業[9],是一種面向未來的新的計算模式[10-12]。與傳統的分布式計算相比,其具有:可以根據計算規模的大小動態租用云計算資源,并能實現分布式環境的快速部署和復制;可以根據計算時間實現按需付費;避免用戶購買昂貴的硬件設施,極大降低計算成本,提升計算效率等多種優勢。
由于我們在數據提取過程中獲取了海量的鹽度數據,為提升數據處理效率、降低數據處理成本,同時避免自己搭建分布式計算環境的麻煩,我們嘗試利用微軟Azure公有云計算平臺來實現對鹽度數據的處理,并對其進行分析和評估,為后續工作中需要提取和處理其它類型的海量數據積累經驗。
2技術背景
2.1數據提取格式
根據鹽度數據研究的實際要求,需要對圖1中的數據進行分析和提取,形成如表1所示的規整鹽度數據。其中,經度和緯度字段需通過四舍五入操作轉換成整數。

表1 鹽度數據主要字段
2.2數據提取難點
由于原始鹽度數據格式的復雜性,生成如表1所示的格式規整的鹽度數據有以下幾個難點。
(1) 數據格式不規范:雖然大部分鹽度數據格式和字段數量都相同,但有少數鹽度數據與其他正常鹽度數據相比會多幾個或少幾個字段,有的甚至只有測量時間和地點,卻沒有相應鹽度數據。由于鹽度數據量巨大,因此無法逐一人工排查和刪除非規范鹽度數據,這為數據歸并算法的設計帶來了很大挑戰。
(2) 各測量點的隨機性:原始數據中,各測量點經緯度坐標具有很大隨機性,有的經緯度坐標相隔較遠,通過四舍五入取整后可以歸類到不同的經緯度坐標。有的經緯度坐標相互間靠得非常近,通過四舍五入取整后,需要歸類到同一個經緯度坐標,這就需要對這些鹽度數據進行合并后求其平均值。
(3) 測量深度的隨機性:有的測量點以1米為深度間隔,同一個測量點記錄了數千個不同海水深度的鹽度數據;有的測量點以幾十米至幾百米的深度為間隔,同一個測量點只記錄少量的不同海水深度的鹽度數據;還有的測量點只記錄海水深度,卻沒有記錄相應的鹽度數據。這為數據按海水深度歸并成表1所示的5個不同深度的鹽度數據帶來了困難。
(4) 測量時間的隨機性:有的測量點一個月內進行了多次測量,有的測量點上可能只測量了很少的幾次甚至沒有測量。同一個測量點上,在不同的時間段內,其測量的次數也具有隨機性和不確定性,這為數據按時間維度進行歸并帶來了困難。
(5) 鹽度數據量巨大:由于每個測量點上都可能有數千條不同深度的鹽度數據,因此整個區域的數據量非常巨大,即使把北極的格陵蘭海地區分為4個區域分別下載原始的鹽度數據,每個區域的鹽度數據的CSV文件都有幾十MB大小,近百萬條記錄。這就對數據處理算法提出了很高的要求,需要設計出能快速處理海量鹽度數據的算法和處理程序。
2.3數據提取算法
為提高數據處理效率,降低算法復雜性,本文設計了分步數據歸并算法[6]。與常規的數據歸并算法一般先要對數據進行分塊和排序,然后再進行歸并[7]不同,本文的歸并是對現有的數據進行計算并根據計算的結果對數據進行合并操作,即把一個大的數據集經過多次歸并運算后得到一個小的結果集?;静襟E如下:
(1) 按測量深度進行數據歸并:把每個測量點上不同深度的鹽度數據歸并為“小于50米”、“50至100米”、“100至150米”、“150至200米”、“大于200米”共5個不同深度鹽度數據。
(2) 按測量點進行數據歸并:對歸并后的鹽度數據按經緯度和測量時間排序,然后再對各測量點的經緯度進行四舍五入取整操作,并對歸類到相同經緯度坐標上同一天的鹽度數據進行合并。
(3) 按測量時間進行數據歸并:對二次歸并后鹽度數據按時間排序,并按照系統設定的時間間隔把小于間隔時間并且經緯度相同的鹽度數據再次歸并。
2.3.1按測量深度進行數據歸并的算法
對圖1所示的原始鹽度數據的格式進行分析發現鹽度數據格式有以下幾個特點:
(1) 測量點的數據以“#---”開始,以“#---”結束。其中,鹽度數據以“Prof-Flag”標識開始,以“END OF VARIABLES SECTION”結束。
(2) 每個測量點都有經度、維度、測量年份、測量月份、測量日期等幾個字段信息。但因數據格式及每個測量點上數據量不固定,其在數據記錄中的位置也不盡相同。
(3) 個別鹽度數據只記錄了海水深度,但卻無對應的鹽度數據。
根據以上鹽度數據的特點,本文設計了按測量深度進行數據歸并的算法,算法流程如圖2所示。

圖2 按測量深度的數據歸并算法流程
算法執行步驟如下:
(1) 打開數據文件設定行號row=1;
(2) 獲取第row行,第1列元素rx=Cells[row,1];
(3) 若rx==null,則為最后一行記錄,算法運行結束,否則轉步驟(4);
(4) r1= Cells[row,1],若r1= =“prof-flag”,則該測量點有鹽度數據,轉步驟(5),否則該測量點無鹽度數據,轉步驟(10);
(5) 從第row行開始,向上搜索日期信息“Day”、“Month”、“Year”以及經緯度“Longitude”和“Latitude”,并保存;
(6) 從row+1行開始依次獲取不同海水深度的鹽度數據r=Cells[row,1];
(7) 若r!=“END OF VARIABLES SECTION”,則獲取該鹽度數據所對應的海水深度,并按表1所示,分別對5個鹽度數據進行匯總統計,否則直接轉入步驟(9);
(8) 獲取下一個鹽度數據r=Cells[++row,1],轉步驟(7);
(9) 保存該測量點經緯度、時間及各海水深度的平均鹽度數據信息;
(10) rx=Cells[++row,1],轉步驟(3);
以上算法流程可以看出,該算法從數據文件的第一行開始,按序進行數據處理,整個算法只用了一個單層循環語句,時間復雜度為O(n)。該時間復雜度也是對數據進行批量處理的最優時間復雜度,因此該算法具有很好的處理性能。
2.3.2按測量點進行數據歸并的算法
按測量深度歸并后,以各測量點及測量時間為單位形成了規整的數據記錄。由于各測量點經緯度坐標具有隨機性,這就需要對通過四舍五入取整歸類到同一個整數經緯度坐標上的鹽度數據再次進行合并,并求他們的平均值。按測量點進行數據歸并的算法流程如圖3所示。

圖3 按測量點的數據歸并算法流程
其算法基本執行步驟如下:
(1) 打開按測量深度進行歸并后的鹽度數據文件;按經度和維度進行排序;
(2) 設row=1;取第row行第一列元素r=Cells[row,1];
(3) 若r等于空,則表示已處理完全部數據,程序結束,否則進入步驟(4);
(4) 對當前行的經緯度進行四舍五入取整,并設定臨時變量tmpI=row;
(5) tmpI++, 取下一行數據的經緯度并進行四舍五入取整;
(6) 若兩個經緯度不完全相同,則無需合并,轉入步驟(9),否則轉入步驟(7);
(7) 對鹽度數據進行合并運算;
(8) 轉入步驟(5);
(9) row=tmpI; r=Cells[row,1]轉入步驟(3)。
從上面算法流程可以看出,該算法的時間復雜度也為O(n)。按測量時間進行數據歸并的算法與以上兩個算法類似,這里不在贅述。通過分析不難得到,其算法時間復雜度也為O(n)。
3系統實現
3.1系統架構
整個系統由數據庫服務器、文件及配置服務器、主計算節點和若干個子計算節點組成,其架構如圖4所示。

圖4 系統架構
(1) 文件及配置服務器:保存原始鹽度數據文件及系統配置信息,所有計算子節點都根據本服務器系統配置信息獲取相應鹽度數據文件并進行計算和處理。
(2) 數據庫服務器:所有計算節點把從原始鹽度數據文件獲取的基礎數據保存到數據庫服務器中,方便將來進行其它形式處理時無需再重復訪問原始數據文件。
(3) 子計算節點:從文件及配置服務器上下載相應的鹽度數據文件,并自動維護和修改相應配置信息,根據2.3節的數據歸并算法完成對該鹽度數據文件的處理和歸并。
(4) 主計算節點:用于接收從各計算子節點處理完畢的鹽度數據,并完成最后的數據排序和合并。
系統部署和運行流程如下:
(1) 在Windows Azure中創建四臺虛擬機分別作為文件和配置服務器、數據庫服務器、主計算節點和一個子計算節點。
(2) 所有的原始數據文件保存到文件和配置服務器,并在配置文件中設置所有文件的保存路徑、文件名、是否已被處理等信息。
(3) 把數據歸并算法程序部署到子計算節點,并為其設置文件和配置服務器、數據庫服務器和主計算節點的地址信息,使子計算節點能自動獲取、處理、保存和上傳數據。
(4) 用虛擬機復制技術來快速部署多個子計算節點。
(5) 子計算節點被部署和運行后,自動訪問文件和配置服務器,并下載還未被處理的原始鹽度數據文件,讀取數據,保存到數據庫,并進行歸并處理。
(6) 子計算節點的數據處理完后,自動提交到主計算節點,并再次訪問文件和配置服務器獲取下一份還未處理的數據文件。
(7) 主計算節點每次接收到子計算節點的數據后驗證接收數據的次數和文件和配置服務器中的原始文件數是否相等,若相等則表示已經接收到所有的數據,則開始進行最后的排序和歸并,并輸出結果,若不相等則繼續等待。
整個系統架構可以根據實際數據量的大小來動態調整子計算節點的個數,可以把原始數據劃分成多個數據文件,分發給多個子計算節點同時計算。
3.2系統實現
算法程序基于微軟.NET Framework 4.5平臺,采用C#語言開發。實驗運行環境為:Windows Azure公有云,虛擬機為AMD雙核,2GB內存,Windows Server 2012 64位操作系統,Sql Server 2012數據庫。整個系統共由6個虛擬機構成,分別為1個主計算節點、3個子計算節點、一個數據庫服務器和一個文件及配置服務器。
4實驗結果與分析
4.1算法效率分析
以對經度65°N -70°N,維度20°W -10°E之間的鹽度數據進行處理為例。我們把這些數據大致均分到6個單獨的數據文件,分別采用1個子計算節點、2個子計算節點和3個子計算節點來重復處理這些數據,實驗發現用2個子計算節點比1個子計算節點節約了大約45%的時間,3個子計算節點比1個子計算節點節約了大約62%的時間。以上可以看出,利用云計算技術,我們可以快速部署相應虛擬機來實現分布式計算,有效提高計算效率、降低計算成本,同時又避免了自己搭建分布式計算環境的麻煩。
該區域原始鹽度數據量為1 002 773條記錄,首先按測量深度進行歸并后得到11 250條有效數據,再經按測量點進行鹽度數據歸并運算后得到1082條記錄,最后按測量時間以月為單位歸并后得到513條有效數據。容易看出,算法第一次執行歸并時,數據量從百萬級別降低到萬的級別,執行第二次歸并后從萬的級別降低到千的級別,最后降低到百的級別。而每次歸并算法的時間復雜度都為O(n),因此整個算法的時間復雜度主要取決于第一次的數據歸并算法,即為O(n)。
4.2鹽度在北極格陵蘭海地區的分布
我們提取了2003-2012年北極格陵蘭海地區65°N -85°N、20°W -10°E的全部鹽度數據。由于北極很大一部分時間是處于極夜,所以我們注重于從每年的第72天到第272天(3~9月)的數據。最后得出所研究區域10年內的數據分布情況。
圖5是研究區域鹽度在10年內的年平均值。圖6是研究區域在10年內的月平均值,這里都是取的1200米的深度平均。從圖5可以看出,2003年鹽度最低,其次就是2006年的鹽度相對比較低。從圖6可以看出,鹽度在3月到5月整體穩定,但在6月出現明顯下降,之后從7月到9月持續增長,上升趨勢明顯。 圖7給出了鹽度在研究區域10年內的平均分布三維圖,從圖中可以看出,鹽度整體處于相對穩定的狀態, 起伏幅度不大。

圖5 鹽度在研究區域的10年的年平均值

圖6 鹽度在研究區域的10年的月平均值

圖7 鹽度在研究區域的整體平均值分布
通過對原始的海量鹽度數據進行歸并計算后,我們以非常直觀的圖形,描繪出了10年來格陵蘭海地區的海水鹽度的變化,為后續研究提供有力的數據支持。
5結語
海洋鹽度數據量非常龐大,而受制于北極氣候條件和現有科考條件等限制,北極地區的鹽度數據無論是在時間跨度、經緯度特征還是數據采樣分布等屬性上都不規整,這為數據的提取帶來了很大難度。本文對北極海洋鹽度數據的提取只是一個初步的嘗試,但為溫度、浮游生物等后續數據的提取有重要的借鑒意義。對于特別巨大的數據,可以利用本文的方法把原始數據劃分為多個數據集,并利用云計算技術同時進行分布式歸并運算,最后把歸并后的數據再集中到一起進行總的歸并后得到最終結果。云計算按需付費、高可擴充性、廉價等特點尤其適合用于開展地理和環境方面大規模的科學計算和研究,不但可以大大提升數據處理效率,還有效避免了自己建立傳統的分布式計算環境的復雜性、降低計算成本。本文的研究成果為后續海洋溫度數據和海洋浮游植物數據的提取以及三者之間關系的研究打下了良好的基礎。
參考文獻
[1] 陳建,張韌,王輝贊,等.Matlab對基于二進制-XML混合格式的SMOS鹽度數據的提取方法與實現[J].海洋通報,2011(6):692-696.
[2] 朱江,周廣慶,閆長香,等.一個三維變分海洋資料同化系統的設計和初步應用[J].地球科學(D輯),2007,37(2):261-271.
[3] Stroeve J,Holland M M,Meir W,et al.Arctic sea ice decline: faster than forecast[J].Geophysical Research Letters,2007,63(1):1-11.
[4] Qu B,Gabric A J,Matrai P A.The Satellite-Derived Distribution of Chlorophyll-a and its Relation to Ice Cover,Radiation and Sea Surface Temperature in the Barents Sea[J].Polar Biology,2006,29:196-210.
[5] 王穎,李肯立,李浪,等.縱橫多路并行歸并算法[J].計算機研究與發展,2006,43(12):2180-2186.
[6] 范時平,汪林林.一種基于數據分塊的快速原地歸并算法[J].計算機科學,2004,31(8):204-208.
[7] 姜忠華,徐文麗,劉家文,等.智能歸并排序[J].電子設計工程,2011,19(21):53-55.
[8] 工業與信息化部電信研究院.云計算白皮書[R].2012.
[9] 李國杰.應用為先,統籌規劃——關于云計算發展策略的思考[M]//中國信息化形勢分析與預測.社會科學文獻出版社,2012:107-120.
[10] Antonio,Corradi,Mario,et al.VM consolidation:A real case based on OpenStack Cloud[J].Future Generation Computer Systems,2014,36:118-127.
[11] Amazon EC2 Instances-Cluster Networking[EB/OL].http://aws.amazon.com/ec 2/instance-types.
[12] Armbrust M,Fox A,Griffith R,et al.A view of cloud computing[J].Communications of the ACM,2010,53:50-58.
收稿日期:2014-12-08。國家自然科學基金項目(41276097,4130 1514);江西省高性能重點實驗室項目(PKLHPC1303)。朱曉輝,副教授,主研領域:計算機軟件與理論。瞿波,副教授。任紅健,副教授。
中圖分類號TP391
文獻標識碼A
DOI:10.3969/j.issn.1000-386x.2016.07.021
RESEARCH ON SALINITY DATA EXTRACTION ALGORITHM FOR GREENLAND SEA IN CLOUD COMPUTING ENVIRONMENT
Zhu Xiaohui1Qu Bo2*Ren Hongjian1
1(SchoolofComputerScienceandTechnology,NantongUniversity,Nantong226019,Jiangsu,China)2(SchoolofScience,NantongUniversity,Nantong226019,Jiangsu,China)
AbstractOcean salinity has close relationship with ocean temperature and marine phytoplankton, and is one of the important parameters in the study of the influence of ocean circulation and ocean on climate. This paper discusses in detail the extraction of salinity data, of which the world ocean information database of American National Oceanographic Data Centre (NOAA) is used as the data resource, and the area of the Greenland Sea in Arctic within 20°W - 10°E, 65°N - 85°N is taken as the studying region. We propose a multi-steps merging algorithm for salinity data with a time complexity of O(n), it utilises the characteristics of Microsoft Azure public cloud that pay-on-demand and dynamic expansion to capture the cheap and convenient computation resources, and greatly improves computation efficiency. The algorithm has strong scalability and is able to dynamically adjust the required computation resources according to actual computation demand, therefore can meet the demands of different computation sizes. Experimental result shows that this algorithm can fast analyse and merge massive original salinity data and creates the formatted salinity data in 3 dimensions: longitude and latitude, time and salinity.
KeywordsSalinityGreenland seaLongitude and latitude coordinatesData extractionMerging algorithmCloud computing