【Java】JavaからCassandraへ繋いでみる


Cassandraとは?

The Apache Cassandra database is the right choice when you need scalability and high availability without compromising performance. Linear scalability and proven fault-tolerance on commodity hardware or cloud infrastructure make it the perfect platform for mission-critical data.Cassandra’s support for replicating across multiple datacenters is best-in-class, providing lower latency for your users and the peace of mind of knowing that you can survive regional outages.

出典:http://cassandra.apache.org/

ビッグデータの解析などを行う際に最適なDBがこのCassandraちゃんです。ロゴがキモいのと、日本ではまだあまり使われていないのか日本語ドキュメントがまじで皆無なのが難点ですが、使いこなせば爆速で大量のデータを扱えるようになるので大AI時代の波にいち早くのることができます。

今日はJavaのサーブレットからCassandraちゃんにアクセスするまでに折れまくった心の話をします。


jarが足りない
最初は「cassandra-driver-core-3.1.2.jar」だけ入れて動かそうとしたのですが…。

Exception in thread “main” java.lang.NoClassDefFoundError: io/netty/util/Timer

どうやらいろいろjarが足りていなかったようです・・・。なぜこうなった・・・。

netty-3.9.0.Final.jar
guava-16.0.1.jar
metrics-core-3.0.0.jar
slf4j-api-1.7.5.jar

愉快な仲間達を追加してあげました!
すると今度はバージョン依存でnettyが使えない・・・。

netty-all-4.1.6.Final.jar

こっちに置き換えてあげたところ無事にエラーは解消しました。


Cassandraに繋がらない
Caused by: com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: /任意のIP:任意のport (com.datastax.driver.core.exceptions.TransportException: [/任意のIP:任意のport] Cannot connect))

もうね!

「ぶっ○すぞ!」

って叫びましたよ。笑
一瞬Cassandraが起動していないのかなとか思ったのですがまあそんなこともなく。

Cassandra.yamlちゃんと格闘しました。

start_native_transport: true
rpc_address: 0.0.0.0
prc_port: 9160
native_transport_port: 9042
listen_address: vpsのIPアドレス

で上手く行きました。

ただなんかよくわからないけれどもライブラリのバグがなんとか言われる・・・。

Unexpected error: An unexpected protocol error occurred on host hoge/IP:PORT. This is a bug in this library, please report: Unknown code 10 for a consistency level
com.datastax.driver.core.exceptions.ProtocolError: An unexpected protocol error occurred on host hoge/IP:PORT. This is a bug in this library, please report: Unknown code 10 for a consistency level

「ぶっ○すぞ!」

Javaから投げるときはこんな感じにしてあげると解消します。

Cluster cluster = Cluster
	.builder()
	.addContactPoint(vpsのIPアドレス)
	.withPort(9042)
	.withQueryOptions(
		new QueryOptions()
		.setConsistencyLevel(ConsistencyLevel.ONE))
		.build();
Session session = cluster.connect();

まとめ
とりあえずこれで開発環境(自身のPC)からCassandraに繋いでバンバン開発できるようになりましt…

Caused by: com.datastax.driver.core.exceptions.InvalidQueryException: Keyspace hoge does not exist

う”ぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁ


最後まで読んでいただきありがとうございます。もしこの記事を気に入って頂けたようであればシェアをお願い致します。非常に励みになります。


コメントを残す