LoginSignup
9

More than 5 years have passed since last update.

CentOS上でのAzkaban構築手順

Last updated at Posted at 2016-04-01

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

f553e9e6e60338cc95a2c0287594faeb.png

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

起動

起動順は以下の順番で起動します。

  1. MySQL
  2. Azkaban Executor Server
  3. 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でログインできます。

azkaban.png

ログイン後画面

azkaban_logined.png

注意点

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9