dbtを使用するAirflowワークフローをTeradata Vantageを使って実行してみる
概要
このチュートリアルでは、Airflow を AWS EC2 VM にインストールし、dbt を使用するようにワークフローを構成し、Teradata Vantage データベースに対して実行する方法を示します。Airflowは、データを処理しロードするためのデータパイプラインを構築するために通常使用されるタスクスケジューリングツールです。この例ではDockerベースのAirflow環境を作成するAirflowのインストールプロセスを実行します。Airflowをインストールしたら、Teradata VantageデータベースにデータをロードするAirflow DAG(Direct Acyclic Graph、または単にワークフロー)の例をいくつか実行します。
前提条件
-
AWS(Amazon Web Services)にアクセスしVMを作成するための権限を持つこと
このチュートリアルは、このドキュメントで紹介したマシン(AWS上のt2.2xlarge EC2、ストレージは約100GB)と同等の計算能力とストレージを持ち、インターネットに接続されていれば、他の計算プラットフォームやベアメタルマシンでも調整することが可能です。もし、別の計算機プラットフォームを使用する場合は、チュートリアルのいくつかのステップを変更する必要があります。 -
SSHクライアントが必要です。
-
Teradata Vantageインスタンスにアクセスする必要があります。Teradata Vantage をご利用でない場合は、開発者向けの無償版である Vantage Express を探索してください。
Airflow をインストールして実行する
VMを作成する
-
AWS EC2コンソールに移動し、`Launch instance`をクリックします。
-
オペレーティングシステムイメージの`Red Hat`を選択します。
-
インスタンスタイプは
t2.2xlarge
を選択します。 -
新しいキー ペアを作成するか、既存のキー ペアを使用します。
-
ネットワーク設定を適用して、サーバーにsshでアクセスできるようにし、サーバーがインターネットにアウトバウンド接続できるようにします。通常、デフォルトの設定を適用します。
-
100 GBのストレージを割り当てます。
Pythonのインストール
-
`ec2-user`ユーザーを使用してマシンにsshします。
-
pythonがインストールされているか確認します(Python3.7以上である必要があります)。コマンド ラインから
python
またはpython3
入力してください。 -
Python がインストールされていない場合 (
コマンドが見つからない
というメッセージが出る場合)は、以下のコマンドを実行してインストールします。コマンドは、y
と入力してインストールを確認するようリクエストする場合があります。sudo yum install python3 # create a virtual environment for the project sudo yum install python3-pip sudo pip3 install virtualenv
Airflow環境の構築
-
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
-
お好みのファイル転送ツール (
scp
、PuTTY
、MobaXterm
など) を使用して、 airflow.cfg ファイルをairflow/config
ディレクトリにアップロードします。
Dockerのインストール
Dockerはコンテナ化ツールであり、Airflowをコンテナ環境にインストールすることができます。
手順は、airflow ディレクトリで実行する必要があります。
|
-
podman (RHELのコンテナ化ツール)をアンインストールします。
sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine \ podman \ runc
-
yumユーティリティをインストールします。
sudo yum install -y yum-utils
-
Dockerを yum リポジトリに追加します。
sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
-
Dockerをインストールします。
sudo yum install docker-ce docker-ce-cli containerd.io
-
サービスとしてDockerを起動します。最初のコマンドは、次回システムが起動するときにDockerサービスを自動的に実行します。2 番目のコマンドはDockerを起動します。
sudo systemctl enable docker sudo systemctl start docker
-
Dockerが正しくインストールされているかどうかを確認します。このコマンドは、コンテナの空のリストを返すはずです (まだコンテナを開始していないため)。
sudo docker ps
docker-compose
とDocker環境設定ファイルのインストール
-
docker-compose.yaml と Dockerfile ファイルを 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` が何をするファイルなのか、もっと詳しく知りたい方はこれらのファイルをご覧ください。何がなぜインストールされるのかを明確にするためのコメントもあります。
-
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
-
docker-composeのインストールをテストします。このコマンドは、docker-composeバージョンを返す必要があります。たとえば、
docker-compose version 1.29.2, build 5becea4c
:docker-compose --version
テスト dbt プロジェクトのインストール
これらの手順では、サンプル dbt プロジェクトをセットアップします。 dbt ツール自体は、後で `docker-compose`によってコンテナにインストールされます。
|
-
gitをインストールします。
sudo yum install git
-
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
-
Teradata Studio Express、
bteq
などのデータベースツールを使用して、Teradataデータベース上にairflowtest
とjaffle_shop
のユーザー/データベースを作成します。dbc
としてデータベースにログインし、コマンドを実行します(必要に応じてパスワードを変更します)。CREATE USER "airflowtest" FROM "dbc" AS PERM=5000000000 PASSWORD="abcd"; CREATE USER "jaffle_shop" FROM "dbc" AS PERM=5000000000 PASSWORD="abcd";
-
dbt構成ディレクトリを作成します。
cd mkdir .dbt
-
profiles.yml を
.dbt
ディレクトリにコピーします。 -
Teradataデータベースの設定に対応するように、ファイルを編集します。最低でも、ホスト、ユーザー、パスワードは変更する必要があります。手順 3 で設定した
jaffle_shop
のユーザー信頼証明を使用します。
DockerでAirflow環境を作成する
-
Dockerfile
とdocker-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サーバがコールを受け入れる準備ができていることを意味する。
-
これで、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
-
Dockerのインストールを削除したい場合(例えば、docker-compose.yamlとDockerfileファイルを更新して別の環境を再作成する場合)、コマンドは(これらのファイルがあるairflowディレクトリから)です。
sudo docker-compose down --volumes --rmi all
スタックが停止したら、設定ファイルを更新し、手順 1 のコマンドを実行して再起動します。
-
AirflowのWeb UIが動作するかどうかをテストするには、ブラウザで次のURLを入力します。
<VM_IP_ADDRESS>
をVMの外部IPアドレスに置き換えてください。-
DAG UI:
http://<YOUR_IP_ADDRESS> :8080/home
- username: airflow / password: airflow -
Flower Airflow UI (worker control):
http://<YOUR_IP_ADDRESS>:5555/
-
Airflow DAG の実行
-
airflow_dbt_integration.py、 db_test_example_dag.py、 discover_dag.txt、 variables.json ファイルを `/home/ec2-user/airflow/dags`にコピーします。
-
ファイルを確認します。
-
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にインポートする必要があります。それは後続のステップで行われます。
-
-
これらのdagファイルがエアフローツールに拾われるまで数分待ちます。これらのファイルがピックアップされると、Airflow ホームページのダグリストに表示されます。
-
variables.json
ファイルを変数ファイルとして Airflow にインポートします。-
Admin → Variables
メニューアイテムをクリックし、Variables ページに移動します。 -
Choose File
をクリックし、ファイル エクスプローラでvariable.json
を選択してImport Variables
をクリックします。 -
お使いの環境に合わせて、変数を編集します。
-
-
UIからDAGを実行し、ログを確認します。
まとめ
このチュートリアルは、Linux サーバーに Airflow 環境をインストールする方法と、Airflow を使用して Teradata Vantage データベースと対話する方法について、実践的な演習を提供することを目的とし ています。また、Airflow とデータモデリングおよびメンテナンスツールである dbt を統合して、Teradata Vantage データベースを作成およびロードする方法についての例も提供されます。
さらに詳しく
ご質問がある場合、またはさらにサポートが必要な場合は、コミュニティ フォーラムにアクセスしてサポートを受け、他のコミュニティ メンバーと交流してください。 |