夏正龍,傅承浩,朱亮,呂冠儒,鐘艷雯
(1.湖南省氣象信息中心,長沙 410118;2.湖南省氣象防災減災重點實驗室,長沙 410118;3.湖南省氣象臺,長沙 410118)
當今,數(shù)值天氣預報取得了迅速的發(fā)展,數(shù)值預報模式和物理過程參數(shù)化方案不斷完善,數(shù)值預報水平在不斷提高,數(shù)值天氣預報已成為每天氣象預報的制作不可缺少的重要基礎和手段[1-2]。預報員每天面對各類數(shù)值模式產(chǎn)品,如何方便快捷地獲取模式產(chǎn)品就成為預報業(yè)務人員的迫切需求。湖南省氣象臺技術人員通過Python等工具成功實現(xiàn)將ECMWF細網(wǎng)格、GRAPES全球、GRAPES中尺度高分辨率、GRAPES3KM、日本中分辨率、德國高分辨率、廣州3KM、上海中分辨率等模式產(chǎn)品生成對應的圖片、文本格式供網(wǎng)站調(diào)用顯示,包括降水類、動力類、熱力類、地面分析類、不穩(wěn)定指數(shù)等共計40多種,每天8∶00、20∶00兩個時次,每個時次共計約3.3萬PNG圖片文件,1.3萬JSON文本文件。
氣象大數(shù)據(jù)云平臺(“天擎”)2020年11月通過業(yè)務驗收評審,在全國投入業(yè)務試運行,各級氣象部門也正逐步開展氣象大數(shù)據(jù)云平臺的研究[3-5],“天擎”建立以分布式關系型數(shù)據(jù)庫、分布式分析型數(shù)據(jù)庫、分布式表格系統(tǒng)、分布式文件系統(tǒng)等多種技術相結合的可擴展、高可用的數(shù)據(jù)存儲管理系統(tǒng),提供結構標準、功能豐富的數(shù)據(jù)訪問服務和應用編程接口,為省、市、縣各級以及云上應用提供唯一權威的數(shù)據(jù)接入服務,本文基于“天擎”所共享的數(shù)據(jù)、接口、容器三大類資源,研究省臺模式產(chǎn)品的云化實現(xiàn),為推進業(yè)務融入改造提供技術支持。
氣象數(shù)據(jù)具有大容量、高速增長、維度高、實時性高、存儲時效長等特點,氣象數(shù)據(jù)的類型多,具有結構化數(shù)據(jù)和非結構化數(shù)據(jù)的特征,針對不同的氣象數(shù)據(jù)類型,“天擎”采用不同的分布式數(shù)據(jù)庫系統(tǒng)存儲策略,數(shù)據(jù)云化存儲主要完成數(shù)據(jù)注冊、數(shù)據(jù)存儲管理,數(shù)據(jù)注冊即分配標準、合規(guī)的四級編碼[6],納入業(yè)務全流程管理、可面向其他用戶進行開發(fā)共享的數(shù)據(jù)或產(chǎn)品的注冊;數(shù)據(jù)存儲包括應用專題庫、云數(shù)據(jù)庫,專題庫可以將自己申請和注冊的數(shù)據(jù)統(tǒng)一分類管理,云數(shù)據(jù)庫向用戶提供定制化、高性能、高可靠、易用便捷的存儲體系,可用于存儲應用系統(tǒng)的元數(shù)據(jù)信息和應用中間結果。
圖1 模式產(chǎn)品文件索引表結構
圖2 數(shù)據(jù)管理工具
模式產(chǎn)品主要以圖片、文本格式存儲,屬于非結構化數(shù)據(jù),設計采用“文件+索引”存儲方式,選擇專題庫分類管理,文件存儲在NAS中,索引采用文件索引庫存儲。模式產(chǎn)品包括單模式單要素產(chǎn)品、多模式多要素集成產(chǎn)品等多種類型,因此文件索引表結構設計包含文件的基本信息(文件名、文件大小、文件格式、存儲路徑、資料時間、產(chǎn)品編碼等)和模式產(chǎn)品的關聯(lián)信息(預報時效、數(shù)據(jù)范圍、時效間隔、預報時間、模式層數(shù)、模式名稱、要素名稱、海拔高度等)兩方面內(nèi)容。通過申請四級編碼、填報表結構字段、文件索引數(shù)據(jù)庫選擇等,完成數(shù)據(jù)產(chǎn)品云化結構配置,并利用“天擎”數(shù)據(jù)管理工具進行文件索引數(shù)據(jù)記錄的管理。
統(tǒng)一、標準、豐富的數(shù)據(jù)訪問服務和應用編程接口(API),為省、市、縣各級應用系統(tǒng)提供唯一權威的數(shù)據(jù)接入服務[7],接口云化實現(xiàn)包括新增接口發(fā)布和接口測試,新增數(shù)據(jù)接口發(fā)布完成對注冊數(shù)據(jù)進行接口發(fā)布功能,主要實現(xiàn)讀取接口和寫入接口功能云化,并通過接口測試實現(xiàn)對需測試的接口,填寫接口參數(shù),生成并執(zhí)行接口請求,查看接口返回值,完成新增接口的測試。
新增數(shù)據(jù)接口發(fā)布,根據(jù)資料代碼,設置參數(shù),配置讀取接口和寫入接口,實現(xiàn)接口的發(fā)布功能,能提供數(shù)據(jù)的獲取、回寫等功能,讀取接口提供共享服務,寫入接口提供產(chǎn)品文件回寫到“天擎”存儲。
(1)讀取接口設計,采用“產(chǎn)品文件”接口屬性,設計查詢時間跨度及相關限制條件等參數(shù),確定需要的接口清單,實現(xiàn)讀取接口配置,正確完成讀取接口配置后,可通過對配置的接口進行測試,正確返回數(shù)據(jù)查詢結果后即可共享發(fā)布,向用戶提供統(tǒng)一、規(guī)范的數(shù)據(jù)訪問編程接口。
圖3 讀取接口配置
圖4 讀取接口調(diào)用測試
(2)寫入接口設計采用“產(chǎn)品文件寫入”接口屬性,設計根路徑、寫入資料路徑等參數(shù),確定需要的接口清單,完成寫入接口云化配置。
圖5 寫入接口配置
完成寫入接口云化配置后,可通過寫入接口實現(xiàn)數(shù)據(jù)產(chǎn)品的回寫,調(diào)用寫入接口需要從“天擎”數(shù)據(jù)環(huán)境中獲取數(shù)據(jù)或產(chǎn)品的應用編程開發(fā)包,根據(jù)開發(fā)語言選擇相應的客戶端開發(fā)包,并通過編程調(diào)用寫入接口函數(shù),按照函數(shù)調(diào)用參數(shù)要求,正確輸入接口的各項參數(shù),實現(xiàn)產(chǎn)品或數(shù)據(jù)的寫入功能。
圖6 客戶端開發(fā)包
數(shù)據(jù)寫入代碼(Python語言)如下:
def SaveFilesClient(self,fullFileDir,data_ID,RYMDHM,Datetime,FILE_NAME,FORMAT,FILE_SIZE,Validtime_C,Data_Area,V_INTERVAL,Year,Mon,Day,Hour,LEVEL,V_PROD_NAME, V_MO_NAME_1, V_PROD_ELE_1,V_LEVEL_1,V_MO_NAME_2="-",V_PROD_ELE_2="-",V_LEVEL_2="-",V_MO_NAME_3="-",V_PROD_ELE_3="-",V_LEVEL_3="-",V_MO_NAME_4="-",V_PROD_ELE_4="-",V_LEVEL_4="-"):
#1.定義client對象
client=DataStoreClient()
#2.調(diào)用方法的參數(shù)定義,并賦值
#2.1用戶名&密碼
userId="###"
pwd="####"
#2.2接口ID(刪除站點、指數(shù)等數(shù)據(jù))
interfaceId="saveFiles"
#2.3服務節(jié)點ID
serverId="NMIC_MUSIC_CMADAAS"
#2.4接口參數(shù),多個參數(shù)間無順序
#必選參數(shù)(1)資料代碼(2)要素字段代碼(鍵值))。
params={‘dataCode‘:"OTHE_NAFP_PRODUCT_PIC_FILE_BECS",‘Elements‘:"DATA_ID,RYMDHM,Datetime,FILE_NAME,FORMAT,FILE_SIZE,Validtime_C,Data_Area,V_INTERVAL,Year,Mon,Day,Hour,LEVEL,V_PROD_NAME,V_MO_NAME_1,V_PROD_ELE_1,V_LEVEL_1,V_MO_NAME_2,V_PROD_ELE_2,V_LEVEL_2,V_MO_NAME_3,V_PROD_ELE_3,V_LEVEL_3,V_MO_NAME_4,V_PROD_ELE_4,V_LEVEL_4"}
#2.5要素值信息
inArray2D=[[data_ID,RYMDHM,Datetime,FILE_NAME,FORMAT,FILE_SIZE,Validtime_C,Data_Area,V_INTERVAL,Year,Mon,Day,Hour,LEVEL,V_PROD_NAME,V_MO_NAME_1,V_PROD_ELE_1,V_LEVEL_1,V_MO_NAME_2,V_PROD_ELE_2,V_LEVEL_2,V_MO_NAME_3,V_PROD_ELE_3,V_LEVEL_3,V_MO_NAME_4,V_PROD_ELE_4,V_LEVEL_4]]
ftpfiles=[fullFileDir];#3.調(diào)用接口
result=client.callAPI_to_storeFile(userId,pwd,interfa?ceId,params,inArray2D,ftpfiles,serverId)
#4.輸出結果
if result.errorCode==0:
print("Upload Files Succeed")
else:
print("return code:",result.errorCode)
print("return message:",result.errorMessage)
容器技術可以讓開發(fā)者打包應用及依賴包到可移植容器中,發(fā)布到任意版本的Linux服務器上[8],“天擎”提供根據(jù)算法任務應用場景對算法進行加載和部署,按需選擇計算框架,分配計算資源,容器功能是其中重要的一項功能[9],模式產(chǎn)品生成算法從Cassandra分布式數(shù)據(jù)庫中獲取實時模式資料,并插值成統(tǒng)一的分辨率,調(diào)用畫圖等模塊實現(xiàn)繪圖,繪圖類型包括色斑圖contourf、等值線圖contour、風向圖barb、郵票圖、單站時序圖等,實現(xiàn)了各氣壓層的氣象要素疊加圖、不同預報時效的郵票圖、不同模式對比的郵票圖、單站時間變化垂直剖面圖,以及單站的TLOG-P圖等,同時還生成單站氣象要素json格式的數(shù)據(jù)文件等,需要通過anaconda工具包提供的Python環(huán)境,安裝cartopy,meteva,metpy等多種模塊,運行環(huán)境比較復雜,Docker容器技術提供了很好的解決方案。本文研究將模式產(chǎn)品生成算法所需的Python及相關組件運行環(huán)境制作成Docker鏡像,部署到“天擎”平臺,完成模式產(chǎn)品生成算法的云化。生成Docker鏡像的DockerFile文件內(nèi)容如下:
#Base images基礎鏡像
FROM python:3.7
#MAINTAINER維護者信息
MAINTAINER xzl
#ADD文件放在當前目錄下,拷過去會自動解壓
ADD Anaconda3-2020.11-Linux-x86_64.sh/home/py?thon/
WORKDIR/home/python
RUN apt-get update
RUN apt-get install sudo
RUN sudo apt update
RUN sh-c‘/bin/echo-e"yes"|sudo apt install libgl 1-mesa-glx‘
RUN sh-c‘/bin/echo-e" yes yes"|sh Anaconda3-2020.11-Linux-x86_64.sh‘
ENV PATH/root/anaconda3/bin:$PATH
WORKDIR/root/anaconda3/bin
RUN sh-c‘/bin/echo-e"yes"|conda install cartopy‘
RUN pip install meteva
WORKDIR/home/python
將生成的Docker鏡像部署到“天擎”平臺,利用鏡像生成容器,再通過容器完成模式產(chǎn)品生成算法的云行。
(1)生成容器。docker run-v$PWD/model:/usr/src/model-w/usr/src/model-it nafppiccreatepy?thonenviorment:3.8.1(鏡像名:TAG)/bin/bash
(2)啟動容器。docker start 86bc8d613b9d(容器ID)
(3)容器外執(zhí)行代碼。docker exec-it 86bc8d-613b9d/bin/bash-c‘cd/usr/src/model&&/root/ana?conda3/bin/python3 Simpleplot.py(算法樣例)‘
圖7 算法容器運行產(chǎn)品樣例
模式產(chǎn)品為各級氣象預報業(yè)務人員提供重要的參考數(shù)據(jù),“天擎”以其結構標準、功能豐富的數(shù)據(jù)訪問和編程接口,成為各級氣象部門進行業(yè)務融入的關鍵。本文基于“天擎”所共享的數(shù)據(jù)、接口、容器三大類資源,研究如何將大量模式圖片產(chǎn)品和json信息產(chǎn)品實現(xiàn)云化,為推進業(yè)務融入改造提供技術支持。通過對數(shù)據(jù)云化存儲,接口云化實現(xiàn),以及模式產(chǎn)品生成算法的云化技術,完成了基于“天擎”的模式產(chǎn)品云化技術的研究和實現(xiàn),為其他業(yè)務系統(tǒng)進行“天擎”融入提供借鑒思路。