著者 Igor Machin, Ambrose Inman
最終更新日 2022年11月18日
警告
本記事はTeradata CorporationのサイトGetting Startedに掲載された内容を抄訳したものです。掲載内容の正確性・完全性・信頼性・最新性を保証するものではございません。正確な内容については、原本をご参照下さい。
また、修正が必要な箇所や、ご要望についてはコメントをよろしくお願いします。
概要
このチュートリアルではAWS EC2 VMにAirflowをインストールし、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クライアントが必要です
3.Teradata Vantageインスタンスにアクセスする必要があります。Vantageをご利用でない場合は、開発者向けの無償版であるTeradata Vantageのお試し環境の構築方法(まとめ)をご覧ください。
Install and execute Airflow
Create a VM
1.AWS EC2のコンソールにアクセスし、「インスタンスの起動」をクリックします。
2.OSイメージに「Red Hat」を選択します。
3.インスタンスタイプは「t2.2xlarge」を選択します。
4.新しいキーペアを作成するか、既存のキーペアを使用します。
5.ネットワーク設定を適用して、サーバーにsshでアクセスできるようにし、サーバーがインターネットにアウトバウンド接続できるようにします。通常、デフォルトの設定を適用します。
6.100GBのストレージを割り当てます。
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
エアフロー環境の構築
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.お好みのファイル転送ツール(scp、PuTTY、MobaXtermなど)を使用して、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.yumリポジトリにdockerを追加します。
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.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が何をするファイルなのか、もっと詳しく知りたい方はこれらのファイルをご覧ください。何がなぜインストールされるのかを明確にするためのコメントもあります。
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
Install a test dbt project
メモ
dbtツール自体は、後でdocker-composeによってコンテナにインストールされます。
1.gitをインストールします:
sudo yum install git
2.ジャッフルショップの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データベース上に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";
4.dbtの設定ディレクトリを作成します:
cd
mkdir .dbt
5.profiles.ymlを.dbtディレクトリにコピーします。
6.Teradataデータベースの設定に対応するように、ファイルを編集します。最低でも、ホスト、ユーザー、パスワードは変更する必要があります。ステップ3で設定したjaffle_shopのユーザー認証情報を使用します。
DockerでAirflow環境を作成する
1.Dockerfileとdocker-compose.yamlがあるairflowディレクトリで、Docker環境作成スクリプトを実行します:
cd ~/airflow
sudo docker-compose up --build
インストールが完了すると、画面に次のようなメッセージが表示されます:
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アドレスに置き換えてください:
○ DAG UI: http://:8080/home - ユーザー名: airflow / パスワード: airflow
○ Flower Airflow UI (ワーカーコントロール): http://:5555/
エアフローDAGの実行
1.airflow_dbt_integration.py, db_test_example_dag.py, discover_dag.py, variables.json ファイルを /home/ec2-user/airflow/dags にコピーしてください。
2.ファイルを調べる:
○ db_test_example_dag.py - いくつかのテーブルを作成し、クエリを実行するシンプルなTeradataのSQLの例です。
○ airflow_dbt_integration.py - dbtのサンプル(dbtとairflowをTeradataデータベースと統合する)を実行します。この例では、架空のjaffle_shopデータモデルが作成、ロードされ、このプロジェクトのドキュメントが作成されます(ブラウザでhttp://"YOUR 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 ページに移動します。
○ Choose Fileをクリックし、ファイルエクスプローラーでvariable.jsonを選択し、Import Variablesをクリックします。
○ お使いの環境に合わせて、変数を編集してください
5.UIからダグを実行し、ログを確認する。
まとめ
このチュートリアルは、Linux サーバーに Airflow 環境をインストールする方法と、Airflow を使用して Teradata Vantage データベースと対話する方法について、実践的な演習を提供することを目的とし ています。また、Airflow とデータモデリングおよびメンテナンスツールである dbt を統合して、Teradata Vantage データベースを作成およびロードする方法についての例も提供されます。