ゼファーネットのロゴ

Docker を使用して Airflow をローカルで実行する: テクニカル ガイド

日付:

概要

Apache Airflow と Docker は、データとソフトウェアのデプロイメントの処理方法に革命をもたらした XNUMX つの強力なツールです。 Apache Airflow は、ワークフローをプログラムで作成、スケジュール、監視できるオープンソース プラットフォームです。 一方、Docker は、開発者がアプリケーションをコンテナ (アプリケーションのソース コードと OS ライブラリ、およびそのコードを任意の環境で実行するために必要な依存関係と組み合わせる、標準化された実行可能コンポーネント) にパッケージ化できるプラットフォームです。

Docker を使用して Airflow をローカルで実行することは、いくつかの理由から優れたアイデアです。 まず、Docker は Airflow セットアップ用に分離された一貫した環境を提供し、依存関係、ライブラリ、さらには OS の違いによって問題が発生する可能性を減らします。 XNUMX 番目に、Docker を使用すると、Airflow セットアップのバージョン管理、配布、複製が簡単になります。これは、チーム環境や開発から運用に移行する場合に特に役立ちます。

ローカル環境のセットアップ

開始するには、次のソフトウェアをマシンにインストールする必要があります。

  • Python (バージョン 3.6 以降)
  • ドッカー (バージョン 20.10.11)
  • Docker Compose (バージョン 2.2.1)

Python、Docker、Airflow のインストールは簡単です。 Python と Docker の場合は、特定の OS の公式インストール ガイドに従うことができます。 Airflow の場合は、Python のパッケージ インストーラーである pip を使用してインストールできます。

Pythonをインストールする

Apache Airflow は Python で記述されているため、マシンに Python がインストールされている必要があります。 からダウンロードできます。 パイソンの公式サイト。 執筆時点では、Airflow には Python 3.6 以降が必要です。

Python がインストールされているかどうかを確認し、そのバージョンを確認するには、ターミナル ウィンドウを開いて次のように入力します。

$ python --version

ドッカーをインストールする

Docker を使用すると、Airflow セットアップをコンテナ化できます。 Docker は次からダウンロードできます。 Docker の公式 Web サイト。 オペレーティング システムに適したバージョンを選択してください。

インストール後、ターミナル ウィンドウを開いて次のように入力することで、Docker が正しくインストールされているかどうかを確認できます。

$ docker --version

ドッカーをインストールする

Docker Compose は、複数コンテナーの Docker アプリケーションを定義および管理できるツールであり、これが Airflow セットアップになります。 通常、これは Windows および Mac の Docker インストールに含まれていますが、一部の Linux ディストリビューションでは個別にインストールする必要がある場合があります。 次のように入力すると、Docker Compose がインストールされているかどうかを確認し、そのバージョンを確認できます。

$ docker-compose --version

インストールされていない場合は、次の手順に従ってください。 公式 Docker Compose インストール ガイド.

プロジェクト構造

クリーンで整理されたプロジェクト構造を維持するために、すべての Airflow 関連ファイルを専用のディレクトリに保存することをお勧めします。

プロジェクトに推奨される構造は次のとおりです。

my_project/
│
├── airflow/ # Directory for all Airflow-related files
│ ├── dags/ # Directory to store your Airflow DAGs
│ │ ├── dag1.py
│ │ ├── dag2.py
│ │ └── ...
│ │
│ ├── Dockerfile # Dockerfile for building your custom Airflow image
│ ├── docker-compose.yml # Docker Compose file for defining your services
│
└── ... # Other directories and files for your project

この構造では:

  •   airflow/ ディレクトリは、Airflow 関連のすべてのファイルを保存する場所です。 これにより、Airflow セットアップがプロジェクトの他の部分から分離され、管理が容易になります。

  •   dags/ 内のディレクトリ airflow/ ディレクトリは、Airflow DAG を保存する場所です。 これらはワークフローを定義する Python スクリプトです。 Docker Compose ファイルでは、このディレクトリを次のようにマップします。 /usr/local/airflow/dags Airflow コンテナに入れてください。

  •   Dockerfile 内部 airflow/ ディレクトリは、カスタム Airflow Docker イメージを構築するために使用されます。 このファイルには、Airflow データベースを初期化し、カスタムをコピーする手順が含まれています。 airflow.cfg ファイルを画像に取り込みます。

  •   docker-compose.yml 内部のファイル airflow/ ディレクトリは、Docker Compose のサービス (Web サーバー、スケジューラー、データベースなど) を定義する場所です。

Airflow-Docker セットアップのパーソナライズ

Airflow を実行する前に、データベースを初期化する必要があります。 Docker 化されたセットアップでは、Airflow データベースの初期化と airflow.cfg ファイルの作成はホスト マシン上ではなく、Docker コンテナ内で行うことができます。

これを行うには、Dockerfile を使用してカスタム Airflow Docker イメージを構築します。 この Dockerfile では、Airflow データベースを初期化し、 airflow.cfg ファイルにソフトウェアを指定する必要があります。

Dockerfile の例を次に示します。


FROM apache/airflow:latest ENV AIRFLOW_HOME=/usr/local/airflow USER root RUN mkdir -p ${AIRFLOW_HOME} && chown -R airflow: ${AIRFLOW_HOME USER airflow RUN airflow db init RUN echo "[core]" > ${AIRFLOW_HOME}/airflow.cfg && echo "airflow_home = ${AIRFLOW_HOME}" >> ${AIRFLOW_HOME}/airflow.cfg && echo "executor = LocalExecutor" >> ${AIRFLOW_HOME}/airflow.cfg && echo "" >> ${AIRFLOW_HOME}/airflow.cfg && echo "[webserver]" > ${AIRFLOW_HOME}/airflow.cfg && echo "base_url = http://localhost:8080" >> ${AIRFLOW_HOME}/airflow.cfg && echo "web_server_host = 0.0.0.0" >> ${AIRFLOW_HOME}/airflow.cfg && echo "web_server_port = 8080" >> ${AIRFLOW_HOME}/airflow.cfg{AIRFLOW_HOME}/airflow.cfg

この Dockerfile では、最初に AIRFLOW_HOME 環境変数 /usr/local/airflow。 次に、次のコマンドを使用して root ユーザーに切り替えます。 USER root 指令。 ディレクトリを作成し、その所有権を変更するには root 権限が必要なので、これが必要です。

次に、 AIRFLOW_HOME ディレクトリを作成し、その所有権を に変更します。 airflow ユーザー。 これは、 RUN mkdir -p ${AIRFLOW_HOME} && chown -R airflow: ${AIRFLOW_HOME} コマンド。 の -p 内のオプション mkdir コマンドにより、ディレクトリが存在しない場合は確実に作成されます。

その後、に戻ります。 airflow を使用しているユーザー USER airflow 指令。 root ユーザーとしてコンテナを実行するとセキュリティ上のリスクが生じる可能性があるため、これはセキュリティ上の理由から推奨されます。

次に、次を使用して Airflow データベースを初期化します。 RUN airflow db init

最後に、カスタマイズします。 airflow.cfg ファイルを Docker コンテナ内に直接保存します。 これは、 RUN 一連のディレクティブ echo コマンド。カスタム設定を airflow.cfg ファイル。 このアプローチにより、 airflow.cfg ホスト マシン上でファイルを作成したりカスタマイズしたりする必要はありません。

この Dockerfile では、 > の代わりに演算子 >> 最初に書き込むときの演算子 airflow.cfg ファイル。 ザ > オペレータは指定されたテキストでファイルを上書きしますが、 >> オペレータはテキストをファイルに追加します。 ファイルを上書きすることで、各セクションが XNUMX 回だけ宣言されることが保証されます。

以下に、あなたの方法の例を示します。 airflow.cfg ファイル内の設定されたセクションは次のようになります。

[core] airflow_home = ~/airflow executor = LocalExecutor [webserver] base_url = http://localhost:8080 web_server_host = 0.0.0.0 web_server_port = 8080

この Dockerfile を作成したら、次のコマンドを使用してカスタム Airflow Docker イメージを構築できます。 docker build 指図。 次に例を示します。

ベストプラクティス、業界で認められた標準、および含まれているチートシートを含む、Gitを学習するための実践的で実用的なガイドを確認してください。 グーグルGitコマンドを停止し、実際に 学ぶ それ!

$ docker build -t my-airflow-image .

ドッカーの作成

Docker Compose は、複数コンテナーの Docker アプリケーションを定義および管理できるツールです。 YAML ファイルを使用してアプリケーションのサービス、ネットワーク、ボリュームを指定し、これらすべてのコンポーネントを XNUMX つのコマンドで起動します。

Docker Compose ファイルの構成

Docker Compose ファイルは、アプリケーションのサービスを定義する場所です。 Airflow の場合、基本的な Docker Compose ファイルには、Web サーバー、スケジューラー、データベースのサービスが含まれる場合があります。 このファイルは Dockerfile と同じディレクトリに存在する必要があります。

次に例を示します:

version: "3"
services: webserver: build: context: . dockerfile: Dockerfile command: webserver volumes: - ./dags:/usr/local/airflow/dags ports: - "8080:8080" scheduler: build: context: . dockerfile: Dockerfile command: scheduler volumes: - ./dags:/usr/local/airflow/dags postgres: image: postgres:latest environment: - POSTGRES_USER=airflow - POSTGRES_PASSWORD=airflow - POSTGRES_DB=airflow

この Docker Compose ファイルでは、次の XNUMX つのサービスを定義します。 webserver, scheduler, postgresを選択します。 build ディレクティブは、現在のディレクトリ内の Dockerfile を使用してイメージを構築するように Docker Compose に指示します。 の volumes ディレクティブは ./dags ホストマシン上のディレクトリを /usr/local/airflow/dags これにより、DAG をホスト マシンに保存できるようになります。 の ports ディレクティブは、ホスト マシンのポート 8080 を Docker コンテナのポート 8080 にマップし、次の場所で Airflow Web サーバーにアクセスできるようにします。 http://localhost:8080.

  postgres サービスはを使用します postgres:latest イメージを作成し、Docker Compose ファイルに環境変数を直接設定します。 これらの環境変数は、Postgres データベースを構成するために使用されます。

Airflow サービスの開始

Airflow サービスを起動するには、 docker-compose up 指図。 を追加すると、 -d flag はバックグラウンドでサービスを実行します。 コマンドは次のとおりです。

$ docker-compose up -d

このコマンドは、Docker Compose ファイルで定義されているすべてのサービスを開始します。 サービスのステータスを確認するには、 docker-compose ps

Airflow でのユーザーの作成

Airflow を使用して Docker Compose を設定したら、Airflow Web インターフェイスにアクセスできるユーザーを作成する必要があります。 これは、実行中の Docker コンテナーでコマンドを実行することで実行できます。

まず、実行中の Airflow Web サーバーのコンテナ ID を見つける必要があります。 これを行うには、次のコマンドを実行します。

$ docker ps

このコマンドは、実行中のすべての Docker コンテナーとその詳細を一覧表示します。 Airflow Webサーバーを実行しているコンテナを探し、そのコンテナIDを書き留めます。

次に、次のコマンドを実行して、Airflow で新しいユーザーを作成できます。

$ docker exec -it <container-id> airflow users create --username admin --password admin --firstname First --lastname Last --role Admin --email [email protected]

交換する <container-id> 先ほど書き留めたコンテナ ID を使用します。 このコマンドは、ユーザー名「admin」、パスワード「admin」、名「First」、姓「Last」、ロール「Admin」、電子メール「」の新しいユーザーを作成します。[メール保護]'。 これらの値を独自の値に置き換える必要があります。

このコマンドを実行すると、作成したユーザーの資格情報を使用して Airflow Web インターフェイスにログインできるようになります。

最適化と応用

パフォーマンスの向上

Airflow と Docker のセットアップを最適化すると、データ パイプラインのパフォーマンスが大幅に向上します。 Airflow の場合は、タスクの並列実行に LocalExecutor を使用し、DAG を微調整して不要なタスクを減らすことを検討してください。 Docker の場合は、イメージができるだけ軽量であることを確認し、Docker の組み込みリソース管理機能を使用して CPU とメモリの使用量を制限します。

たとえば、Docker コンテナのメモリ使用量を制限するには、 mem_limit Docker Compose ファイルのパラメータ:

services: webserver: build: context: . dockerfile: Dockerfile command: webserver volumes: - ./dags:/usr/local/airflow/dags ports: - "8080:8080" mem_limit: 512m

メモリに加えて、コンテナが使用できる CPU リソースも管理できます。 cpu_shares パラメータ を使用します。

services: webserver: build: context: . dockerfile: Dockerfile command: webserver volumes: - ./dags:/usr/local/airflow/dags ports: - "8080:8080" mem_limit: 512m
    cpu_shares: 512

  cpu_shares パラメーターを使用すると、コンテナーが使用できる CPU リソースを制御できます。 この値は、他のコンテナに対する相対的な重みです。 たとえば、1024 つのコンテナーの値が 512 で、別のコンテナーの値が XNUMX である場合、最初のコンテナーは XNUMX 番目のコンテナーの XNUMX 倍の CPU 時間を取得します。

この簡単な追加はシステムのパフォーマンスに大きな影響を与え、リソースが効率的に使用され、データ パイプラインがスムーズに実行されるようになります。 こうした小さな調整や最適化こそが、長期的には大きな違いを生み、優れたデータ パイプラインを優れたものに変えることができます。

Docker で Airflow を使用する場合とその理由

データ エンジニアとしての歩みの中で、私はさまざまな複雑なプロジェクトに取り組む機会がありました。 そのようなプロジェクトの XNUMX つには、大量のデータを処理および分析するためのデータ パイプラインの作成が含まれていました。 プロジェクトの複雑さは気が遠くなるようなもので、プロセスを簡素化できるツールの必要性は明らかでした。 そんなときにAirflowとDockerを発見しました。

Airflow は、堅牢なスケジューリング機能とオーケストレーション機能を備えており、データ パイプラインのニーズに完璧に適合しました。 しかし、真の変革者は Docker でした。 Docker により、Airflow セットアップをコンテナ化できるようになり、多くのメリットがもたらされました。

まず、Docker のおかげでチームとの共同作業が驚くほど簡単になりました。 Docker イメージを共有し、全員が同じ環境で作業できるようにしました。 これにより、「でも私のマシンでは動作する」という問題が解消され、開発プロセスがよりスムーズになりました。

次に、Docker のおかげで、ローカル マシン上で Airflow パイプラインを簡単にテストできるようになりました。 運用環境をローカルに複製し、パイプラインを実行し、開発プロセスの早い段階で問題を発見できました。 これは、テストが煩雑なプロセスだった以前のワークフローに比べて、大幅に改善されました。

最後に、パイプラインを本番環境にデプロイする段階になったとき、Docker によってプロセスがシームレスになりました。 Docker イメージを運用サーバーにプッシュして実行するだけで済みました。 依存関係のインストールやサーバーの構成について心配する必要はありませんでした。 必要なものはすべて Docker イメージ内にパッケージ化されていました。

Docker で Airflow を使用することは、革新的な体験でした。 これにより、開発プロセスがより効率化されただけでなく、プロジェクトのニーズを満たす高品質のデータ パイプラインを提供できるようになりました。 データ パイプライン プロジェクトに取り組んでいる開発者やチームには、この設定を強くお勧めします。

ケーススタディ: Quizlet のデータ分析ワークフロー

Quizletの採用 Apache Airflow の分析 ETL に革命をもたらしました。 Airflow は当初単一サーバーに導入され、Google BigQuery からのデータ抽出、SQL での分析の実行、レポートやダッシュボードの結果の保存を効率化しました。 この導入の成功により、機械学習分類器のトレーニング、検索インデックスの計算、A/B テスト、ユーザー ターゲティングなどのタスクが拡張されました。

Quizlet は今後、メタデータ データベースを専用インスタンスに移行し、Google Cloud Storage と統合し、分散キュー システムに切り替えることで、Airflow の導入を強化する予定です。 本質的に、Apache Airflow は Quizlet にとって大きな変革をもたらし、Quizlet がより多くのことを実行し、ビジネスを前進させることができるようになりました。

まとめ

この記事では、Docker を使用して Airflow をローカルで実行する方法を検討しました。 ローカル環境のセットアップと必要なソフトウェアのインストールから、Docker Compose を使用した Airflow サービスのデプロイまで、すべてをカバーしました。 また、セットアップを最適化するためのヒントやテクニックについても説明し、個人的な経験や実際のアプリケーションについても共有しました。

Docker で Airflow を実行すると、簡単にバージョン管理、配布、複製できる、一貫性のある分離された環境が提供されます。 このセットアップは、Airflow の強力なスケジューリングおよびオーケストレーション機能と Docker の柔軟性および分離性を組み合わせているため、複雑なデータ パイプラインの管理に最適です。 ワークフローを合理化したいと考えているデータ エンジニアであっても、開発環境全体で一貫性を確保したいと考えているチームであっても、Docker を使用してローカルで Airflow を実行することは強力なソリューションです。

このガイドがお役に立ち、独自の Airflow-Docker セットアップを開始するための知識と自信を提供できれば幸いです。

スポット画像

最新のインテリジェンス

スポット画像