KairosDB + Cassandra起動

KairosDBインストールで起動に失敗したので、あらためて起動をこころみます。解決策ではなく、回避策で起動するようになりました。

KairosDBとバックエンドストアの連携

また、KairosDB側であまり、リソースを使わないよう設定しています。PCのローカル環境で実行するので、おそらく実務ではありえないくらいの小さな値に設定しています。conf/kairosdb.properertiesの設定をデフォルト値から以下のように変更しました。変更していない行は省略しています。

kairosdb.queue_processor.batch_size=30

# If the queue doesn't have at least this many items to process the process thread
# will pause for {min_batch_wait} milliseconds to wait for more before grabbing data from the queue.
# This is an attempt to prevent chatty inserts which can cause extra load on
# Cassandra
#kairosdb.queue_processor.min_batch_size=100
kairosdb.queue_processor.min_batch_size=20

kairosdb.datastore.cassandra.connections_per_host.local.core=5
#kairosdb.datastore.cassandra.connections_per_host.local.max=100
kairosdb.datastore.cassandra.connections_per_host.local.max=5

kairosdb.datastore.cassandra.connections_per_host.remote.core=1
#kairosdb.datastore.cassandra.connections_per_host.remote.max=10
kairosdb.datastore.cassandra.connections_per_host.remote.max=5

#kairosdb.datastore.cassandra.max_requests_per_connection.local=128
kairosdb.datastore.cassandra.max_requests_per_connection.local=3
#kairosdb.datastore.cassandra.max_requests_per_connection.remote=128
kairosdb.datastore.cassandra.max_requests_per_connection.remote=3

kairosdb.queue_processor.batch_size=30

#kairosdb.queue_processor.min_batch_size=100
kairosdb.queue_processor.min_batch_size=20

前提条件として、環境変数としてJAVA_HOMEを設定しておきます。

$ echo $JAVA_HOME
/usr/lib/jvm/java-8-openjdk-amd64/jre

私の環境のデフォルトJDKは11だったのですが、ClassNotFoundエラーが出てKairosDBが立ち上がりませんでした。こんなエラーが出ます。

[main] WARN  [AbstractLifeCycle.java:204] - FAILED org.eclipse.jetty.server.Server@60f70249: java.lang.TypeNotPresentException: Type javax.xml.bind.JAXBContext not present
java.lang.TypeNotPresentException: Type javax.xml.bind.JAXBContext not present

https://kairosdb.github.io/docs/build/html/GettingStarted.html
によればJava 8またはそれ以降のバージョンという要件があるので11でも大丈夫だと考えていたのですが、ダメでした。今後のリリースで対応するようなことが書いてあったので、今回はJava11の利用は見送ります。
https://groups.google.com/forum/?fromgroups#!topic/kairosdb-group/DlFQiVdxzVs

H2DBで起動してみある

初回のCassandraをバックエンドにした場合の起動が失敗しました。エラーを見ると、前回の起動で失敗したからといったようなことが書いてあります。よくわからないので、ためしに、デフォルトのH2データベースで起動してみました。conf/kairosdb.properertiesの設定の一部を以下のように変更します(コメントアウトの調整をしました)。

kairosdb.service.datastore=org.kairosdb.datastore.h2.H2Module
kairosdb.datastore.concurrentQueryThreads=5
#kairosdb.service.datastore=org.kairosdb.datastore.cassandra.CassandraModule

あっさりと起動しました。

$ sudo ./kairosdb.sh run
03:59:05.036 [main] INFO  [Main.java:119] - Loading plugin properties: kairosdb_guid.properties
03:59:05.282 [main] INFO  [TelnetServerModule.java:38] - Configuring module TelnetServerModule
03:59:05.507 [main] INFO  [StdSchedulerFactory.java:1175] - Using default implementation for ThreadExecutor
03:59:05.515 [main] INFO  [SchedulerSignalerImpl.java:61] - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
03:59:05.515 [main] INFO  [QuartzScheduler.java:243] - Quartz Scheduler v.2.1.7 created.
03:59:05.516 [main] INFO  [RAMJobStore.java:154] - RAMJobStore initialized.
03:59:05.516 [main] INFO  [QuartzScheduler.java:268] - Scheduler meta-data: Quartz Scheduler (v2.1.7) 'QuartzScheduler' with instanceId 'NON_CLUSTERED'
  Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
  NOT STARTED.
  Currently in standby mode.
  Number of jobs executed: 0
  Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 4 threads.
  Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.

03:59:05.517 [main] INFO  [StdSchedulerFactory.java:1324] - Quartz scheduler 'QuartzScheduler' initialized from an externally provided properties instance.
03:59:05.517 [main] INFO  [StdSchedulerFactory.java:1328] - Quartz scheduler version: 2.1.7
03:59:05.517 [main] INFO  [QuartzScheduler.java:2247] - JobFactory set to: org.kairosdb.core.scheduler.KairosDBJobFactory@1339e7aa
03:59:05.517 [main] INFO  [Main.java:549] - Starting service class org.kairosdb.core.scheduler.KairosDBSchedulerImpl
03:59:05.517 [main] INFO  [QuartzScheduler.java:534] - Scheduler QuartzScheduler_$_NON_CLUSTERED started.
03:59:05.518 [main] INFO  [KairosDBSchedulerImpl.java:68] - Starting job: org.kairosdb.core.jobs.CacheFileCleaner
03:59:05.522 [main] INFO  [H2Datastore.java:105] - Starting H2 database in ./build/h2db

(途中略)

03:59:06.050 [main] INFO  [Main.java:405] - ------------------------------------------
03:59:06.050 [main] INFO  [Main.java:406] -      KairosDB service started
03:59:06.050 [main] INFO  [Main.java:407] - ------------------------------------------

あらためてCassandra

conf/kairosdb.properertiesの設定をCassandraを使うように戻しました。

kairosdb.service.datastore=org.kairosdb.datastore.h2.H2Module
kairosdb.datastore.concurrentQueryThreads=5
#kairosdb.service.datastore=org.kairosdb.datastore.cassandra.CassandraModule

今度はあっさりと起動しました。

$ sudo ./kairosdb.sh run
04:08:45.942 [main] INFO  [Main.java:119] - Loading plugin properties: kairosdb_guid.properties
04:08:46.184 [main] INFO  [TelnetServerModule.java:38] - Configuring module TelnetServerModule
04:08:46.451 [main] INFO  [StdSchedulerFactory.java:1175] - Using default implementation for ThreadExecutor
04:08:46.460 [main] INFO  [SchedulerSignalerImpl.java:61] - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
04:08:46.460 [main] INFO  [QuartzScheduler.java:243] - Quartz Scheduler v.2.1.7 created.
04:08:46.461 [main] INFO  [RAMJobStore.java:154] - RAMJobStore initialized.
04:08:46.461 [main] INFO  [QuartzScheduler.java:268] - Scheduler meta-data: Quartz Scheduler (v2.1.7) 'QuartzScheduler' with instanceId 'NON_CLUSTERED'
  Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
  NOT STARTED.
  Currently in standby mode.
  Number of jobs executed: 0
  Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 4 threads.
  Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.

04:08:46.461 [main] INFO  [StdSchedulerFactory.java:1324] - Quartz scheduler 'QuartzScheduler' initialized from an externally provided properties instance.
04:08:46.461 [main] INFO  [StdSchedulerFactory.java:1328] - Quartz scheduler version: 2.1.7
04:08:46.461 [main] INFO  [QuartzScheduler.java:2247] - JobFactory set to: org.kairosdb.core.scheduler.KairosDBJobFactory@4f9a2c08
04:08:46.462 [main] INFO  [Main.java:549] - Starting service class org.kairosdb.core.scheduler.KairosDBSchedulerImpl
04:08:46.462 [main] INFO  [QuartzScheduler.java:534] - Scheduler QuartzScheduler_$_NON_CLUSTERED started.
04:08:46.463 [main] INFO  [KairosDBSchedulerImpl.java:68] - Starting job: org.kairosdb.core.jobs.CacheFileCleaner
04:08:46.471 [main] INFO  [GuavaCompatibility.java:132] - Detected Guava >= 19 in the classpath, using modern compatibility layer
04:08:46.473 [main] INFO  [CassandraClientImpl.java:113] - Connecting to localhost:9042

(途中略)

04:08:47.418 [main] INFO  [Main.java:405] - ------------------------------------------
04:08:47.418 [main] INFO  [Main.java:406] -      KairosDB service started
04:08:47.418 [main] INFO  [Main.java:407] - ------------------------------------------

よくわからない起動失敗の回避策になっていますが、以降は安定して起動するようになりました。気持ちわるいですね。

目的は、IoT用の時系列DBとしてのKairosDBのPoCなので、一旦このまま先に進めます。

コメント

  1. […] なんかJava系の例外がいっぱい、エラーもいっぱい。 ちゃんと動いているのだろうか、という大いなる疑問を持ちつつ、次の投稿で先に進めます。 作業としてはKairosDB + Cassandraに続きます。 […]

タイトルとURLをコピーしました