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