アーキテクチャセンター
Deploy and Run Azkaban on Alibaba Cloud

Alibaba Cloud で Azkaban をデプロイして実行

概要
Azkaban は、LinkedIn で開発されたバッチワークフロージョブスケジューラで、Hadoop やデータベースジョブの実行を管理します。Azkaban はジョブの依存関係に基づいて実行順序を制御し、使いやすい Web インターフェイスでワークフローの追跡と保守を可能にします。
Azkaban は、バックエンドデータベースとして ApsaraDB RDS for MySQL および PolarDB をサポートしています。本ソリューションでは、Azkaban を複数エグゼキュータモードでデプロイし、ApsaraDB RDS MySQL の高可用性バージョンを使用します。ECS 1 台で Azkaban Web サーバーと Azkaban エグゼキュータサーバーの両方をホストし、デモワークフロータスクを実行します。
リファレンスアーキテクチャ
手順
リソースのデプロイ
Terraform でこの main.tf ファイルを使用して、このソリューションから ECSEIPRDS MySQL の各インスタンスをプロビジョニングします。
スクリプトの実行完了後、ECS、EIP、RDS PostgreSQL のインスタンス情報が表示されます。

eip_ecs:Azkaban インストールホスト用の ECS のパブリック EIP
rds_mysql_url:Azkaban のバックエンド RDS MySQL データベースの接続 URL
rds_pg_url_azkaban_demo_database:Azkaban で使用するデモ用 RDS PostgreSQL データベースの接続 URL
rds_pg_port_azkaban_demo_database:Azkaban で使用するデモ用 RDS PostgreSQL データベースの接続ポート。RDS PostgreSQL のデフォルトポートは 1921 です。
ECS と RDS MySQL で Azkaban をセットアップ
1. デフォルトパスワード N1cetest で SSH 経由で ECS にログインします。
ssh root@ECP_EIP
2. 次のコマンドを実行して、GCC、JDK 8、Git、MySQL クライアント、Python 3、Python モジュール psycopg2、PostgreSQL クライアントを ECS にインストールします。
yum install -y gcc-c++*
yum install -y java-1.8.0-openjdk-devel.x86_64
yum install -y git
yum install -y mysql.x86_64

yum install -y python39
yum install -y postgresql-devel
pip3 install psycopg2

cd ~
wget http://mirror.centos.org/centos/8/AppStream/x86_64/os/Packages/compat-openssl10-1.0.2o-3.el8.x86_64.rpm
rpm -i compat-openssl10-1.0.2o-3.el8.x86_64.rpm
wget http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/181125/cn_zh/1598426198114/adbpg_client_package.el7.x86_64.tar.gz
. tar -xzvf adbpg_client_package.el7.x86_64.tar.gz
3. 次のコマンドを実行して、Azkaban プロジェクトをダウンロードし、ビルドします。
cd ~
git clone https://github.com/azkaban/azkaban.git
cd ~/azkaban
./gradlew clean
./gradlew build installDist -x test
4. 次のコマンドを実行して、azkaban-db モジュールをビルドします。
cd ~/azkaban/azkaban-db; ../gradlew build installDist -x test
5. 次のコマンドを実行して、RDS MySQL に Azkaban に必要なすべてのテーブルを作成します。rds_mysql_url をプロビジョニング済みの RDS MySQL 接続文字列に置き換えてください。
cd ~/azkaban/azkaban-db/build/distributions
unzip azkaban-db-*.zip
mysql -h rds_mysql_url -P3306 -uazkaban -pN1cetest azkaban < ~/azkaban/azkaban-db/build/distributions/azkaban-db-*/create-all-sql-*.sql
6. RDS MySQL に再度接続し、show tables を実行して Azkaban 用に作成されたテーブルを確認します。
mysql -hrm-3nssusij8bbe3a9c3.mysql.rds.aliyuncs.com -P3306 -uazkaban -pN1cetest azkaban
7. 次のコマンドを実行して、Azkaban Executor Server である azkaban-exec-server モジュールをビルドします。
cd ~/azkaban/azkaban-exec-server; ../gradlew build installDist -x test
8. azkaban.properties ファイルを編集して、エグゼキュータサーバーのプロパティを適宜設定します。
vim ~/azkaban/azkaban-exec-server/build/install/azkaban-exec-server/conf/azkaban.properties

default.timezone.id プロパティの詳細は、https://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html を参照してください。たとえば、中国に所在する場合はタイムゾーンを Asia/Shanghai に設定します。
9. 次のコマンドを実行して、Azkaban Web サーバーのモジュール azkaban-web-server をビルドします。
cd ~/azkaban/azkaban-web-server; ../gradlew build installDist -x test
10. azkaban.properties ファイルを編集して、Web サーバーのプロパティを適宜修正します。
vim ~/azkaban/azkaban-web-server/build/install/azkaban-web-server/conf/azkaban.properties

注:azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatusazkaban.executorselector.filters=StaticRemainingFlowSize,CpuStatus に置き換えて、パラメーター MinimumFreeMemory を削除する必要があります。Web サーバーは、エグゼキュータホストの空きメモリが 6 GB 以上かどうかを確認します。6 GB 未満の場合、Web サーバーはそのエグゼキュータホストにタスクを割り当てません。本ソリューションではメモリが少ない(6 GB 未満)エントリーレベルの ECS を使用するため、このパラメーターを削除してタスクを実行できるようにする必要があります。
11. Azkaban Web サーバーのユーザーアカウントを設定します。ユーザー名 azkaban、パスワード azkaban で Azkaban Web コンソールにログインします。
vim ~/azkaban/azkaban-web-server/build/install/azkaban-web-server/conf/azkaban-users.xml
12. 次のコマンドを実行して、Azkaban エグゼキュータサーバーを起動します。
cd ~/azkaban/azkaban-exec-server/build/install/azkaban-exec-server ./bin/start-exec.sh
curl -G "localhost:$(<./executor.port)/executor?action=activate" && echo
13. 次のコマンドを実行して、Azkaban Web サーバーを起動します。
cd ~/azkaban/azkaban-web-server/build/install/azkaban-web-server ./bin/start-web.sh
14. マルチエグゼキュータ構成の Azkaban インスタンスが準備完了です。http://ECS_EIP:8081 にアクセスし、ユーザー名 azkaban、パスワード azkaban で Azkaban Web コンソールにログインします。
デモワークフロープロジェクトパッケージのダウンロードと準備
1. 次のコマンドを実行して、デモプロジェクトのパッケージを取得します。
git clone https://github.com/alibabacloud-howto/opensource_with_apsaradb.git
cd opensource_with_apsaradb/azkaban/project-demo
ls -l


_1_prepare_source_db.py: RDS PostgreSQL 上のソースデモデータベース
northwind_source にテーブルとデータを用意する Python スクリプト
_2_prepare_target_db.py: RDS PostgreSQL 上のターゲットデモデータベース northwind_target にテーブルとデータを用意する Python スクリプト
_3_data_migration.py: ソースデータベース
northwind_source からターゲットデータベース northwind_targetproducts テーブルと orders テーブルのデータを移行する Python スクリプト
job1_prepare_source_db.job: _1_prepare_source_db.py を呼び出す Azkaban ジョブ
job2_prepare_target_db.job: _2_prepare_target_db.py を呼び出す Azkaban ジョブ
job3_data_migration.job: _3_data_migration.py を呼び出す Azkaban ジョブ。job1_prepare_source_db.jobjob2_prepare_target_db.job を事前に実行する必要があります
northwind_data_source.sql: ソースデモデータベース northwind_source にデータを挿入する DML
northwind_data_target.sql: ターゲットデモデータベース northwind_target にデータを挿入する DML
northwind_ddl.sql: ソースデモデータベース northwind_source とターゲットデモデータベース northwind_target の両方にテーブルを作成する DDL
2. Azkaban プロジェクトファイルを編集してターゲット RDS PostgreSQL デモデータベースに接続するように設定し、次のコマンドを実行してすべてのプロジェクトファイルを zip パッケージに圧縮します。
zip -q -r project_demo_northwind.zip *
デモ Azkaban ワークフロータスクのデプロイと実行
1. http://ECS_EIP:8081 にアクセスし、ユーザー名 azkaban、パスワード azkaban で Azkaban Web コンソールにログインします。
2. Azkaban プロジェクトを作成します。
3. 事前にパッケージ化したプロジェクト zip ファイルをアップロードします。
4. ジョブエントリをクリックしてワークフローページに移動し、Schedule / Execute FlowExecute の順にクリックしてタスクを実行します。タスクが完了すると、ワークフローページのジョブグラフが緑色に変わります。

Alibaba Cloud のエキスパートに相談する

お問い合わせ
phone お問い合わせ
Hi, I'm Alibaba Cloud AI Assistant!
I can help with questions and solutions.