夏正龍,傅承浩,朱亮,呂冠儒,鐘艷雯
(1.湖南省氣象信息中心,長沙 410118;2.湖南省氣象防災減災重點實驗室,長沙 410118;3.湖南省氣象臺,長沙 410118)
當今,數值天氣預報取得了迅速的發展,數值預報模式和物理過程參數化方案不斷完善,數值預報水平在不斷提高,數值天氣預報已成為每天氣象預報的制作不可缺少的重要基礎和手段[1-2]。預報員每天面對各類數值模式產品,如何方便快捷地獲取模式產品就成為預報業務人員的迫切需求。湖南省氣象臺技術人員通過Python等工具成功實現將ECMWF細網格、GRAPES全球、GRAPES中尺度高分辨率、GRAPES3KM、日本中分辨率、德國高分辨率、廣州3KM、上海中分辨率等模式產品生成對應的圖片、文本格式供網站調用顯示,包括降水類、動力類、熱力類、地面分析類、不穩定指數等共計40多種,每天8∶00、20∶00兩個時次,每個時次共計約3.3萬PNG圖片文件,1.3萬JSON文本文件。
氣象大數據云平臺(“天擎”)2020年11月通過業務驗收評審,在全國投入業務試運行,各級氣象部門也正逐步開展氣象大數據云平臺的研究[3-5],“天擎”建立以分布式關系型數據庫、分布式分析型數據庫、分布式表格系統、分布式文件系統等多種技術相結合的可擴展、高可用的數據存儲管理系統,提供結構標準、功能豐富的數據訪問服務和應用編程接口,為省、市、縣各級以及云上應用提供唯一權威的數據接入服務,本文基于“天擎”所共享的數據、接口、容器三大類資源,研究省臺模式產品的云化實現,為推進業務融入改造提供技術支持。
氣象數據具有大容量、高速增長、維度高、實時性高、存儲時效長等特點,氣象數據的類型多,具有結構化數據和非結構化數據的特征,針對不同的氣象數據類型,“天擎”采用不同的分布式數據庫系統存儲策略,數據云化存儲主要完成數據注冊、數據存儲管理,數據注冊即分配標準、合規的四級編碼[6],納入業務全流程管理、可面向其他用戶進行開發共享的數據或產品的注冊;數據存儲包括應用專題庫、云數據庫,專題庫可以將自己申請和注冊的數據統一分類管理,云數據庫向用戶提供定制化、高性能、高可靠、易用便捷的存儲體系,可用于存儲應用系統的元數據信息和應用中間結果。

圖1 模式產品文件索引表結構

圖2 數據管理工具
模式產品主要以圖片、文本格式存儲,屬于非結構化數據,設計采用“文件+索引”存儲方式,選擇專題庫分類管理,文件存儲在NAS中,索引采用文件索引庫存儲。模式產品包括單模式單要素產品、多模式多要素集成產品等多種類型,因此文件索引表結構設計包含文件的基本信息(文件名、文件大小、文件格式、存儲路徑、資料時間、產品編碼等)和模式產品的關聯信息(預報時效、數據范圍、時效間隔、預報時間、模式層數、模式名稱、要素名稱、海拔高度等)兩方面內容。通過申請四級編碼、填報表結構字段、文件索引數據庫選擇等,完成數據產品云化結構配置,并利用“天擎”數據管理工具進行文件索引數據記錄的管理。
統一、標準、豐富的數據訪問服務和應用編程接口(API),為省、市、縣各級應用系統提供唯一權威的數據接入服務[7],接口云化實現包括新增接口發布和接口測試,新增數據接口發布完成對注冊數據進行接口發布功能,主要實現讀取接口和寫入接口功能云化,并通過接口測試實現對需測試的接口,填寫接口參數,生成并執行接口請求,查看接口返回值,完成新增接口的測試。
新增數據接口發布,根據資料代碼,設置參數,配置讀取接口和寫入接口,實現接口的發布功能,能提供數據的獲取、回寫等功能,讀取接口提供共享服務,寫入接口提供產品文件回寫到“天擎”存儲。
(1)讀取接口設計,采用“產品文件”接口屬性,設計查詢時間跨度及相關限制條件等參數,確定需要的接口清單,實現讀取接口配置,正確完成讀取接口配置后,可通過對配置的接口進行測試,正確返回數據查詢結果后即可共享發布,向用戶提供統一、規范的數據訪問編程接口。

圖3 讀取接口配置

圖4 讀取接口調用測試
(2)寫入接口設計采用“產品文件寫入”接口屬性,設計根路徑、寫入資料路徑等參數,確定需要的接口清單,完成寫入接口云化配置。

圖5 寫入接口配置
完成寫入接口云化配置后,可通過寫入接口實現數據產品的回寫,調用寫入接口需要從“天擎”數據環境中獲取數據或產品的應用編程開發包,根據開發語言選擇相應的客戶端開發包,并通過編程調用寫入接口函數,按照函數調用參數要求,正確輸入接口的各項參數,實現產品或數據的寫入功能。

圖6 客戶端開發包
數據寫入代碼(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.調用方法的參數定義,并賦值
#2.1用戶名&密碼
userId="###"
pwd="####"
#2.2接口ID(刪除站點、指數等數據)
interfaceId="saveFiles"
#2.3服務節點ID
serverId="NMIC_MUSIC_CMADAAS"
#2.4接口參數,多個參數間無順序
#必選參數(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.調用接口
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)
容器技術可以讓開發者打包應用及依賴包到可移植容器中,發布到任意版本的Linux服務器上[8],“天擎”提供根據算法任務應用場景對算法進行加載和部署,按需選擇計算框架,分配計算資源,容器功能是其中重要的一項功能[9],模式產品生成算法從Cassandra分布式數據庫中獲取實時模式資料,并插值成統一的分辨率,調用畫圖等模塊實現繪圖,繪圖類型包括色斑圖contourf、等值線圖contour、風向圖barb、郵票圖、單站時序圖等,實現了各氣壓層的氣象要素疊加圖、不同預報時效的郵票圖、不同模式對比的郵票圖、單站時間變化垂直剖面圖,以及單站的TLOG-P圖等,同時還生成單站氣象要素json格式的數據文件等,需要通過anaconda工具包提供的Python環境,安裝cartopy,meteva,metpy等多種模塊,運行環境比較復雜,Docker容器技術提供了很好的解決方案。本文研究將模式產品生成算法所需的Python及相關組件運行環境制作成Docker鏡像,部署到“天擎”平臺,完成模式產品生成算法的云化。生成Docker鏡像的DockerFile文件內容如下:
#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鏡像部署到“天擎”平臺,利用鏡像生成容器,再通過容器完成模式產品生成算法的云行。
(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)容器外執行代碼。docker exec-it 86bc8d-613b9d/bin/bash-c‘cd/usr/src/model&&/root/ana?conda3/bin/python3 Simpleplot.py(算法樣例)‘

圖7 算法容器運行產品樣例
模式產品為各級氣象預報業務人員提供重要的參考數據,“天擎”以其結構標準、功能豐富的數據訪問和編程接口,成為各級氣象部門進行業務融入的關鍵。本文基于“天擎”所共享的數據、接口、容器三大類資源,研究如何將大量模式圖片產品和json信息產品實現云化,為推進業務融入改造提供技術支持。通過對數據云化存儲,接口云化實現,以及模式產品生成算法的云化技術,完成了基于“天擎”的模式產品云化技術的研究和實現,為其他業務系統進行“天擎”融入提供借鑒思路。