鄧國寶,查曉文,劉 濤,馮 燦,薛博文
(中國商飛試飛中心 測試工程部,上海 200120)
試飛數據主要包括飛行試驗采集的時序數據和業務流程生成的試飛任務信息數據。飛行試驗采集的時序數據具有參數量多、數據體量、數據種類多樣化、數據隨機性變化、數據多地產生、數據時效性需求高及數據價值大等特征。國產民機在試飛試驗階段,累積了大量的試飛數據,規模達到了PB級[1-2]。
早期國內外試飛數據主要采用文本形式存儲,數據快速應用存在較大困難,數據有效關聯受到很大限制,造成統文本文件的數據管理模式難以滿足日益增長的數據存儲與高效應用需求[3]。波音、空客等國外主制造商采用信息化技術,建立了AnalytX、Skywise等數據管理平臺,改進數據存儲方式,研制了數據查詢工具,提升數據應用效率[4-5]。
試飛數據查詢引擎融合新一代信息技術,設計新型數據存儲格式、創新試飛數據關聯方式、提升試飛數據查詢能力,提供更高效的試飛任務信息數據與飛行試驗數據融合應用服務,解決多源異構試飛數據復雜管理與試飛數據用戶快速高效應用的難題[6-8]。
如圖1所示,試飛數據查詢引擎是試飛數據平臺數據交互中樞系統,快速獲取平臺多類數據組件數據,開展數據加工處理后,向數據應用提供服務。試飛數據平臺采用三層架構,具有數據層、服務層和應用層等功能,提供綜合數據管理與應用服務[9]。試飛數據平臺采用分布式架構搭建大數據集群和云計算集群,提供動態彈性的計算、存儲、網絡等基礎設施及服務(IaaS,infrastructure as a service),以及數據庫、計算引擎、容器等平臺及服務(PaaS,platform as a service),研制基于瀏覽器/服務器模式(B/S,browser/server)的試飛數據分析應用軟件,提供試飛數據分析應用及服務(SaaS,software as a service),形成試飛數據平臺三層架構技術支撐[10]。

圖1 試飛數據查詢引擎系統結構
試飛數據查詢引擎基于大數據交互查詢presto組件,設計數據集成、數據查詢、數據處理等功能。Presto 是一個用于分析的ANSI SQL查詢引擎,支持計算和存儲的分離,并基于內存計算,減少磁盤IO消耗。Presto可以適配多種不同的數據源,具備多個數據源連接和交互功能,擁有跨數據源和內存計算的優勢,實現多個數據源之間的聯表查詢[11-14]。
數據集成根據具備Presto 跨數據源連接功能,形成訂閱多類數據庫數據能力,獲取存儲在MySQL、Hive、數據倉庫里的結構化數據,以及獲取對象存儲、ES、Redis等組件內的數據,并開展數據表關聯與融合[15]。
數據查詢根據試飛業務需求粒度,基于試飛數據各類形態,設計精細度逐次變化的查詢模式。數據查詢模式包括概覽查詢、高保真查詢、特征查詢、精細查詢,滿足不同數據應用場景需求。概覽查詢實現任務總覽功能,試飛數據查詢引擎直接獲取存儲到數據倉庫應用數據層數據,傳輸到數據應用軟件中進行快速預覽。高保真查詢實現一定狀態下的數據預覽功能,訪問hive數據庫中的數據,經過用戶自定義函數(UDF,user-defined function)聚合處理。特征查詢實現試飛業務特定條件查詢,根據預設試飛參數和規則條件,以及基于試飛有任務特征的數據查詢,提取特征屬性,轉化為規則或條件,開展數據查詢。精細查詢實現試飛數據原子粒度精細查詢[16-17]。
數據計算主要采用采用UDF函數形式,編寫規則代碼,封裝為業務分析函數,實現數據整合與加工。數據計算主要包括時間對齊計算、插值擬合計算、參數合并計算和數值通用計算等簡單計算,較為復雜計算采用向試飛數據平臺大數據計算引擎提交計算請求,獲取大數據引擎計算結果的方式。數據服務以統一應用程序編程接口(API,application programming interface)形式響應數據應用軟件訂閱數據需求[18-20]。
試飛數據查詢引擎設計立足試飛數據平臺資源,采用存算分離技術和異構計算技術,研制數據調度和融合功能,實現試飛數據快速查詢與計算,其系統硬件設計如圖2所示。

圖2 硬件設計
存算分離技術是指存儲(云盤/對象存儲等)和計算(彈性伸縮)分離至彼此獨立的計算域和存儲域,并通過以太網或專用存儲網絡(例如光纖通道)將二者互連,實現了存儲資源的靈活擴展和高效共享。滿足云和互聯網存儲域服務兼顧資源利用率、可靠性、性能、效率等眾多訴求,充分利用理論上無限的IaaS層的資源來構建,實現資源的池化和按需分配,實現更佳的彈性伸縮能力,從而提高資源的利用率更高的可用性和降低成本。隨著高速網絡技術和新硬件的發展,數據平臺主流方式將計算,內存,和存儲資源分別以資源池的方式做解耦合,這些云上IaaS資源以池化形式供應給用戶使用,并且通過高速網絡來進行鏈接。
試飛數據查詢引擎基于存算分離技術,設計資源分配策略,根據查詢任務靈活申請租戶資源,確保查詢事務正確執行,確保查詢事務高效執行,確保系統高可用。試飛數據存儲于試飛數據平臺對象存儲組件,以及基于對象存儲的Hive等分布式數據庫,并采用備份機制。試飛數據查詢引擎獲取對象存儲的元數據信息,快速獲取所需數據塊并加載到內存中。試飛數據查詢充分發揮分布式計算引擎優勢,按需彈性拓展計算單元,分配計算任務至計算單元,在內存中開展大規模并行計算,匯聚計算結果,統一輸出查詢數據。
試飛數據查詢引擎采用X86服務器和ARM服務器混合部署的異構計算技術,定制研發不同計算內核功能模塊,屏蔽底層硬件差異帶來的計算性能影響,實現計算性能一致性。根據試飛數據計算場景,批處理任務采用X86服務器集群,基于X86的復雜指令集(CISC,complex instruction set computing)特征,完成復雜數據計算功能。流處理場景采用ARM服務器集群,基于精簡指令集(RISC,reduced instruction set computing)特征,完成通用計算,發揮其低功耗優勢,降低常規計算維護成本。
如圖3所示,試飛數據查詢引擎采用大數據分布式交互查詢關鍵技術,基于試飛數據處理與分析平臺多種功能數據存儲與計算組件,設計數據查詢接口,制定資源分配策略,開發試飛數據計算UDF函數,分層加工處理與存儲數據,具備多源數據匯聚,多維信息關聯查詢,多層數據靈活鉆取,多功能自定義函數集成,多類指標數據自適應輸出等功能。

圖3 試飛數據查詢引擎軟件設計
試飛數據查詢引擎基于試飛數據平臺交互分析組件Presto研制數據查詢功能,采用ANSI SQL和Java等數據開發語言編寫數據查詢語句和數據計算自定義函數。
試飛數據查詢引擎根據Presto組件子功能模塊,細分為試飛數據查詢為4個過程,即為試飛數據查詢入口過程、試飛數據查詢服務過程、試飛數據查詢與計算過程以及試飛數據源連接過程。
試飛數據查詢入口采用Presto的客戶端(Client)接收試飛數據應用軟件發起的數據查詢請求,包括試飛業務結構化數據、試飛試驗數據、試飛分析結果數據等數據類型。
試飛數據查詢服務采用Presto的coordinator接收查詢請求,解析查詢任務,生成查詢計劃,優化查詢策略、編排查詢任務,獲取數據存儲元信息并開展解析,并提交給worker,執行數據查詢。也接收work查詢數據結果,以數據服務形式反饋給客戶端。
試飛數據查詢與計算采用Presto的worker節點負責查詢處理和計算功能。按照分布式系統特點,配置多個worker執行數據查詢任務,當 Worker啟動時,會通過REST API通信方式廣播自己去發現 Coordinator,并告知 Coordinator 它是可用,隨時可以接受 Task。根據試飛數據特征和業務邏輯,設計了試飛概覽查詢worker、試飛數據精細查詢worker、試飛數據高保真查詢worker、試飛數據特征查詢worker,以及試飛數據計算worker等多功能計算節點。各個worker節點間采用RestAPI形式實現數據通信,融合數據處理結果,生成結果數據集。
試飛數據源連接采用Presto的connector負責 Presto 和試飛數據存儲組件中的數據源連接。Connector 將 Presto 適配到試飛數據源,驅動數據庫連接程序,如Hive或關系數據庫。 Presto 包含幾個內置連接器:JMX 的連接器 ,它是一個提供對內置系統表訪問的系統連接器;Hive連接器和一個用于提供 TPC-H 基準數據的TPCH連接器,以及根據試飛連接場景開發的對象存儲和數據倉庫連接器等第三方連接器,實現Presto 訪問各種試飛數據源中的數據。
試飛數據倉庫是試飛數據查詢引擎關鍵數據源,大多數試飛數據應用都從試飛數據倉庫中進行數據獲取。試飛數據倉庫的貼源數據層(ODS,operation data store),基于Hive進行數據存儲,數據細節層(DWD,data warehouse details)存儲經過一定規則處理后的事件數據集、數據服務層(DWS,data warehouse service)存儲經過聚合處理后的統計信息或試飛任務執行結果數據集。維表層(DIM,dimension)存儲試飛數據維度信息,包含試飛數據業務元數據、技術元數據等元數據信息,支持試飛數據查詢引擎快速解析查詢任務。
試飛數據查詢引擎核心查詢功能包括概覽查詢、高保真查詢、特征查詢、精細查詢,以及查詢后數據計算,設計了統一查詢功能接口和各類查詢實現流程。
3.2.1 概覽查詢
如圖4所示,概覽查詢查詢數倉的ODS層中存儲全部參數的按秒聚合數據,每次查詢會一次查詢并加載該段時間的全部參數的數據,對于采樣頻率小的參數或參數量不多,且在時間跨度不大的情況下,基于presto的查詢結果輸出和展示會很快。但對于高頻參數(采樣頻率大于512的參數),單秒的按秒聚合值包含的數據相對于低頻參數就會比較大,若參數量增多和時間范圍擴大,大數據量的情況下對網絡傳輸和集群查詢性能都會有較大的影響。

圖4 概覽查詢流程圖
基于對查詢性能的優化,在數倉的DWD層中創建概覽表,用于存儲單秒內的聚合值。對于核心參數(查詢使用頻率較高的參數),在概覽表中存儲一秒內的最大值及對應的時間(精確到秒);對于高頻參數,在概覽表中存儲一秒內的初始值、最大值、最小值、結束值,將4個值合并為一條數據,并結合對應的時間進行存儲。
概覽查詢先根據參數查詢數倉DIM層的概覽參數映射表,獲取到每個參數存儲的概覽表名和對應的映射字段,然后查詢概覽表獲取概覽數據。概覽查詢主要用于多參數在長歷程時間段中的查詢,包括高頻參數和核心參數。通過概覽查詢獲取參數的整體變化趨勢,存儲的聚合值也可獲取該參數是否存在波峰或波谷的情況。
3.2.2 高保真查詢
如圖5所示,高保真查詢根據顯示器分辨率,選擇合適的數據點,表征數據特征。由于試飛數據采樣率都比較高,且試驗歷程都在數小時,在數據選段過程中需要逐步縮小數據范圍查看細節數據,且隨著數據量增大,對網絡傳輸性能和瀏覽器的展示性能都會產生負面的影響。基于此進行考慮,從查詢服務獲取數據后,根據傳入的屏幕分辨率進行縮放數據,將總的數據條數降頻為指定分辨率下的條數。

圖5 高保真數據查詢流程
比如對于1 080*1 920的分辨率下,水平方向含有像素數為1 920個。若返回數據集中每個參數對應的數據條數小于1 920條,則可直接返回界面進行展示;若大于1 920條,則需要對每個參數的數據條數對齊到1 920條。對齊方式為1分別除以原始條數和分辨率對應的水平像素數,依次遍歷像素數對應的單位間隔,獲取原始條數中該區間的最大值,直到遍歷結束。
按屏幕分辨率進行縮放后的數據可以減少大數據量對網絡帶寬和瀏覽器負載的影響,提高數據的返回效率,保證用戶在保持數據準確性的同時,提高查詢效率。
高保真查詢獲取DIM層的參數映射表保存所有架次的參數映射信息,DIM層的參數映射表存儲參數對應的原參數字段名、hive映射字段、hive表名、創建時間等信息。在數倉的ODS層的數據表存儲每個架次所有參數對應的按秒聚合數據。查詢時根據用戶傳入的參數名、架次信息及其他查詢參數,先從數倉DIM層的參數映射表中查詢對應參數在hive存儲的表和映射字段名,拼接封裝查詢的sql。通過presto在數倉ODS層對應的表中查詢指定參數的數據,并根據屏幕分辨率傳遞的高保真顯示要求輸出聚合處理數據。
3.2.3 精細查詢
精細查詢實現精細度較高甚至原子粒度數據查詢,如圖6所示。在數倉的ODS層的數據表存儲每個架次所有參數對應的按秒聚合數據,但部分參數長度過長,無法直接作為字段進行存儲,需要在DIM層創建參數映射表保存所有架次的參數映射信息,DIM層的參數映射表存儲參數對應的原參數字段名、hive映射字段、hive表名、創建時間等信息。查詢時根據用戶傳入的參數名、架次信息及其他查詢參數,先從數倉DIM層的參數映射表中查詢對應參數在hive存儲的表和映射字段名,拼接封裝查詢的sql。通過presto在數倉ODS層對應的表中查詢指定參數的數據。

圖6 精細查詢流程
在數倉ODS層的原始數據是以按秒聚合的形式進行存儲,即一條數據包含該參數對應頻率秒內的全部數據。時間列中存儲的時間精確到秒級,不包含微秒的數據,需要根據規則計算按秒聚合中每條數據對應的微秒值。微秒計算方式為1 000 000除以對應頻率后取整,取整方式為去除小數點,然后將長度補全為6位,不足六位的左邊補零,并依次遍歷獲取每條數對應的微秒值。
3.2.4 特征查詢
如圖7所示,特征查詢在滿足原始數據查詢和基于一定規則過濾數據查詢的情況下,實現對查詢的數據提取特征,獲取特征數據段。在數倉的DWD層,會創建概覽表保存核心參數和高頻參數在不同架次中的秒內聚合值(最大值、最小值),以及各類主題分析結果明細表。對于獲取波峰波谷類型的特征數據,通過查詢概覽表中的數據,可以直接獲取架次中指定參數的該類特征數據。對于獲取分析類型的數據,可通過查詢對應主題的分析結果明細表中獲取分析結果特征數據。

圖7 特征查詢流程
同時也支持通過對ODS層中原始數據查詢后,使用算法平臺自定義特征查詢。如對于FFT變換,查詢服務先查詢DWD層的分析結果明細表中是否存在已有分析的數據,若有則直接進行查詢后獲取結果返回,反之則通過presto查詢ODS層中存儲的按秒聚合數據,將原始數據輸入算法平臺調用FFT變換算子,獲取變換后的結果進行返回。
試飛數據查詢引擎數據計算功能包括時間對齊、插值計算、數值計算以及參數合并等計算方式。
時間對齊為了滿足多個參數值在界面上的統一展示,對于相同頻率的參數,可直接對查詢結果進行返回。對于不同頻率參數的數據查詢結果,需要將不同頻率參數的數據進行升頻或降頻成相同頻率,保證多個參數的數據保持在一個頻率上,即同一時間段內,參數對應的數據條數保持一樣。如3個參數分別為16頻率、32頻率和64頻率,需要將頻率為16的參數升頻到32頻率,頻率為64的參數降頻到32頻率,即一秒內的數據都是32條。時間對齊服務通過參數映射表獲取參數列表中每個參數對應的原始頻率,將不同頻率參數的數據進行遍歷,對單秒內聚合的數據進行時間對齊,將每秒內的數據對齊到同一目標頻率中。時間對齊的邏輯為先將1分別除以原始頻率和目標頻率,獲取兩個頻率的單位時間段,遍歷原始頻率和目標頻率,選擇在對應時間段內的區域數據。
插值計算服務通過參數、架次和時間范圍等信息獲取到原始數據后,可支持調用平臺算法模塊中生成的接口進行二次計算,如插值計算和擬合計算等操作。可將平臺通過離線服務包的方式,將自己建好的算法流程打包成sdk并集成到查詢服務中,后續對獲取的數據調用生成的sdk進行計算。
數值計算支持根據用戶的實際需求自定義UDF函數,將編寫好的UDF函數打包到 presto集群中進行部署后,結合sql進行使用。可支持對秒內的數據按值進行過濾,如篩選秒內值中大于某個值的數據及其對應的微秒數,對于32頻率的參數,一秒內的單位為1 000 000/32=31 250,則t0=000 000,t1=31 250,t2=62 500,t3=125 000…
將獲取微秒值的處理邏輯封裝為udf函數,打包到presto集群中,后續的查詢結合udf函數獲取按秒聚合數據中,每條數據對應的微秒值,和時間列進行拼接后返回。支持對查詢結果進行變換處理,如時間對齊、分辨率自適應等操作。同時支持對查詢數據導出為文本文件,進行持久化保存。
參數合并對所有參數的時間對齊后數據保持相同的條數。此時可根據業務需求進行參數之間的計算,對多個參數進行合并,如相加、相減等操作。
試飛數據查詢引擎按照試飛數據平臺數據查詢流程,開展數據查詢功能和性能驗證,并進行高保真查詢性能驗證。主要步驟如下:
第一步:數據查詢輸入
數據查詢輸入如表1所示。

表1 查詢對象和條件輸入
第二步:提交查詢請求
通過Https接口協議,提交到Presto查詢引擎,執行數據查詢,運行時間對齊UDF函數。
第三步:輸出查詢結果
查詢結果如表2所示。

表2 查詢結果輸出
試飛數據查詢引擎完成數據查詢和時間對齊,分別在單表和多表情況下,將對應參數的頻率對齊到32頻率中,實驗結果如表3所示。

表3 數據查詢與時間對齊耗時

表4 高保真數據查詢對比
試飛數據查詢引擎在指定1 080 P顯示分辨率條件下,開展數據對齊到1 920分辨率查詢性能測試,即每次輸出1 920個數據點。
試飛數據查詢引擎查詢性能達到了秒級響應,滿足主要查詢場景需求。但是隨著查詢參數增多、數據量增多,查詢響應時間會增加,造成數據應用軟件獲取數據等待時間長的問題,因此需要基于試飛數據平臺云資源優勢,優化查詢條件,控制查詢復雜度,采用分布式并行查詢方式,提升查詢性能。
試飛數據查詢引擎立足試飛數據平臺優勢,應用數據平臺三層架構資源,設計硬件系統存算分離和異構計算資源分配策略,設計面向數據用戶的多類查詢場景,研究新型數據存儲方式,開發數據處理自定義函數,完成數據查詢功能驗證,發揮試飛數據查詢引擎作為融合試飛數據平臺數據功能層、服務功能層與應用功能層綜合應用工具的核心定位,滿足試飛數據應用要求。
鑒于試飛數據種類多樣化,數據隨機性變化,數據多地產生等特點,需要持續優化試飛數據查詢引擎架構設計,豐富試飛數據查詢引擎功能,提升試飛數據查詢引擎性能,主要解決問題如下:
1)豐富數據接口設計,兼容更多試飛數據類型和數據存儲組件,拓展試飛數據查詢引擎應用場景;
2)優化數據查詢架構,發揮試飛數據平臺云原生應用與大數據計算優勢,持續調優查詢策略,提升并發查詢能力;
3)深入試飛任務過程,不斷開發集成數據計算UDF函數,提供更精準、更高效數據保真度。
試飛數據查詢引擎是試飛數據平臺核心組件,有力支持試飛數據查詢應用,方便快捷響應試飛數據分析應用軟件需求,豐富試飛數據平臺三層架構內涵,拓展試飛數據應用外延,助力打造試飛數據數據應用生態。試飛數據查詢引擎可以歸集通用功能,整合為一款工業大數據管理與應用領域通用工具,推廣至試驗數據等諸多領域,挖掘數據價值。