Imagen

dbtを使用するAirflowワークフローをTeradata Vantageを使って実行してみる

概要

このチュートリアルでは、Airflow を AWS EC2 VM にインストールし、dbt を使用するようにワークフローを構成し、Teradata Vantage データベースに対して実行する方法を示します。Airflowは、データを処理しロードするためのデータパイプラインを構築するために通常使用されるタスクスケジューリングツールです。この例ではDockerベースのAirflow環境を作成するAirflowのインストールプロセスを実行します。Airflowをインストールしたら、Teradata VantageデータベースにデータをロードするAirflow DAG(Direct Acyclic Graph、または単にワークフロー)の例をいくつか実行します。

前提条件

  1. AWS(Amazon Web Services)にアクセスしVMを作成するための権限を持つこと

    このチュートリアルは、このドキュメントで紹介したマシン(AWS上のt2.2xlarge EC2、ストレージは約100GB)と同等の計算能力とストレージを持ち、インターネットに接続されていれば、他の計算プラットフォームやベアメタルマシンでも調整することが可能です。もし、別の計算機プラットフォームを使用する場合は、チュートリアルのいくつかのステップを変更する必要があります。
  2. SSHクライアントが必要です。

    MacやLinuxマシンであれば、これらのツールはすでに含まれています。Windowsであれば、PuTTY または MobaXterm を検討してください。
  3. Teradata Vantageインスタンスにアクセスする必要があります。Teradata Vantage をご利用でない場合は、開発者向けの無償版である Vantage Express を探索してください。

Airflow をインストールして実行する

VMを作成する

  1. AWS EC2コンソールに移動し、`Launch instance`をクリックします。

  2. オペレーティングシステムイメージの`Red Hat`を選択します。

  3. インスタンスタイプは t2.2xlarge を選択します。

  4. 新しいキー ペアを作成するか、既存のキー ペアを使用します。

  5. ネットワーク設定を適用して、サーバーにsshでアクセスできるようにし、サーバーがインターネットにアウトバウンド接続できるようにします。通常、デフォルトの設定を適用します。

  6. 100 GBのストレージを割り当てます。

Pythonのインストール

  1. `ec2-user`ユーザーを使用してマシンにsshします。

  2. pythonがインストールされているか確認します(Python3.7以上である必要があります)。コマンド ラインから python または python3 入力してください。

  3. Python がインストールされていない場合 ( コマンドが見つからない というメッセージが出る場合)は、以下のコマンドを実行してインストールします。コマンドは、 y と入力してインストールを確認するようリクエストする場合があります。

    sudo yum install python3
    # create a virtual environment for the project
    sudo yum install python3-pip
    sudo pip3 install virtualenv

Airflow環境の構築

  1. Airflowディレクトリ構造を作成します(ec2-userホームディレクトリ/home/ec2-userから)

    mkdir airflow
    cd airflow
    mkdir -p ./dags ./logs ./plugins ./data ./config ./data
    echo -e "AIRFLOW_UID=$(id -u)" > .env
  2. お好みのファイル転送ツール ( scpPuTTYMobaXterm など) を使用して、 airflow.cfg ファイルを airflow/config ディレクトリにアップロードします。

Dockerのインストール

Dockerはコンテナ化ツールであり、Airflowをコンテナ環境にインストールすることができます。

手順は、airflow ディレクトリで実行する必要があります。
  1. podman (RHELのコンテナ化ツール)をアンインストールします。

    sudo yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine \
    podman \
    runc
  2. yumユーティリティをインストールします。

    sudo yum install -y yum-utils
  3. Dockerを yum リポジトリに追加します。

    sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
  4. Dockerをインストールします。

    sudo yum install docker-ce docker-ce-cli containerd.io
  5. サービスとしてDockerを起動します。最初のコマンドは、次回システムが起動するときにDockerサービスを自動的に実行します。2 番目のコマンドはDockerを起動します。

    sudo systemctl enable docker
    sudo systemctl start docker
  6. Dockerが正しくインストールされているかどうかを確認します。このコマンドは、コンテナの空のリストを返すはずです (まだコンテナを開始していないため)。

    sudo docker ps

docker-compose とDocker環境設定ファイルのインストール

  1. docker-compose.yamlDockerfile ファイルを VM にアップロードし、 airflow ディレクトリに保存します。

    「docker-compose.yaml」と「Dockerfile」の機能

    docker-compose.yaml および Dockerfile は、インストール時に環境を構築するために必要なファイルです。 docker-compose.yaml ファイルは、Airflowのdockerコンテナをダウンロードし、インストールするものです。このコンテナには、Web UI、メタデータ用のPostgresデータベース、スケジューラ、3つのワーカー(3つのタスクを並行して実行可能)、トリガー、 dbt が生成するドキュメントを表示するためのnginx Webサーバーが含まれています。このほか、コンテナへのホストディレクトリのマウントや、各種インストール処理も行われます。Dockerfile は、各コンテナに必要なパッケージを追加でインストールします。

    `docker-compose.yaml` と `Dockerfile` が何をするファイルなのか、もっと詳しく知りたい方はこれらのファイルをご覧ください。何がなぜインストールされるのかを明確にするためのコメントもあります。
  2. docker-composeをインストールします(yamlファイルを実行するために必要)。

    この手順は、バージョン 1.29.2 に基づいています。最新のリリースは https://github.com/docker/compose/releases で確認し、必要に応じて以下のコマンドを更新してください。
    sudo curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
    sudo chmod +x /usr/local/bin/docker-compose
    sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
  3. docker-composeのインストールをテストします。このコマンドは、docker-composeバージョンを返す必要があります。たとえば、docker-compose version 1.29.2, build 5becea4c:

    docker-compose --version

テスト dbt プロジェクトのインストール

これらの手順では、サンプル dbt プロジェクトをセットアップします。 dbt ツール自体は、後で `docker-compose`によってコンテナにインストールされます。
  1. gitをインストールします。

    sudo yum install git
  2. jaffle shop の dbt プロジェクトのサンプルを入手します。

    dbt ディレクトリは、ホーム ディレクトリの下に作成されます ( airflow`の下ではありません)。この例では、ホームディレクトリは/home/ec2-user`です。
    # move to home dir
    cd
    mkdir dbt
    cd dbt
    git clone https://github.com/Teradata/jaffle_shop-dev.git jaffle_shop
    cd jaffle_shop
    mkdir target
    chmod 777 target
    echo '' > target/index.html
    chmod o+w target/index.html
  3. Teradata Studio Express、bteq などのデータベースツールを使用して、Teradataデータベース上に airflowtestjaffle_shop のユーザー/データベースを作成します。 dbc としてデータベースにログインし、コマンドを実行します(必要に応じてパスワードを変更します)。

    CREATE USER "airflowtest" FROM "dbc" AS PERM=5000000000 PASSWORD="abcd";
    CREATE USER "jaffle_shop" FROM "dbc" AS PERM=5000000000 PASSWORD="abcd";
  4. dbt構成ディレクトリを作成します。

    cd
    mkdir .dbt
  5. profiles.yml .dbt ディレクトリにコピーします。

  6. Teradataデータベースの設定に対応するように、ファイルを編集します。最低でも、ホスト、ユーザー、パスワードは変更する必要があります。手順 3 で設定した jaffle_shop のユーザー信頼証明を使用します。

DockerでAirflow環境を作成する

  1. Dockerfiledocker-compose.yaml がある airflow ディレクトリで、Docker環境作成スクリプトを実行します。

    cd ~/airflow
    sudo docker-compose up --build

    これには 5 ~ 10 分かかる場合があります。インストールが完了すると、画面に次のようなメッセージが表示されます。

    airflow-webserver_1  | 127.0.0.1 - - [13/Sep/2022:00:20:48 +0000] "GET /health HTTP/1.1" 200 187 "-" "curl/7.74.0"

    これは、Airflow Webサーバがコールを受け入れる準備ができていることを意味する。

  2. これで、Airflowが起動したはずです。インストール時に使用していたターミナルセッションは、ログメッセージの表示に使用されますので、 以降の手順では別のターミナルセッションを開くことをお勧めします。Airflow の設置型を確認します。

    sudo docker ps

    結果は以下のようになります。

    CONTAINER ID   IMAGE                  COMMAND                  CREATED          STATUS                    PORTS                                                 NAMES
    60d50d9f43f5   apache/airflow:2.2.4   "/usr/bin/dumb-init …"   18 minutes ago   Up 18 minutes (healthy)   8080/tcp                                              airflow_airflow-scheduler_1
    e2b46ec98274   apache/airflow:2.2.4   "/usr/bin/dumb-init …"   18 minutes ago   Up 18 minutes (healthy)   8080/tcp                                              airflow_airflow-worker_3_1
    7b44004c7277   apache/airflow:2.2.4   "/usr/bin/dumb-init …"   18 minutes ago   Up 18 minutes (healthy)   8080/tcp                                              airflow_airflow-worker_1_1
    4017b8ce9235   apache/airflow:2.2.4   "/usr/bin/dumb-init …"   18 minutes ago   Up 18 minutes (healthy)   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp             airflow_airflow-webserver_1
    3cc407e2d565   apache/airflow:2.2.4   "/usr/bin/dumb-init …"   18 minutes ago   Up 18 minutes (healthy)   0.0.0.0:5555->5555/tcp, :::5555->5555/tcp, 8080/tcp   airflow_flower_1
    340a83b202e3   apache/airflow:2.2.4   "/usr/bin/dumb-init …"   18 minutes ago   Up 18 minutes (healthy)   8080/tcp                                              airflow_airflow-triggerer_1
    82198f0d8b84   apache/airflow:2.2.4   "/usr/bin/dumb-init …"   18 minutes ago   Up 18 minutes (healthy)   8080/tcp                                              airflow_airflow-worker_2_1
    382c3077c1e5   redis:latest           "docker-entrypoint.s…"   18 minutes ago   Up 18 minutes (healthy)   6379/tcp                                              airflow_redis_1
    8a3be8d8a7f4   nginx                  "/docker-entrypoint.…"   18 minutes ago   Up 18 minutes (healthy)   0.0.0.0:4000->80/tcp, :::4000->80/tcp                 airflow_nginx_1
    9ca888e9e8df   postgres:13            "docker-entrypoint.s…"   18 minutes ago   Up 18 minutes (healthy)   5432/tcp                                              airflow_postgres_1
  3. Dockerのインストールを削除したい場合(例えば、docker-compose.yamlとDockerfileファイルを更新して別の環境を再作成する場合)、コマンドは(これらのファイルがあるairflowディレクトリから)です。

    sudo docker-compose down --volumes --rmi all

    スタックが停止したら、設定ファイルを更新し、手順 1 のコマンドを実行して再起動します。

  4. AirflowのWeb UIが動作するかどうかをテストするには、ブラウザで次のURLを入力します。 <VM_IP_ADDRESS> をVMの外部IPアドレスに置き換えてください。

Airflow DAG の実行

  1. airflow_dbt_integration.pydb_test_example_dag.pydiscover_dag.txtvariables.json ファイルを `/home/ec2-user/airflow/dags`にコピーします。

  2. ファイルを確認します。

    • airflow_dbt_integration.py - いくつかのテーブルを作成し、クエリーを実行する簡単な Teradata SQL の例です。

    • db_test_example_dag.py - dbtのサンプル(dbtとairflowをTeradataデータベースと統合する)を実行します。この例では、架空のjaffle_shopデータモデルが作成、ロードされ、このプロジェクトのドキュメントが作成されます(ブラウザで http://<VM_IP_ADDRESS>:4000/) を指定すると見ることができます)。

      `db_test_example_dag.py`を調整

      db_test_example_dag.py を更新して、TeradataデータベースのIPアドレスがあなたのデータベースを指すようにする必要があります。

    • discover_dag.py - 様々なタイプのデータファイル(CSV, Parquet, JSON)を読み込む方法の例です。ソースコードファイルには、プログラムが何を行い、どのようにそれを使用するかを説明するコメントが含まれています。この例では、`variables.json`ファイルを使用します。このファイルは、Airflowにインポートする必要があります。それは後続のステップで行われます。

  3. これらのdagファイルがエアフローツールに拾われるまで数分待ちます。これらのファイルがピックアップされると、Airflow ホームページのダグリストに表示されます。

  4. variables.json ファイルを変数ファイルとして Airflow にインポートします。

    • Admin → Variables メニューアイテムをクリックし、Variables ページに移動します。

      Airflow管理ドロップダウン
    • Choose File をクリックし、ファイル エクスプローラで variable.json を選択して Import Variables をクリックします。

      Airflow管理ドロップダウン
    • お使いの環境に合わせて、変数を編集します。

  5. UIからDAGを実行し、ログを確認します。

まとめ

このチュートリアルは、Linux サーバーに Airflow 環境をインストールする方法と、Airflow を使用して Teradata Vantage データベースと対話する方法について、実践的な演習を提供することを目的とし ています。また、Airflow とデータモデリングおよびメンテナンスツールである dbt を統合して、Teradata Vantage データベースを作成およびロードする方法についての例も提供されます。

さらに詳しく

ご質問がある場合、またはさらにサポートが必要な場合は、コミュニティ フォーラムにアクセスしてサポートを受け、他のコミュニティ メンバーと交流してください。
このページは役に立ちましたか?