羅小洪
摘要:本文首先對元數(shù)據(jù)的基本概念和作用進(jìn)行了介紹,然后對元數(shù)據(jù)系統(tǒng)的軟件架構(gòu)進(jìn)行了設(shè)計,并對用到的關(guān)鍵技術(shù)進(jìn)行了說明,用到的關(guān)鍵技術(shù)包括:“血緣關(guān)系”,元數(shù)據(jù)抽取、轉(zhuǎn)換、加載以及SQL數(shù)據(jù)的埋點、采集等。實現(xiàn)了將數(shù)據(jù)界面化展示,可完成數(shù)據(jù)字典查詢、表對象查詢等,使用戶可以很輕松的獲取想要的數(shù)據(jù),大大地提高了開發(fā)的效率。
關(guān)鍵詞:元數(shù)據(jù);元數(shù)據(jù)系統(tǒng);數(shù)據(jù)倉庫hive;大數(shù)據(jù)
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
引言
元數(shù)據(jù)是描述數(shù)據(jù)的數(shù)據(jù),在數(shù)據(jù)倉庫的建設(shè)中,是不可忽略的一環(huán)。其作用在于對數(shù)據(jù)的治理、提高數(shù)據(jù)使用效率和數(shù)據(jù)管理效率,到達(dá)數(shù)據(jù)利用的準(zhǔn)確及高效[1]。由于數(shù)據(jù)的海量性,數(shù)據(jù)的管理需要借助一個可視化的界面供開發(fā)人員的使用,為此需要建立一個可視化的元數(shù)據(jù)原理系統(tǒng)來幫助使用者開發(fā)、維護、使用、管理元數(shù)據(jù)。
元數(shù)據(jù)打通了數(shù)據(jù)源、數(shù)據(jù)倉庫、數(shù)據(jù)應(yīng)用,記錄了數(shù)據(jù)從產(chǎn)生到消費的完整鏈路。元數(shù)據(jù)包含:靜態(tài)的表、列、分區(qū)信息(也就是MetaStore);動態(tài)的任務(wù)、表依賴映射關(guān)系;數(shù)據(jù)倉庫的模型定義、數(shù)據(jù)生命周期;以及ETL任務(wù)調(diào)度信息、輸入輸出等
元數(shù)據(jù)是數(shù)據(jù)管理、數(shù)據(jù)內(nèi)容、數(shù)據(jù)應(yīng)用的基礎(chǔ)。例如可以利用元數(shù)據(jù):構(gòu)建任務(wù)、表、列、用戶之間的數(shù)據(jù)圖譜;構(gòu)建任務(wù)DAG依賴關(guān)系,編排任務(wù)執(zhí)行序列;構(gòu)建任務(wù)畫像,進(jìn)行任務(wù)質(zhì)量治理;數(shù)據(jù)分析時,使用數(shù)據(jù)圖譜進(jìn)行字典檢索;根據(jù)表名查看表詳情,以及每張表的來源、去向,每個字段的加工邏輯;提供個人或BU的資產(chǎn)管理、計算資源消耗概覽等。
在業(yè)務(wù)量并不是很大的時候,對應(yīng)的開發(fā)者對業(yè)務(wù)較為熟悉,查看元數(shù)據(jù)信息都是通過訪問元數(shù)據(jù)庫進(jìn)行查詢,但當(dāng)并非專業(yè)人士,如數(shù)據(jù)分析師需要查看元數(shù)據(jù)信息時,就困難重重,尤其是當(dāng)業(yè)務(wù)數(shù)據(jù)不斷擴張時,即便是專業(yè)的開發(fā)者想要隨時拿到想要的數(shù)據(jù)也并不容易,所以元數(shù)據(jù)系統(tǒng)應(yīng)運而生。
1.軟件架構(gòu)設(shè)計
·DB保存任務(wù)的sql數(shù)據(jù)、任務(wù)基礎(chǔ)信息、執(zhí)行引擎上下文信息
·Extract循環(huán)抽取sql并解析成表、列級血緣Lineage
·DataSet包含Lineage關(guān)系數(shù)據(jù)+任務(wù)信息+引擎上下文
·將DataSet數(shù)據(jù)集保存到Neo4j,并提供關(guān)系查詢;保存ES,提供表、字段等信息檢索
2.關(guān)鍵技術(shù)
2.1血緣關(guān)系
“表”是元數(shù)據(jù)系統(tǒng)的后臺邏輯核心,數(shù)據(jù)倉庫是構(gòu)建在Hive之上的,而Hive元數(shù)據(jù)來自于生產(chǎn)系統(tǒng),也可能會把計算的結(jié)果導(dǎo)出到外部存儲。Hive表、mysql表、hbase表、BI報表都是“表”,這些“表”間關(guān)系是一個DAG,也就是血緣關(guān)系。
2.2 SQL埋點、采集
sql數(shù)據(jù),以執(zhí)行中采集為主+保存前submit為輔。因為任務(wù)的sql可能包含一些時間變量,比如dt、hour,以及任務(wù)可能是天調(diào)度、小時調(diào)度。執(zhí)行中采集sql實時性更高,也更容易處理EDW是任務(wù)調(diào)度系統(tǒng),類比開源的AirFlow,調(diào)度系統(tǒng)執(zhí)行任務(wù),并將任務(wù)相關(guān)的信息比如appId、jobId、owner、sql等信息存入DB。
計算引擎實現(xiàn)相關(guān)的監(jiān)聽接口,比如Hive實現(xiàn)Execute WithHookContext接口;Spark實現(xiàn)SparkListener接口;Presto實現(xiàn)EventListener接口。將計算引擎相關(guān)的上下文Context、元數(shù)據(jù)MetaData、統(tǒng)計Statistics等信息存入DB。
解析sql的方案,以hive為例。先定義詞法規(guī)則和語法規(guī)則文件,然后使用Antlr實現(xiàn)sql的詞法和語法解析,生成AST語法樹,遍歷AST語法樹完成后續(xù)操作。
但對于SELECT*、CTAS等操作,直接遍歷AST,不去獲取Schema信息來檢查表名、列名,就無法判定sql的正確性,從而導(dǎo)致數(shù)據(jù)污染。
綜上所述,本系統(tǒng)的SQL解析方案,直接參考Hive的底層源碼實現(xiàn)。經(jīng)過SemanticAnalyzerFactory類進(jìn)行語法分析,再根據(jù)Schema生成執(zhí)行計劃QueryPlan。關(guān)于表、列的血緣,可以從LineageInfo、LineageLogger類中獲得解決方案。