arcanum_jp’s blog

おっさんの日記

Cassandra

 うちの鯖でもDBが動いているWebアプリなり何なりを作ろうかと思い、最近はやりのNO SQL系のDBを勉強。NO SQLと言うのは、「Oh! NO!! 俺たちはもうSQLなんていらないぜ!」とドラクロア「民衆を導く自由の女神」なみに今から沢山大変だけどSQLから開放された!フリーダム!って感じや、「Oh! NO! SQL謎言語!」のNO MORE SQLの略ではなく、DBってSQLだけじゃないズラよ!のNOT ONLY SQLの頭文字をとったものらしい。で、お手軽にできそうなCassandraを勉強して使ってみたいと思います。

 Cassandraって名前は、世界最大のデータベースに対抗しているのだろうか。それはいいんだけど、なんかGroovyたんとかと同じくカッサンドラたんなんてできそうな気配。

Cassandraの起動まで。

インストール
  • 実行環境の前提
    • 1.6以上のJDKが動いていること


 ダウンロードしてきて、適当なフォルダに解凍(僕はc:\apache-cassandraに解凍)してbinフォルダにあるcassandra.batを実行すればいいです。お手軽ですね。解凍すると以下のようなディレクトリになりますが、とりあえず覚えるべきは「bin」と「conf」の中身だけです。あとはCassanda自身が使用するものだったりします。

C:\apache-cassandra
├─bin
├─conf
├─interface
├─javadoc
└─lib

  • [bin]
    • 実行するためのバッチとか、ツールとか。Windows用のBatファイルとユニックスようのシェルが1組
  • [conf]
    • 設定ファイルとか
  • [interface]
    • ThriftなどのIDL
  • [javadoc]
  • [lib]
    • Cassandraを実行するための必要なjarファイルとか
実行するための設定

 実行するには、いくつか設定する必要があります。環境設定変数のCASSANDRA_HOMEなんかは他で使わなければcassandra.batの中でも定義してやればいいのかな?

  • CASSANDRA_HOME(環境設定変数)
    • 上記で解凍した場所を指定
    • 例:c:\apache-cassandra
  • データの保存場所

...28行目付近

# directories where Cassandra should store data on disk.
data_file_directories:
- C:/apache-cassandra/data

...113行目付近

# commit log
commitlog_directory: C:/apache-cassandra/logcommitlog


※ データの保存場所を「C:\apache-cassandra\data」にしてみた
※ データのコミットログの場所を「C:\apache-cassandra\commitlog」にしてみた。

  • 起動ポートの変更
    • Cassandraの使用するポートは以下の3つ
      • 9160
        • ThriftでのRPCポート
      • 8080
        • JMXでの接続ポート
      • 7000
        • 複数Cassandraノードのコミュニケーションポート

 このうちTomcatなんかでアプリを作る場合は8080ポートがかぶるので、binディテクトリにあるCassandra.batの-Dcom.sun.management.jmxremote.portを変更。

-Dcom.sun.management.jmxremote.port=8081

Cassandraの起動

binディテクトリにあるcassandra.batを起動。以下のようなログが出力される。cassandra.yamlに設定したっぽいディレクトリが表示されたらOK。エラーがあると例外を吐いて終わります。

C:\apache-cassandra\bin>cassandra.bat <-- 起動!
Starting Cassandra Server
Listening for transport dt_socket at address: 8888
INFO 23:00:52,558 DiskAccessMode 'auto' determined to be standard, indexAccessMode is standard
INFO 23:00:52,730 Sampling index for C:\apache-cassandra\data\system\Statistics-e-1-<>
INFO 23:00:52,745 Sampling index for C:\apache-cassandra\data\system\Statistics-e-2-<>
INFO 23:00:52,808 Sampling index for C:\apache-cassandra\data\system\LocationInfo-e-5-<>
INFO 23:00:52,886 Sampling index for C:\apache-cassandra\data\system\LocationInfo-e-6-<>
INFO 23:00:52,886 Sampling index for C:\apache-cassandra\data\system\LocationInfo-e-7-<>
INFO 23:00:52,933 Couldn't detect any schema definitions in local storage.
INFO 23:00:52,933 Found table data in data directories. Consider using JMX to call org.apache.cassandra.service.Storage
Service.loadSchemaFromYaml().
INFO 23:00:52,948 Replaying C:\apache-cassandra\logcommitlog\CommitLog-1284473728494.log
INFO 23:00:52,964 Finished reading C:\apache-cassandra\logcommitlog\CommitLog-1284473728494.log
INFO 23:00:52,964 Recovery complete
INFO 23:00:52,964 Log replay complete
INFO 23:00:52,995 Cassandra version: 0.7.0-beta1
INFO 23:00:52,995 Thrift API version: 10.0.0
INFO 23:00:52,995 Saved Token found: 25258378492588628454079199952527712812
INFO 23:00:52,995 Saved ClusterName found: Test Cluster
INFO 23:00:52,995 Saved partitioner not found. Using org.apache.cassandra.dht.RandomPartitioner
INFO 23:00:53,011 Creating new commitlog segment C:/apache-cassandra/logcommitlog\CommitLog-1284559253011.log
INFO 23:00:53,011 switching in a fresh Memtable for LocationInfo at CommitLogContext(file='C:/apache-cassandra/logcommitlog\CommitLog-1284559253011.log', position=276)
INFO 23:00:53,026 Enqueuing flush of Memtable-LocationInfo@3969812(95 bytes, 2 operations)
INFO 23:00:53,026 Writing Memtable-LocationInfo@3969812(95 bytes, 2 operations)
INFO 23:00:53,167 Completed flushing C:\apache-cassandra\data\system\LocationInfo-e-8-Data.db
INFO 23:00:53,167 Compacting [org.apache.cassandra.io.sstable.SSTableReader(path='C:\apache-cassandra\data\system\LocationInfo-e-5-Data.db'),org.apache.cassandra.io.sstable.SSTableReader(path='C:\apache-cassandra\data\system\LocationInfo-e-6-Data.db'),org.apache.cassandra.io.sstable.SSTableReader(path='C:\apache-cassandra\data\system\LocationInfo-e-7-Data.db'),org.apache.cassandra.io.sstable.SSTableReader(path='C:\apache-cassandra\data\system\LocationInfo-e-8-Data.db')]
INFO 23:00:53,182 Starting up server gossip
INFO 23:00:53,401 Compacted to C:\apache-cassandra\data\system\LocationInfo-tmp-e-9-Data.db. 1,009 to 434 (~43% of original) bytes for 2 keys. Time: 219ms. <-- ココ
INFO 23:00:53,432 Binding thrift service to localhost/127.0.0.1:9160
INFO 23:00:53,432 Using TFramedTransport with a max frame size of 15728640 bytes.
INFO 23:00:53,432 Listening for thrift clients...
INFO 23:00:53,432 Will not load MX4J, mx4j-tools.jar is not in the classpath

 これで動いたズラ。