Airflow 是一個(gè) Airbnb 的 Workflow 開源項(xiàng)目,在Github 上已經(jīng)有超過兩千星。Airflow 使用 Python 寫的,支持 Python 2/3 兩個(gè)版本。 傳統(tǒng) Workflow 通常使用 Text Files (json, xml / etc) 來定義 DAG, 然后 Scheduler 解析這些 DAG 文件形成具體的 Task Object 執(zhí)行;Airflow 沒這么干,它直接用 Python 寫 DAG definition, 一下子突破了文本文件表達(dá)能力的局限,定義 DAG 變得簡(jiǎn)單。 另外,Airflow 的權(quán)限設(shè)計(jì)、限流設(shè)計(jì)、以及 Hook/Plugin 的設(shè)計(jì)都挺有意思,功能性、擴(kuò)展性良好。當(dāng)然,項(xiàng)目里的代碼質(zhì)量感覺比較一般,很多地方函數(shù)名和實(shí)現(xiàn)不太一致,造成理解障礙;也有很多 Flag 和重復(fù)出現(xiàn)的定義,顯然是當(dāng)初沒有設(shè)計(jì)好、后面沒有精力 Refactor 轉(zhuǎn)而 Hack 的結(jié)果。但總體上,可讀性中上,系統(tǒng)的擴(kuò)展性非常好。
創(chuàng)新互聯(lián)建站長(zhǎng)期為1000多家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為柯城企業(yè)提供專業(yè)的做網(wǎng)站、網(wǎng)站設(shè)計(jì),柯城網(wǎng)站改版等技術(shù)服務(wù)。擁有十余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
左側(cè) On/Off 按鈕控制 DAG 的運(yùn)行狀態(tài),Off 為暫停狀態(tài),On 為運(yùn)行狀態(tài)。注意:所有 DAG 腳本初次部署完成時(shí)均為 Off 狀態(tài)。
若 DAG 名稱處于不可點(diǎn)擊狀態(tài),可能為 DAG 被刪除或未載入。若 DAG 未載入,可點(diǎn)擊右側(cè)刷新按鈕進(jìn)行刷新。注意:由于可以部署若干 WebServer,所以單次刷新可能無法刷新所有 WebServer 緩存,可以嘗試多次刷新。
Recent Tasks 會(huì)顯示最近一次 DAG Run(可以理解為 DAG 的執(zhí)行記錄)中 Task Instances(可以理解為作業(yè)的執(zhí)行記錄)的運(yùn)行狀態(tài),如果 DAG Run 的狀態(tài)為 running,此時(shí)顯示最近完成的一次以及正在運(yùn)行的 DAG Run 中所有 Task Instances 的狀態(tài)。
- Last Run 顯示最近一次的 execution date。注意:execution date 并不是真實(shí)執(zhí)行時(shí)間,具體細(xì)節(jié)在下文 DAG 配置中詳述。將鼠標(biāo)移至 execution date 右側(cè) info 標(biāo)記上,會(huì)顯示 start date,start date 為真實(shí)運(yùn)行時(shí)間。start date 一般為 execution date 所對(duì)應(yīng)的下次執(zhí)行時(shí)間。
在 DAG 的樹狀圖和 DAG 圖中都可以點(diǎn)擊對(duì)應(yīng)的 Task Instance 以彈出 Task Instance 模態(tài)框,以進(jìn)行 Task Instance 的相關(guān)操作。注意:選擇的 Task Instance 為對(duì)應(yīng) DAG Run 中的 Task Instance。
在作業(yè)名字的右邊有一個(gè)漏斗符號(hào),點(diǎn)擊后整個(gè) DAG 的界面將只顯示該作業(yè)及該作業(yè)的依賴作業(yè)。當(dāng)該作業(yè)所處的 DAG 較大時(shí),此功能有較大的幫助。
Task Instance Details 顯示該 Task Instance 的詳情,可以從中得知該 Task Instance 的當(dāng)前狀態(tài),以及處于當(dāng)前狀態(tài)的原因。例如,若該 Task Instance 為 no status 狀態(tài),遲遲不進(jìn)入 queued 及 running 狀態(tài),此時(shí)就可通過 Task Instance Details 中的 Dependency 及 Reason 得知原因。
Rendered 顯示該 Task Instance 被渲染后的命令。
Run 指令可以直接執(zhí)行當(dāng)前作業(yè)。
Clear 指令為清除當(dāng)前 Task Instance 狀態(tài),清除任意一個(gè) Task Instance 都會(huì)使當(dāng)前 DAG Run 的狀態(tài)變更為 running。注意:如果被清除的 Task Instance 的狀態(tài)為 running,則會(huì)嘗試 kill 該 Task Instance 所執(zhí)行指令,并進(jìn)入 shutdown 狀態(tài),并在 kill 完成后將此次執(zhí)行標(biāo)記為 failed(如果 retry 次數(shù)沒有用完,將標(biāo)記為 up_for_retry)。Clear 有額外的5個(gè)選項(xiàng),均為多選,這些選項(xiàng)從左到右依次為:
- Past: 同時(shí)清除所有過去的 DAG Run 中此 Task Instance 所對(duì)應(yīng)的 Task Instance。
- Future: 同時(shí)清除所有未來的 DAG Run 中此 Task Instance 所對(duì)應(yīng)的 Task Instance。注意:僅清除已生成的 DAG Run 中的 Task Instance。
- Upstream: 同時(shí)清除該 DAG Run 中所有此 Task Instance 上游的 Task Instance。
- Downstream: 同時(shí)清除該 DAG Run 中所有此 Task Instance 下游的 Task Instance。
- Recursive: 當(dāng)此 Task Instance 為 sub DAG 時(shí),循環(huán)清除所有該 sub DAG 中的 Task Instance。注意:若當(dāng)此 Task Instance 不是 sub DAG 則忽略此選項(xiàng)。
Mark Success 指令為講當(dāng)前 Task Instance 狀態(tài)標(biāo)記為 success。注意:如果該 Task Instance 的狀態(tài)為 running,則會(huì)嘗試 kill 該 Task Instance 所執(zhí)行指令,并進(jìn)入 shutdown 狀態(tài),并在 kill 完成后將此次執(zhí)行標(biāo)記為 failed(如果 retry 次數(shù)沒有用完,將標(biāo)記為 up_for_retry)。
跨越時(shí)間的 DAG 的樹表示。如果 pipeline(管道)延遲了,您可以很快地看到哪里出現(xiàn)了錯(cuò)誤的步驟并且辨別出堵塞的進(jìn)程。
圖形視圖可能是最全面的一種表現(xiàn)形式了。它可以可視化您的 DAG 依賴以及某個(gè)運(yùn)行實(shí)例的當(dāng)前狀態(tài)。
過去 N 次運(yùn)行的不同任務(wù)的持續(xù)時(shí)間。通過此視圖,您可以查找異常值并快速了解 DAG 在多次運(yùn)行中花費(fèi)的時(shí)間。
甘特圖可讓您分析任務(wù)持續(xù)時(shí)間和重疊情況。您可以快速識(shí)別系統(tǒng)瓶頸和哪些特定 DAG 在運(yùn)行中花費(fèi)了大量的時(shí)間。
透明就是一切。雖然您的 pipeline(管道)代碼在源代碼管理中,但這是一種快速獲取 DAG 代碼并提供更多上下文的方法。
從上面的頁面(樹視圖,圖形視圖,甘特圖......)中,始終可以單擊任務(wù)實(shí)例,并進(jìn)入此豐富的上下文菜單,該菜單可以將您帶到更詳細(xì)的元數(shù)據(jù)并執(zhí)行某些操作。
外部系統(tǒng)的連接信息存儲(chǔ)在 Airflow 元數(shù)據(jù)數(shù)據(jù)庫(kù)中,并在 UI 中進(jìn)行管理(Menu -> Admin -> Connections)。在那里定義了conn_idconn_id而無需在任何地方硬編碼任何此類信息。
可以定義具有相同conn_id許多連接,并且在這種情況下,并且當(dāng)掛鉤使用來自BaseHook的get_connection方法時(shí),Airflow 將隨機(jī)選擇一個(gè)連接,允許在與重試一起使用時(shí)進(jìn)行一些基本的負(fù)載平衡和容錯(cuò)。
Airflow 還能夠通過操作系統(tǒng)中的環(huán)境變量引用連接。但它只支持 URI 格式。如果您需要為連接指定extra信息,請(qǐng)使用 Web UI。
如果在 Airflow 元數(shù)據(jù)數(shù)據(jù)庫(kù)和環(huán)境變量中都定義了具有相同conn_id連接,則 Airflow 將僅引用環(huán)境變量中的連接(例如,給定conn_idpostgres_master,在開始搜索元數(shù)據(jù)數(shù)據(jù)庫(kù)之前,Airflow 將優(yōu)先在環(huán)境變量中搜索AIRFLOW_CONN_POSTGRES_MASTER并直接引用它)。
許多鉤子都有一個(gè)默認(rèn)的conn_id,使用該掛鉤的 Operator 不需要提供顯式連接 ID。 例如,PostgresHook的默認(rèn)conn_id是postgres_default
XComs 允許任務(wù)交換消息,允許更細(xì)微的控制形式和共享狀態(tài)。該名稱是“交叉通信”的縮寫。XComs 主要由鍵,值和時(shí)間戳定義,但也跟蹤創(chuàng)建 XCom 的任務(wù)/DAG 以及何時(shí)應(yīng)該可見的屬性。任何可以被 pickle 的對(duì)象都可以用作 XCom 值,因此用戶應(yīng)該確保使用適當(dāng)大小的對(duì)象。
變量是將任意內(nèi)容或設(shè)置存儲(chǔ)和檢索為 Airflow 中的簡(jiǎn)單鍵值存儲(chǔ)的通用方法??梢詮?UI(Admin -> Variables),代碼或 CLI 列出,創(chuàng)建,更新和刪除變量。此外,json 設(shè)置文件可以通過 UI 批量上傳。雖然管道代碼定義和大多數(shù)常量和變量應(yīng)該在代碼中定義并存儲(chǔ)在源代碼控制中,但是通過 UI 可以訪問和修改某些變量或配置項(xiàng)會(huì)很有用。
分享名稱:如何使用AirFlow管理界面
本文URL:http://www.rwnh.cn/article2/ippjic.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、全網(wǎng)營(yíng)銷推廣、動(dòng)態(tài)網(wǎng)站、企業(yè)網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、電子商務(wù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)