羅小洪
摘要:本文首先對元數據的基本概念和作用進行了介紹,然后對元數據系統的軟件架構進行了設計,并對用到的關鍵技術進行了說明,用到的關鍵技術包括:“血緣關系”,元數據抽取、轉換、加載以及SQL數據的埋點、采集等。實現了將數據界面化展示,可完成數據字典查詢、表對象查詢等,使用戶可以很輕松的獲取想要的數據,大大地提高了開發的效率。
關鍵詞:元數據;元數據系統;數據倉庫hive;大數據
ABSTRACT:Abstract:This paper first introduces the basic concepts and functions of metadata, and then designs the software architecture of the metadata system, and introduces? key technologies such as“blood relationship”, metadata extraction, metadata conversion, metadata loading, as well as the burying and collecting of SQL data, the article also realizes the interface display of data, it can complete data dictionary query, table object query, etc., so that users can easily obtain the desired data, greatly improving the developments efficiency.
Keywords:metadata,Metadata System,data warehouse hive,big data
引言
元數據是描述數據的數據,在數據倉庫的建設中,是不可忽略的一環。其作用在于對數據的治理、提高數據使用效率和數據管理效率,到達數據利用的準確及高效[1]。由于數據的海量性,數據的管理需要借助一個可視化的界面供開發人員的使用,為此需要建立一個可視化的元數據原理系統來幫助使用者開發、維護、使用、管理元數據。
元數據打通了數據源、數據倉庫、數據應用,記錄了數據從產生到消費的完整鏈路。元數據包含:靜態的表、列、分區信息(也就是MetaStore);動態的任務、表依賴映射關系;數據倉庫的模型定義、數據生命周期;以及ETL任務調度信息、輸入輸出等
元數據是數據管理、數據內容、數據應用的基礎。例如可以利用元數據:構建任務、表、列、用戶之間的數據圖譜;構建任務DAG依賴關系,編排任務執行序列;構建任務畫像,進行任務質量治理;數據分析時,使用數據圖譜進行字典檢索;根據表名查看表詳情,以及每張表的來源、去向,每個字段的加工邏輯;提供個人或BU的資產管理、計算資源消耗概覽等。
在業務量并不是很大的時候,對應的開發者對業務較為熟悉,查看元數據信息都是通過訪問元數據庫進行查詢,但當并非專業人士,如數據分析師需要查看元數據信息時,就困難重重,尤其是當業務數據不斷擴張時,即便是專業的開發者想要隨時拿到想要的數據也并不容易,所以元數據系統應運而生。
1.軟件架構設計
·DB保存任務的sql數據、任務基礎信息、執行引擎上下文信息
·Extract循環抽取sql并解析成表、列級血緣Lineage
·DataSet包含Lineage關系數據+任務信息+引擎上下文
·將DataSet數據集保存到Neo4j,并提供關系查詢;保存ES,提供表、字段等信息檢索
2.關鍵技術
2.1血緣關系
“表”是元數據系統的后臺邏輯核心,數據倉庫是構建在Hive之上的,而Hive元數據來自于生產系統,也可能會把計算的結果導出到外部存儲。Hive表、mysql表、hbase表、BI報表都是“表”,這些“表”間關系是一個DAG,也就是血緣關系。
2.2 SQL埋點、采集
sql數據,以執行中采集為主+保存前submit為輔。因為任務的sql可能包含一些時間變量,比如dt、hour,以及任務可能是天調度、小時調度。執行中采集sql實時性更高,也更容易處理EDW是任務調度系統,類比開源的AirFlow,調度系統執行任務,并將任務相關的信息比如appId、jobId、owner、sql等信息存入DB。
計算引擎實現相關的監聽接口,比如Hive實現Execute WithHookContext接口;Spark實現SparkListener接口;Presto實現EventListener接口。將計算引擎相關的上下文Context、元數據MetaData、統計Statistics等信息存入DB。
解析sql的方案,以hive為例。先定義詞法規則和語法規則文件,然后使用Antlr實現sql的詞法和語法解析,生成AST語法樹,遍歷AST語法樹完成后續操作。
但對于SELECT*、CTAS等操作,直接遍歷AST,不去獲取Schema信息來檢查表名、列名,就無法判定sql的正確性,從而導致數據污染。
綜上所述,本系統的SQL解析方案,直接參考Hive的底層源碼實現。經過SemanticAnalyzerFactory類進行語法分析,再根據Schema生成執行計劃QueryPlan。關于表、列的血緣,可以從LineageInfo、LineageLogger類中獲得解決方案。