概要
Azkaban は、LinkedIn で開発されたバッチワークフロージョブスケジューラで、Hadoop やデータベースジョブの実行を管理します。Azkaban はジョブの依存関係に基づいて実行順序を制御し、使いやすい Web インターフェイスでワークフローの追跡と保守を可能にします。
Azkaban は、バックエンドデータベースとして ApsaraDB RDS for MySQL および PolarDB をサポートしています。本ソリューションでは、Azkaban を複数エグゼキュータモードでデプロイし、ApsaraDB RDS MySQL の高可用性バージョンを使用します。ECS 1 台で Azkaban Web サーバーと Azkaban エグゼキュータサーバーの両方をホストし、デモワークフロータスクを実行します。
リファレンスアーキテクチャ
手順
リソースのデプロイ
スクリプトの実行完了後、ECS、EIP、RDS PostgreSQL のインスタンス情報が表示されます。
eip_ecs:Azkaban インストールホスト用の ECS のパブリック EIPrds_mysql_url:Azkaban のバックエンド RDS MySQL データベースの接続 URLrds_pg_url_azkaban_demo_database:Azkaban で使用するデモ用 RDS PostgreSQL データベースの接続 URLrds_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.propertiesdefault.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,CpuStatus は azkaban.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.shcurl -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_target へ products テーブルと 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.job と job2_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 Flow、Execute の順にクリックしてタスクを実行します。タスクが完了すると、ワークフローページのジョブグラフが緑色に変わります。
Alibaba Cloud のエキスパートに相談する
お問い合わせ