0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一個(gè)開(kāi)源的ETL工具Airflow

lviY_AI_shequ ? 來(lái)源:未知 ? 作者:李倩 ? 2018-09-14 16:37 ? 次閱讀

最近在弄畫(huà)像標(biāo)簽每天ETL的調(diào)度事情,這篇文章分享一下一個(gè)開(kāi)源的ETL工具Airflow。

一、基礎(chǔ)概念

Airflow是Airbnb內(nèi)部發(fā)起并開(kāi)源的一個(gè)ETL管理平臺(tái),使用Python編寫(xiě)實(shí)現(xiàn)的任務(wù)管理、調(diào)度、監(jiān)控工作流平臺(tái)。這是其官方文檔地址:Apache Airflow (incubating) Documentation,關(guān)于airflow產(chǎn)品的使用,里面有詳細(xì)的介紹。

Airflow的調(diào)度依賴于crontab命令,與crontab相比airflow可以直觀的看到任務(wù)執(zhí)行情況、任務(wù)之間的邏輯依賴關(guān)系、可以設(shè)定任務(wù)出錯(cuò)時(shí)郵件提醒、可以查看任務(wù)執(zhí)行日志。

而crontab命令管理的方式存在以下幾方面的弊端:

1、在多任務(wù)調(diào)度執(zhí)行的情況下,難以理清任務(wù)之間的依賴關(guān)系;

2、不便于查看當(dāng)前執(zhí)行到哪一個(gè)任務(wù);

3、任務(wù)執(zhí)行失敗時(shí)不便于查看執(zhí)行日志,也即不方便定位報(bào)錯(cuò)的任務(wù)和錯(cuò)誤原因;

4、不便于查看調(diào)度流下每個(gè)任務(wù)執(zhí)行的起止消耗時(shí)間,這對(duì)于優(yōu)化task作業(yè)是非常重要的;

5、不便于記錄歷史調(diào)度任務(wù)的執(zhí)行情況,而這對(duì)于優(yōu)化作業(yè)和錯(cuò)誤排查是很重要的;

Airflow中有兩個(gè)最基本的概念:DAG和task,下面主要介紹一下。

DAG是什么:

DAG是Directed Acyclic Graph的縮寫(xiě),即有向無(wú)環(huán)圖。是所有要執(zhí)行任務(wù)腳本(即task)的集合,在這個(gè)DAG中定義了各個(gè)task的依賴關(guān)系、調(diào)度時(shí)間、失敗重啟機(jī)制等。通過(guò)DAGid來(lái)標(biāo)識(shí)每個(gè)DAG任務(wù)

每個(gè)DAG是由1到多個(gè)task組成

task是什么:

task是具體執(zhí)行的任務(wù)腳本,可以是一個(gè)命令行(BashOperator),也可以是python腳本等。

二、主要功能鍵介紹

1、DAG管理

在airflow的主頁(yè),可以看到當(dāng)前所有的DAG列表(通俗點(diǎn)說(shuō)就是所有的調(diào)度任務(wù)列表),中間“Task by State”那一列顯示任務(wù)的執(zhí)行狀態(tài)。深綠色的表示已執(zhí)行成功的task,淺綠色的表示當(dāng)前正在執(zhí)行的task。

右側(cè)“Links”那一列可以鏈接查看當(dāng)前DAG任務(wù)的依賴關(guān)系、執(zhí)行時(shí)間、執(zhí)行腳本等情況。

當(dāng)點(diǎn)擊具體某一個(gè)DAG任務(wù)時(shí),就可以進(jìn)去查看該DAG的調(diào)度依賴、執(zhí)行時(shí)長(zhǎng)、調(diào)度腳本等具體執(zhí)行情況

2、調(diào)度依賴查看

通過(guò)“Graph View”選項(xiàng)可以查看當(dāng)前調(diào)度任務(wù)的依賴關(guān)系,當(dāng)調(diào)度作業(yè)較為復(fù)雜時(shí),這種圖形化方式展示的依賴關(guān)系可以幫助用戶迅速理清。

在用戶畫(huà)像的調(diào)度管理中,每天需要執(zhí)行cookieid和userid兩個(gè)維度的畫(huà)像腳本,因此可以設(shè)定并行執(zhí)行任務(wù),讓cookieid和userid的腳本同時(shí)執(zhí)行調(diào)度作業(yè)

3、執(zhí)行狀態(tài)

通過(guò)“Tree View”選項(xiàng)可以查看當(dāng)前任務(wù)的執(zhí)行狀態(tài),包括當(dāng)前執(zhí)行到哪一個(gè)task,還有哪些task未執(zhí)行。哪些task執(zhí)行成功,哪些task執(zhí)行失敗。

也可以查看歷史上該DAG下面各task的執(zhí)行情況。

4、各task執(zhí)行時(shí)間

通過(guò)“Gantt”選項(xiàng)可以查看各task任務(wù)的執(zhí)行起止時(shí)間的甘特圖。

了解各task執(zhí)行的時(shí)間可以有針對(duì)性地優(yōu)化執(zhí)行時(shí)間長(zhǎng)的task對(duì)應(yīng)腳本。

5、DAG調(diào)度腳本

通過(guò)“Code”選項(xiàng),可以查看當(dāng)前DAG調(diào)度的腳本。腳本里面定義了需要執(zhí)行的task、執(zhí)行順序及依賴、調(diào)度時(shí)間、失敗發(fā)送郵件或重調(diào)機(jī)制等方法

三、腳本實(shí)例

在開(kāi)發(fā)過(guò)程中,task腳本是需要被調(diào)度的腳本,在Airflow中主要需要開(kāi)發(fā)的是DAG腳本,即管理task任務(wù)的腳本。通過(guò)一個(gè)DAG腳本,將各個(gè)調(diào)度作業(yè)腳本串起來(lái),按照業(yè)務(wù)邏輯去執(zhí)行。

1、DAG腳本

下面通過(guò)一個(gè)具體DAG腳本實(shí)例來(lái)了解一下:

from airflow.operators.bash_operator import BashOperator import airflow from airflow.models import DAG from airflow import operators from airflow.contrib.hooks import SSHHook from airflow.models import BaseOperator from airflow.contrib.operators import SSHExecuteOperator from airflow.operators.latest_only_operator import LatestOnlyOperator import os import sys from datetime import timedelta,date,datetime import pendulum from airflow.utils.trigger_rule import TriggerRule default_args = { 'owner': 'superuserprofile', 'depends_on_past': False, 'start_date': datetime(2018, 06, 01), 'email': ['administer@testemail.com'], 'email_on_failure': True , 'email_on_retry': True, 'retries': 1, 'retry_delay': timedelta(minutes=1), } os.environ['SPARK_HOME'] = '/usr/local/spark-2.1.1-bin-hadoop2.6' sys.path.append(os.path.join(os.environ['SPARK_HOME'], 'bin'))

該段腳本定義了需要引入的包,以及默認(rèn)的DAG參數(shù)配置,包括task是否依賴上游任務(wù),首次調(diào)度時(shí)間、任務(wù)失敗接收郵箱、任務(wù)失敗是否重新調(diào)起等

dag = DAG( 'superuserprofile', default_args=default_args, description='A userprofile test', schedule_interval='00 08 * * *' )

該段腳本實(shí)例化了DAG,設(shè)置了DAGid,調(diào)度執(zhí)行時(shí)間

gender_task = BashOperator( task_id='gender', bash_command=' sudo -E -H -u userprofile spark-submit --master yarn --deploy-mode client --driver-memory 1g --executor-memory 8g --executor-cores 2 --num-executors 200 /airflow/userprofile_gender.py {{ ds_nodash }} ', dag=dag, trigger_rule=TriggerRule.ALL_DONE ) country_task = BashOperator( task_id='country', bash_command=' sudo -E -H -u userprofile spark-submit --master yarn --deploy-mode client --driver-memory 1g --executor-memory 4g --executor-cores 2 --num-executors 200 /airflow/userprofile_country.py {{ ds_nodash }} ', dag=dag, trigger_rule=TriggerRule.ALL_DONE )

該段腳本設(shè)置了兩個(gè)需要執(zhí)行的task任務(wù)(userprofile_gender.py和userprofile_country.py)的實(shí)例化。

task直接的調(diào)度依賴關(guān)系可以通過(guò)set_upstream、set_downstream命令或符號(hào)>> 、<<來(lái)建立。

gender_task .set_upstream(country_task) 命令指gender_task 任務(wù)將依賴country_task任務(wù);反之同理

gender_task >> country_task 命令指country_task 任務(wù)將依賴gender_task 任務(wù)先執(zhí)行完,反之同理

2、命令行執(zhí)行

Airflow通過(guò)可視化界面的方式實(shí)現(xiàn)了調(diào)度管理的界面操作,但在測(cè)試腳本或界面操作失敗的時(shí)候,可通過(guò)命令行的方式調(diào)起任務(wù)。下面介紹幾個(gè)常用命令

命令1:airflow list_tasksuserprofile

該命令用于查看當(dāng)前DAG任務(wù)下的所有task的列表

其中userprofile是DAGid,加粗的airflow list_tasks是關(guān)鍵字命令

-----------------------------------------------------------------------

命令2:airflow testuserprofile gender_task 20180601

該命令用于單獨(dú)執(zhí)行DAG下面的某個(gè)task

其中userprofile是DAGid,gender_task是要具體某個(gè)taskid,20180601是執(zhí)行日期。加粗部分是關(guān)鍵字命令

-----------------------------------------------------------------------

命令3:airflow backfill -s2018-06-01-e2018-06-02 userprofile

該命令用于調(diào)起整個(gè)DAG腳本執(zhí)行

其中2018-06-01是執(zhí)行腳本的開(kāi)始日期, 2018-06-02是結(jié)束日期,userprofile是DAGid,加粗部分是關(guān)鍵字命令。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 開(kāi)源
    +關(guān)注

    關(guān)注

    3

    文章

    3394

    瀏覽量

    42633
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4806

    瀏覽量

    84935

原文標(biāo)題:用戶畫(huà)像—Airflow作業(yè)調(diào)度(ETL)

文章出處:【微信號(hào):AI_shequ,微信公眾號(hào):人工智能愛(ài)好者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    【美洲認(rèn)證系列】美國(guó)ETL認(rèn)證介紹

    美國(guó)發(fā)明家愛(ài)迪生在1896年手創(chuàng)立的,在美國(guó)及世界范圍內(nèi)享有極高的聲譽(yù)。同UL、CSA樣,ETL可根據(jù)UL標(biāo)準(zhǔn)或美國(guó)國(guó)家標(biāo)準(zhǔn)測(cè)試核發(fā)ETL認(rèn)證標(biāo)志,也可同時(shí)按照UL標(biāo)準(zhǔn)或美國(guó)國(guó)家標(biāo)
    發(fā)表于 08-07 15:40

    美國(guó)ETL認(rèn)證簡(jiǎn)介

    美國(guó)ETL認(rèn)證簡(jiǎn)介  ETL是美國(guó)電子測(cè)試實(shí)驗(yàn)室(ElectricalTestingLaboratories)的簡(jiǎn)稱。ETL試驗(yàn)室是由美國(guó)發(fā)明家愛(ài)迪生在1896年手創(chuàng)立的,在美國(guó)及世
    發(fā)表于 04-25 18:33

    UL和ETL的區(qū)別是什么?

    ETL認(rèn)證和UL認(rèn)證具有同樣的北美市場(chǎng)準(zhǔn)入效力,但ETL認(rèn)證的費(fèi)用比UL認(rèn)證低的多,般只有UL認(rèn)證的半,而且,ETL認(rèn)證的產(chǎn)品檢測(cè)可以通
    發(fā)表于 08-10 21:41

    BI軟件的ETL開(kāi)源的好,還是自研的好?

    時(shí),需要將問(wèn)題反饋到社區(qū)。由于開(kāi)源社區(qū)無(wú)人負(fù)責(zé),需要被動(dòng)等待對(duì)方響應(yīng)并解決問(wèn)題,這就又有個(gè)不可預(yù)估的時(shí)間成本。自研ETL:BI軟件里的自研ETL
    發(fā)表于 08-27 09:44

    路燈ETL認(rèn)證

    目前取得ETL證書(shū)有兩種方式,種通過(guò)CB測(cè)試報(bào)告轉(zhuǎn),種是直接申請(qǐng),所需提交資料如下:1、申請(qǐng)表;2、CB測(cè)試證書(shū)復(fù)印件(直接申請(qǐng)不需要);3、CB測(cè)試報(bào)告復(fù)印件(直接申請(qǐng)不需要);4、樣品(4-8
    發(fā)表于 06-10 22:02

    如何使用openssl制作個(gè)開(kāi)源C簽名工具?

    為了將簽名與多維數(shù)據(jù)集程序員分離,我使用 openssl 制作了個(gè)開(kāi)源 C 簽名工具。在各種構(gòu)建環(huán)境中應(yīng)該相當(dāng)容易使用。
    發(fā)表于 12-06 07:52

    種金融系統(tǒng)專(zhuān)用ETL工具的研究與實(shí)現(xiàn)

    實(shí)現(xiàn)了種基于Spring框架的商業(yè)銀行專(zhuān)用ETL程序。該程序利用Spring框架的控制反轉(zhuǎn)技術(shù),基于Ibatis的數(shù)據(jù)訪問(wèn)對(duì)象技術(shù)和Spring JDBC,以及Spring對(duì)Timer的支持,解決了ETL過(guò)程中的數(shù)據(jù)轉(zhuǎn)
    發(fā)表于 04-13 09:04 ?24次下載

    基于元數(shù)據(jù)的ETL工具集成研究

    針對(duì)現(xiàn)有的ETL工具在大型信息集成系統(tǒng)中的應(yīng)用缺陷,結(jié)合元數(shù)據(jù)技術(shù),通過(guò)對(duì)ETL工具的集成,設(shè)計(jì)實(shí)現(xiàn)了基于元數(shù)據(jù)的ETL
    發(fā)表于 12-25 14:53 ?10次下載

    基于數(shù)據(jù)質(zhì)量監(jiān)管的ETL設(shè)計(jì)

    設(shè)計(jì)個(gè)具有靈活性和可擴(kuò)展性的ETL 架構(gòu),對(duì)ETL 架構(gòu)進(jìn)行靈活改進(jìn),把數(shù)據(jù)質(zhì)量管理引入到ETL 架構(gòu)中,嘗試以此提高數(shù)據(jù)倉(cāng)庫(kù)的數(shù)據(jù)質(zhì)量,
    發(fā)表于 01-15 16:30 ?9次下載

    ETL工具Kettle用戶手冊(cè)

    ETL工具Kettle用戶手冊(cè)
    發(fā)表于 04-05 11:02 ?0次下載

    用于數(shù)據(jù)分析的各類(lèi)主流ETL 工具比較,哪種最適合你

    數(shù)據(jù)提取、轉(zhuǎn)換與加載(ETL,Extract-Transform-Load)工具能夠使組織內(nèi)的不同數(shù)據(jù)更易于訪問(wèn)、更有意義、也更能被其他數(shù)據(jù)系統(tǒng)所使用。通常情況下,面對(duì)由此產(chǎn)生的自寫(xiě)代碼、自建系統(tǒng)的相關(guān)成本和復(fù)雜性時(shí),企業(yè)會(huì)直接去選擇購(gòu)置
    的頭像 發(fā)表于 06-23 11:25 ?2.4w次閱讀

    5個(gè)頂級(jí)的人工智能開(kāi)源工具

    DMTK 是分布式機(jī)器學(xué)習(xí)工具Distributed Machine Learning Toolkit的縮寫(xiě),和 CNTK 樣,是微軟的開(kāi)源人工智能工具。
    的頭像 發(fā)表于 06-01 10:20 ?6244次閱讀
    5<b class='flag-5'>個(gè)</b>頂級(jí)的人工智能<b class='flag-5'>開(kāi)源</b><b class='flag-5'>工具</b>

    款用于Windows的開(kāi)源反rookit (ARK)工具

    OpenArk 是款用于 Windows 的開(kāi)源反 rookit (ARK) 工具。Ark是Anti-Rootkit的縮寫(xiě),它是款逆向/編程幫手,也是用戶發(fā)現(xiàn)操作系統(tǒng)中隱藏惡意軟件
    的頭像 發(fā)表于 07-19 15:08 ?3698次閱讀
    <b class='flag-5'>一</b>款用于Windows的<b class='flag-5'>開(kāi)源</b>反rookit (ARK)<b class='flag-5'>工具</b>

    多數(shù)據(jù)源數(shù)據(jù)轉(zhuǎn)換和同步的ETL工具推薦

    有許多支持多數(shù)據(jù)源數(shù)據(jù)轉(zhuǎn)換和同步的ETL工具可供選擇。以下是些常見(jiàn)的ETL工具和它們支持多數(shù)據(jù)源數(shù)據(jù)轉(zhuǎn)換和同步的特點(diǎn): Apache Ni
    的頭像 發(fā)表于 07-28 16:32 ?1144次閱讀

    上線 Airflow 官方!DolphinDB 帶來(lái)數(shù)據(jù)管理新體驗(yàn)

    DolphinDB 正式登陸 Apache Airflow 官方,成為 Airflow 官方認(rèn)可的第三方插件及工具供應(yīng)商。Apache Airflow
    的頭像 發(fā)表于 08-23 17:00 ?318次閱讀
    上線 <b class='flag-5'>Airflow</b> 官方!DolphinDB 帶來(lái)數(shù)據(jù)管理新體驗(yàn)