最近在對T-1的數(shù)據(jù)進(jìn)行測試刺下,所以學(xué)會如何看DAG就是非常重要的一個(gè)環(huán)節(jié)了树埠。
1.DAG背景
DAG我們都知道,是一個(gè)有向無環(huán)圖疾呻,任務(wù)都是有順序的除嘹,存在依賴關(guān)系,進(jìn)行一次跑數(shù)據(jù)岸蜗。那為什么要使用這個(gè)DAG呢尉咕?
DAG中主要存在幾層:貼源層、中間層散吵、特征層龙考、數(shù)據(jù)層。每一層都有著先后關(guān)系矾睦,我們需要拿到貼源層的數(shù)據(jù),這個(gè)過程就是通過從各個(gè)業(yè)務(wù)庫中去進(jìn)行抽數(shù)炎功。中間層的數(shù)據(jù)又取決于貼源層的數(shù)據(jù)枚冗,如果貼源層的數(shù)據(jù)沒有抽到,中間層的數(shù)據(jù)基本就無法進(jìn)行跑批蛇损。
后續(xù)的操作基本就無法進(jìn)行運(yùn)行和驗(yàn)證了赁温。在對這些內(nèi)容進(jìn)行處理的時(shí)候,都是通過python語言淤齐,所以我們對DAG中的內(nèi)容就應(yīng)該特別重視了股囊。DAG中的內(nèi)容主要大部分都是通過寫SQL邏輯去進(jìn)行操作。
2.DAG是什么
Airflow:可編程更啄、調(diào)度和監(jiān)控的工作流平臺稚疹,基于有向無環(huán)圖(DAG),airflow可以定義一組有依賴的任務(wù)祭务,按照依賴依次執(zhí)行内狗。airflow提供了豐富的命令行工具用于系統(tǒng)管控怪嫌,而其web管理界面同樣也可以方便的管控調(diào)度任務(wù),并且對任務(wù)運(yùn)行狀態(tài)進(jìn)行實(shí)時(shí)監(jiān)控柳沙,方便了系統(tǒng)的運(yùn)維和管理岩灭。
airflow最簡單的理解就是一個(gè)高級版的crontab,解決了crontab無法解決的任務(wù)依賴問題。
2.1 DAG整體拓?fù)鋱D
Airflow整體拓?fù)鋱D:外部系統(tǒng)赂鲤、MYSQL噪径、airflow master.
- 1.外部系統(tǒng):直接調(diào)用airflow的系統(tǒng)只有BGS、oneservice数初。
- 2.master節(jié)點(diǎn)web ui管理dags熄云、日志等信息,scheduler負(fù)責(zé)調(diào)度以及執(zhí)行具體dag中的task妙真。
- 3.mysql數(shù)據(jù)庫用來存儲dag執(zhí)行的相關(guān)的缴允,記錄dag里的task的依賴關(guān)系。
2.2 DAG程序目錄結(jié)構(gòu)
airflow 程序目錄結(jié)構(gòu)一般有dags珍德、shell练般、etl-shell、confFile锈候、logs薄料、batch、airflow.cfg泵琳、airflow-scheduler.err摄职、airflow-scheduler.log、airflow-scheduler.out获列、airflow-scheduler.pid谷市。
dags:dag任務(wù)存放目錄。
shell:抽數(shù)shell腳本存放目錄击孩。
confFile:抽數(shù)的配置文件目錄迫悠。
logs:dag任務(wù)執(zhí)行的日志文件存放目錄。
batch:dag生成的數(shù)據(jù)文件目錄(一般要推送到sftp)
airflow.cfg:airflow的配置文件巩梢,如連接mysql的連接配置创泄,各個(gè)目錄的功能定義等。
airflow-scheduler.err:airflow調(diào)度器錯(cuò)誤日志括蝠,每次重啟會清空鞠抑。
airflow-scheduler.log:airflow由初始安裝至今的所有運(yùn)行日志。
airflow-scheduler.out:airflow每次重啟后運(yùn)行日志忌警。
airflow-scheduler.pid:記錄pid的文件搁拙。
stop_start.sh:airflow的停啟腳本(包括scheduler、web)。
3.如何看DAG
Airflow中的DAG有一個(gè)規(guī)則感混,起碼你可以通過這個(gè)結(jié)構(gòu)去明白DAG有哪些固定的模塊端幼。固定的模塊知道然后記住就可以了,這樣至少可以從一眼中找到你所需要的邏輯弧满。學(xué)會看DAG也很重要婆跑。
DAG初認(rèn)識,可以參考網(wǎng)址:
我們最重要的時(shí)需要了解我們所知道的那一部分內(nèi)容庭呜。也需要技巧滑进,比如搜索FROM或者SELECT關(guān)鍵字,根據(jù)這些關(guān)鍵字去找到自己的邏輯部分募谎。我比較喜歡用from關(guān)鍵字去看后面的來源表扶关,這樣大致你就可以知道是哪幾個(gè)表,這幾個(gè)表之間是如何通過sql語句去進(jìn)行關(guān)聯(lián)的数冬。
看DAG步驟:
- 1.找到你的DAG
- 2.通過from關(guān)鍵字定位到你的SQL邏輯
- 3.復(fù)制select...from...這段語句就知道被插入到特定表的數(shù)據(jù)來源
- 4.分析select...from...這段語句里面的邏輯是否是你想要的數(shù)據(jù)