CentOS上で動かすことを目標に設定を行います。
Azukaban 3.0系の構築を行います。
solo構成ではなく、Azkaban Executor ServerとAzkaban Web Serverの構成で構築います。
Azkaban Executor Serverを構築するサーバは、3G以上メモリがあるサーバを使用する必要があります。

Azkaban Web ServerはWeb UIを提供するサーバです。Jobの登録やスケジュール登録ができます。
Azkaban Executor Serverが、実際にジョブを実行するサーバです。
基本設定
最新版のバイナリは提供されていないため、ソースコードをビルドする必要が有ります。
JDKのインストール
OpenJDKのインストールのインストールを実施します。
sudo yum groupinstall -y "Development Tools"
sudo yum install -y java-1.7.0-openjdk.x86_64 java-1.7.0-openjdk-devel.x86_64 git-core mysql-connector-java
ビルド
gradlewを使って、ソースコードをbuildします。
git clone https://github.com/azkaban/azkaban.git
cd azkaban
./gradlew distZip
MySQLをインストール
適当なサーバにデータストアとしてMySQLを構築します。
Azkaban Web ServerやAzkaban Executor Serverと同一のサーバに構築しなければいけないということはありません。
インストール
MySQLをインストールします。
yum install -y mysql-server
設定
MySQLにAzukabanユーザの作成します。
/etc/init.d/mysqld start
mysql -uroot -p
mysql> CREATE DATABASE azkaban;
mysql> CREATE USER 'azkaban'@'%' IDENTIFIED BY 'azkaban';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON azkaban.* to 'azkaban'@'%' WITH GRANT OPTION;
azukabanのスクリプトを利用して必要なテーブル等の作成します。
$ cd azkaban/build/distributions/
$ zunip azkaban-sql-3.0.0.zip
$ cd azkaban-sql-3.0.0
$ mysql -uroot -p -Dazkaban < create-all-sql-3.0.0.sql
テーブルができてることの確認します。
$ mysql -uroot -p
mysql> use azkaban
mysql> show tables;
+------------------------+
| Tables_in_azkaban |
+------------------------+
| active_executing_flows |
| active_sla |
| execution_flows |
| execution_jobs |
| execution_logs |
| executor_events |
| executors |
| project_events |
| project_files |
| project_flows |
| project_permissions |
| project_properties |
| project_versions |
| projects |
| properties |
| schedules |
| triggers |
+------------------------+
17 rows in set (0.00 sec)
これだけだと、Webサーバ起動時にエラーが発生するため以下のSQLも実行します。
mysql -uroot -p -Dazkaban < update.active_executing_flows.3.0.sql
mysql -uroot -p -Dazkaban < update.execution_flows.3.0.sql
この2つのSQLを実行しないことで発生するエラーは、以下のとおりです。
Exception in thread "main" azkaban.executor.ExecutorManagerException: Error fetching active flows
at azkaban.executor.JdbcExecutorLoader.fetchActiveFlows(JdbcExecutorLoader.java:216)
at azkaban.executor.ExecutorManager.loadRunningFlows(ExecutorManager.java:431)
at azkaban.executor.ExecutorManager.<init>(ExecutorManager.java:126)
at azkaban.webapp.AzkabanWebServer.loadExecutorManager(AzkabanWebServer.java:261)
at azkaban.webapp.AzkabanWebServer.<init>(AzkabanWebServer.java:197)
at azkaban.webapp.AzkabanWebServer.main(AzkabanWebServer.java:739)
Caused by: java.sql.SQLException: Unknown column 'ex.executor_id' in 'on clause' Query: SELECT ex.exec_id exec_id, ex.enc_type enc_type, ex.flow_data flow_data, et.host host, et.port port, ax.update_time axUpdateTime, et.id executorId, et.active executorStatus FROM execution_flows ex INNER JOIN active_executing_flows ax ON ex.exec_id = ax.exec_id INNER JOIN executors et ON ex.executor_id = et.id Parameters: []
at org.apache.commons.dbutils.AbstractQueryRunner.rethrow(AbstractQueryRunner.java:363)
at org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:350)
at org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:306)
at azkaban.executor.JdbcExecutorLoader.fetchActiveFlows(JdbcExecutorLoader.java:212)
... 5 more
Azkaban Web Serverの構築
ビルドしたファイルを持ってきて解凍します。
$ unzip azkaban-web-server-3.0.0.zip
$ cd azkaban-web-server-3.0.0
設定ファイルを変更します。
MySQLの設定、jettyのポート及びHTTPの接続許可、Azkaban Executor Serverの設定を行っています。
設定はドキュメントに記載のないものあるので、ソースコードを見た方が良いこともあります。
$ vim conf/azkaban.properties
$ diff conf/azkaban.properties ../../../azkaban-webserver/src/package/conf/azkaban.properties
7c7
< default.timezone.id=Asia/Tokyo
---
> default.timezone.id=America/Los_Angeles
19c19
< mysql.host=mysql-server
---
> mysql.host=localhost
31,32c31
< jetty.port=8080
< jetty.use.ssl=false
---
> jetty.port=8081
41d39
< executor.host=azkaban-executor1
Azkaban Executor Serverの構築
ビルドしたファイルを持ってきて解凍します。
$ unzip azkaban-exec-server-3.0.0.zip
$ cd azkaban-exec-server-3.0.0
設定ファイルを変更します。
$ vim conf/azkaban.properties
$ diff conf/azkaban.properties ../../../azkaban-execserver/src/package/conf/azkaban.properties
2c2
< default.timezone.id=Asia/Tokyo
---
> default.timezone.id=America/Los_Angeles
13,14c13,14
< mysql.host=mysql-server
< mysql.database=azkaban
---
> mysql.host=localhost
> mysql.database=azkaban2
30c30
< #executor.metric.milisecinterval.default=60000
---
> #executor.metric.milisecinterval.default=60000
\ ファイル末尾に改行がありません
接続確認用にMySQLを入れて確認します。
$ sudo yum install -y mysql
$ mysql -u azkaban -h mysql-server -p
起動
起動順は以下の順番で起動します。
- MySQL
- Azkaban Executor Server
- Azkaban Web Server
起動時に利用するスクリプトがそれぞれのbinディレクトリ下に含まれているため、そのスクリプトを利用して起動します。
# Azkaban Executor Serverの起動
$ sudo ./bin/azkaban-executor-start.sh
# Azkaban Web Server
$ sudo ./bin/azkaban-web-start.sh
ログイン
Webブラウザでアクセスすると、ログイン画面が確認できます。
ログイン可能なユーザは、conf/azkaban-users.xmlに書かれています。
デフォルトではazkaban/azkabanでログインできます。

ログイン後画面

注意点
Executor Serverのメモリが少ない(3145728 kb以下)と、以下のようなログが出力されジョブが実行できないです。
なお、メモリのサイズは/proc/meminfoでチェックしています。
2016/04/01 08:48:09.271 +0000 INFO [command] [Azkaban] Submitting job 'command' to run.
2016/04/01 08:48:09.285 +0000 DEBUG [JmxJobMBeanManager] [Azkaban] *** got JOB_STARTED command azkaban.execapp.JobRunner status: QUEUED
2016/04/01 08:48:09.285 +0000 DEBUG [JmxJobMBeanManager] [Azkaban] *** got JOB_STARTED command azkaban.execapp.JobRunner status: QUEUED
2016/04/01 08:48:09.369 +0000 DEBUG [JmxJobMBeanManager] [Azkaban] *** got JOB_STATUS_CHANGED command azkaban.execapp.JobRunner status: RUNNING
2016/04/01 08:48:09.369 +0000 DEBUG [JmxJobMBeanManager] [Azkaban] *** got JOB_STATUS_CHANGED command azkaban.execapp.JobRunner status: RUNNING
2016/04/01 08:48:09.388 +0000 INFO [SystemMemoryInfo] [Azkaban] Free memory amount (1549400 kb) is less than low mem threshold (3145728 kb), memory request declined.
2016/04/01 08:48:09.390 +0000 DEBUG [JmxJobMBeanManager] [Azkaban] *** got JOB_FINISHED command azkaban.execapp.JobRunner status: FAILED
2016/04/01 08:48:09.390 +0000 DEBUG [JmxJobMBeanManager] [Azkaban] *** got JOB_FINISHED command azkaban.execapp.JobRunner status: FAILED
2016/04/01 08:48:09.391 +0000 INFO [command] [Azkaban] Job command finished with status FAILED in 0 seconds
2016/04/01 08:48:09.391 +0000 INFO [command] [Azkaban] Setting command to FAILED_FINISHING
2016/04/01 08:48:09.392 +0000 INFO [command] [Azkaban] Setting flow '' status to FAILED in 0 seconds
2016/04/01 08:48:09.413 +0000 INFO [command] [Azkaban] Finishing up flow. Awaiting Termination
2016/04/01 08:48:09.423 +0000 INFO [command] [Azkaban] No attachment file for job command written.
2016/04/01 08:48:09.429 +0000 INFO [command] [Azkaban] Finished Flow