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