azkaban-solo-server-3.15.0-1-g77411d7を使っていたらH2DBがぶっ壊れた
タイトルの通りです。
今まではazkaban-solo-server-3.1.0を使っていてHadoopのバージョアップのタイミングでazkaban-solo-server-3.15.0-1-g77411d7にして運用していたら下記のようなエラーメッセージがでて
http://localhost:8081/history にアクセスしても履歴がなくスケジュールも空になってました。
azkaban.executor.ExecutorManagerException: Error updating flow. at azkaban.executor.JdbcExecutorLoader.updateExecutableFlow(JdbcExecutorLoader.java:159) at azkaban.executor.JdbcExecutorLoader.updateExecutableFlow(JdbcExecutorLoader.java:126) at azkaban.execapp.FlowRunner.updateFlow(FlowRunner.java:306) at azkaban.execapp.FlowRunner.updateFlow(FlowRunner.java:300) at azkaban.execapp.FlowRunner.progressGraph(FlowRunner.java:498) at azkaban.execapp.FlowRunner.runFlow(FlowRunner.java:389) at azkaban.execapp.FlowRunner.run(FlowRunner.java:219) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: java.sql.SQLException: General error: "java.lang.IllegalStateException: Reading from nio:... ... java.sql.SQLException: The database has been closed...
そういう状況だったのでsoloをやめてwebとexecutorを両方動かしてMySQLを使うように変更しました。
なおAzkabanは現在バイナリ提供しておらずソースビルドする必要があります。
Downloads
セットアップのやり方はAzkaban 3.0 Documentationを参考にしたのですが、いつくかはまったのでメモっておきます。
ソースビルドは下記コマンドで行いました。
./gradlew distZip
MySQLをセットアップしてテーブルを作成します。ドキュメントの通りにやるとCREATE権限が足りないのでGRANT ALLした方が早いと思います。
mysql -h ... < azkaban-sql-3.15.0-1-g77411d7/create-all-sql-3.15.0-1-g77411d7.sql
ソースビルドしてもwebとexecutor用のconfがないのでsoloからコピーしたりしたけど、いくつか足りなくて下記を踏みました。
Error Installing Azkaban · Issue #838 · azkaban/azkaban · GitHub
newest code, web-server StackOverflowError · Issue #860 · azkaban/azkaban · GitHub
そんな感じです。