産業用モノのインターネット、産業用ビッグデータのサービス領域を支援: AirFlow のアーキテクチャ コンポーネント [32]

知識ポイント 05: AirFlow のアーキテクチャ コンポーネント

  • 目標: AirFlow のアーキテクチャ コンポーネントを理解する

  • パス

    • step1: アーキテクチャ
    • ステップ2: コンポーネント
  • 埋め込む

    • 建築

      画像-20211005110933346

      • クライアント: AirFlow でスケジュールされたプログラムのクライアントを開発し、AirFlow の Python プログラムを開発するために使用されます。
      • マスター: 分散アーキテクチャ内のマスター ノード。Web サーバーとスケジューラの実行を担当します。
      • ワーカー: 送信されたワークフローでタスクを実行するための実行の実行を担当します。
    • コンポーネント

      画像-20211005111759153

      A scheduler, which handles both triggering scheduled workflows, and submitting Tasks to the executor to run.
      An executor, which handles running tasks. In the default Airflow installation, this runs everything inside the scheduler, but most production-suitable executors actually push task execution out to workers.
      A webserver, which presents a handy user interface to inspect, trigger and debug the behaviour of DAGs and tasks.
      A folder of DAG files, read by the scheduler and executor (and any workers the executor has)
      A metadata database, used by the scheduler, executor and webserver to store state.
      
      • Webサーバー: インタラクティブなインターフェースと監視を提供し、開発者がすべてのタスクの動作をデバッグおよび監視できるようにします。
      • スケジューラ: 実行のために実行に送信するタスクの解析とスケジュールを担当します。
      • エグゼキュータ: 実行コンポーネントは、スケジューラによって割り当てられたタスクを実行し、ワーカーで実行する責任があります。
      • DAG ディレクトリ: DAG プログラムのディレクトリ。自分で開発したプログラムをこのディレクトリに置くと、AirFlow の Web サーバーとスケジューラが自動的にそれを読み取ります。
        • airflow はすべてのプログラムを 1 つのディレクトリに置きます
        • このディレクトリに新しいプログラムがあるかどうかを自動的に検出します
      • MetaData Database: すべての DAG プログラムの情報を記録する AirFlow のメタデータ ストレージ データベース
  • まとめ

    • AirFlow のアーキテクチャ コンポーネントを理解する

知識ポイント06:AirFlowの開発ルール

  • 目標AirFlowの開発ルールをマスターする

  • パス

    • ステップ 1: Python スケジューラーを開発する
    • ステップ 2: Python スケジューラを送信する
  • 埋め込む

    • 公式文書

      • 概念: http://airflow.apache.org/docs/apache-airflow/stable/concepts/index.html
    • 例: http://airflow.apache.org/docs/apache-airflow/stable/tutorial.html

    • Python スケジューラを開発する

      • Python プログラムを開発するには、プログラム ファイルに次の部分が含まれている必要があります。

      • 注: このファイルの操作は utf8 エンコーディングをサポートしていないため、中国語を書き込むことはできません。

      • ステップ1: ガイドパッケージ

        # 必选:导入airflow的DAG工作流
        from airflow import DAG
        # 必选:导入具体的TaskOperator类型
        from airflow.operators.bash import BashOperator
        # 可选:导入定时工具的包
        from airflow.utils.dates import days_ago
        

        画像-20211015103936196

      • ステップ 2: DAG と構成を定義する

        # 当前工作流的基础配置
        default_args = {
                  
                  
            # 当前工作流的所有者
            'owner': 'airflow',
            # 当前工作流的邮件接受者邮箱
            'email': ['[email protected]'],
            # 工作流失败是否发送邮件告警
            'email_on_failure': True,
            # 工作流重试是否发送邮件告警
            'email_on_retry': True,
            # 重试次数
            'retries': 2,
            # 重试间隔时间
            'retry_delay': timedelta(minutes=1),
        }
        
        # 定义当前工作流的DAG对象
        dagName = DAG(
            # 当前工作流的名称,唯一id
            'airflow_name',
            # 使用的参数配置
            default_args=default_args,
            # 当前工作流的描述
            description='first airflow task DAG',
            # 当前工作流的调度周期:定时调度【可选】
            schedule_interval=timedelta(days=1),
            # 工作流开始调度的时间
            start_date=days_ago(1),
            # 当前工作流属于哪个组
            tags=['itcast_bash'],
        )
        
        • DAG ワークフローのインスタンスと構成を構築する
      • ステップ 3: タスクを定義する

        • タスクの種類: http://airflow.apache.org/docs/apache-airflow/stable/concepts/operators.html

        • よく使われる

          • BashOperator- bash コマンドを実行します
            • Linuxコマンドを実行する
          • PythonOperator- 任意の Python 関数を呼び出します
            • Pythonコードを実行する
          • EmailOperator- 電子メールを送信します
            • メールの送信
        • 他の

        • BashOperator: シェル コマンド タスクの定義

          # 导入BashOperator
          from airflow.operators.bash import BashOperator
          # 定义一个Task的对象
          t1 = BashOperator(
          	# 指定唯一的Task的名称
              task_id='first_bashoperator_task',
          	# 指定具体要执行的Linux命令
              bash_command='echo "hello airflow"',
          	# 指定属于哪个DAG对象
              dag=dagName
          )
          
        • PythonOperator: Python コード タスクを定義する

          # 导入PythonOperator
          from airflow.operators.python import PythonOperator
          
          # 定义需要执行的代码逻辑
          def sayHello():
              print("this is a programe")
          
          #定义一个Task对象
          t2 = PythonOperator(
              # 指定唯一的Task的名称
              task_id='first_pyoperator_task',
              # 指定调用哪个Python函数
              python_callable=sayHello,
              # 指定属于哪个DAG对象
              dag=dagName
          )
          

      • ステップ 4: タスクを実行して依存関係を指定する

        • タスクの定義

          Task1:runme_0
          Task2:runme_1
          Task3:runme_2
          Task4:run_after_loop
          Task5:also_run_this
          Task6:this_will_skip
          Task7:run_this_last
          
        • 必要

          • Task1、Task2、Task3は並行して実行され、終了後にTask4が実行されます。
          • Task4、Task5、Task6は並行して実行され、終了後にTask7が実行されます。

          画像-20211005121040679

        • コード

          task1 >> task4
          task2 >> task4
          task3 >> task4
          task4 >> task7
          task5 >> task7
          task6 >> task7
          
        • Task が 1 つだけの場合は、Task オブジェクトの名前を直接記述します。

          task1
          
    • Python スケジューラを送信する

      • しばらく待つ必要がある提出物の種類

      • 自動送信: 自動検出を待つ必要があります

        • 開発したプログラムをAirFlowのDAGディレクトリに置く
        • デフォルトのパスは /root/airflow/dags です。
      • 手動送信: ファイルを手動で実行してエアフローに読み込みを待機させます。

        python xxxx.py
        
      • スケジュール状況

        • ステータスなし (スケジューラが空のタスク インスタンスを作成しました): スケジュールされたタスクは作成されましたが、タスク インスタンスはまだ生成されていません

        • スケジュール済み (スケジューラーがタスク インスタンスを実行する必要があると判断した): スケジュールされたタスクはタスク インスタンスを生成し、実行を待機しています。

        • キューに登録済み (スケジューラーがキューで実行するためにタスクをエグゼキューターに送信): スケジュールされたタスクは、エグゼキューターが実行される前にキュー内で開始されます。

        • 実行中 (ワーカーがタスクを選択し、現在実行中): タスクはワーカー ノードで実行されています。

        • 成功 (タスク完了): タスクの実行が正常に完了しました。

  • まとめ

    • AirFlowの開発ルールをマスターする

おすすめ

転載: blog.csdn.net/xianyu120/article/details/132204203