Cassandraのインストール

Cassandraとは

Cassandraは、米Facebookで開発されたNoSQLなデータベースシステムで、現在はApacheプロジェクトの元、オープンソースソフトウェアとして公開されています。

The Apache Cassandra Project develops a highly scalable second-generation distributed database, bringing together Dynamo's fully distributed design and Bigtable's ColumnFamily-based data model.

本エントリでは、Linux(Debian)へのインストールと基本的なデータ操作を行います。

Javaのインストール

CassandraはJavaで書かれているため、Java環境をインストールする必要があります。

$ sudo aptitude install sun-java6-jdk sun-java6-bin sun-java6-source sun-java6-fonts

環境変数"JAVA_HOME"を設定します。

$ vi ~/.bashrc
export JAVA_HOME="/usr/lib64/jvm/java-6-sun"
$ . ~/.bashrc

Cassandraのインストール

"/opt/local"以下にインストールしました。

$ wget http://ftp.riken.jp/net/apache/cassandra/0.6.1/apache-cassandra-0.6.1-bin.tar.gz
$ gzip -dc apache-cassandra-0.6.1-bin.tar.gz | tar xvf -
$ sudo mkdir -p /opt/local
$ sudo mv apache-cassandra-0.6.1 /opt/local/
$ cd /opt/local
$ sudo ln -s apache-cassandra-0.6.1 apache-cassandra

環境変数の設定およびログ・データベースディレクトリの作成を行います。

$ vi ~/.bashrc
export CASSANDRA_HOME="/opt/local/apache-cassandra"
export CASSANDRA_CONF="$CASSANDRA_HOME/conf"
$ . ~/.bashrc
$ sudo mkdir -p /var/lib/cassandra/commitlog
$ sudo mkdir -p /var/lib/cassandra/data
$ sudo mkdir -p /var/log/cassandra
$ sudo chown -R `whoami` /var/lib/cassandra
$ sudo chown -R `whoami` /var/log/cassandra

ログやデータベースディレクトリの設定は、"$CASSANDRA_CONF"以下の設定ファイルで行います。
今回は、デフォルト値を使用しました。

    • $CASSANDRA_CONF/storage-conf.xml : コミットログとデータベースディレクトリの設定
    • $CASSANDRA_CONF/log4j.properties : システムログの設定

その他、ポート番号の設定なども"storage-conf.xml"で行います。

Cassandraの起動と接続

$ cd $CASSANDRA_HOME
$ ./bin/cassandra -f
 INFO 21:24:12,418 Auto DiskAccessMode determined to be mmap
 INFO 21:24:12,668 Saved Token not found. Using 70600150308420422994252303942685177520
 INFO 21:24:12,668 Saved ClusterName not found. Using Test Cluster
 INFO 21:24:12,668 Creating new commitlog segment /var/lib/cassandra/commitlog/CommitLog-1273753452668.log
 INFO 21:24:12,718 Starting up server gossip
 INFO 21:24:12,768 Binding thrift service to localhost/127.0.0.1:9160
 INFO 21:24:12,768 Cassandra starting up...

"-f"オプションを付けるとフォアグラウンドで起動しますので、停止は"Ctrl"+"c"で行います。
pidファイルを指定したい場合は"-p"オプションで起動し、停止は"kill"コマンドで行います。

$ ./bin/cassandra -p cassandra.pid
$ kill -KILL `cat cassandra.pid`

Cassandraへの接続は、"cassandra-cli"を使用します。

$ cd $CASSANDRA_HOME
$ ./bin/cassandra-cli --host localhost --port=9160

データベース(キースペース)の一覧を取得してみます。

cassandra> show keyspaces
Keyspace1
system
cassandra> describe keyspace Keyspace1
Keyspace1.Super1
Column Family Type: Super
Columns Sorted By: org.apache.cassandra.db.marshal.BytesType@13342a67
(省略)

Cassandraのデータ操作

Cassandraは、Key-Valueなデータ構造を保持できます。
しかし、memcachedなどの従来のKey-Valueストアとは異なり、Key部分を4次元もしくは5次元の構造にすることができます。


RDBとの用語の違いは以下の通りとなります。(Cassandra <-> RDB)

    • キースペース <-> データベース (1次元)
    • カラムファミリー <-> テーブル (2次元)
    • キー <-> 主キー (3次元)
    • カラム <-> カラム (4次元)

デフォルトの設定ファイルを使用すると、キースペース"Keyspace1"やカラムファミリー"Standard1"などが作成されます。


(データの登録)

cassandra> set Keyspace1.Standard1['jitsu102']['blog'] = 'http://d.hatena.ne.jp/jitsu102/'
Value inserted.
cassandra> set Keyspace1.Standard1['jitsu102']['twitter'] = 'http://twitter.com/jitsu'
Value inserted.

(データ参照)

    • カラムを指定して参照
cassandra> get Keyspace1.Standard1['jitsu102']['blog']
=> (column=626c6f67, value=http://d.hatena.ne.jp/jitsu102/, timestamp=1273753972247000)
    • キーを指定して参照
cassandra> get Keyspace1.Standard1['jitsu102']        
=> (column=74776974746572, value=http://twitter.com/jitsu, timestamp=1273754042323000)
=> (column=626c6f67, value=http://d.hatena.ne.jp/jitsu102/, timestamp=1273753972247000)
Returned 2 results.

(データ更新)

cassandra> set Keyspace1.Standard1['jitu102']['blog'] = 'http://d.hatena.ne.jp/'         
Value inserted.
cassandra> get Keyspace1.Standard1['jitsu102']['blog']
=> (column=626c6f67, value=http://d.hatena.ne.jp/, timestamp=1273754339075000)

(データ削除)

cassandra> del Keyspace1.Standard1['jitsu102']['blog']
column removed.
cassandra> get Keyspace1.Standard1['jitsu102']        
=> (column=74776974746572, value=http://twitter.com/jitsu, timestamp=1273754042323000)
Returned 1 results.

(参考)Cassandraのディレクトリ構造とデフォルトポート番号

(ディレクトリ構造)

    • $CASSANDRA_HOME/bin : 実行シェルや管理ツール
    • $CASSANDRA_HOME/conf : 設定ファイル
    • $CASSANDRA_HOME/interface : ThriftとかのIDL
    • $CASSANDRA_HOME/javadoc : JavaDoc
    • $CASSANDRA_HOME/lib : jarファイル

(ポート番号)

    • 9160 : クライアントからの処理待受、ThriftでのRPCポート
    • 8080 : JMXの接続ポート
    • 7000 : Cassandraノード同士のコミュニケーションポート


Apache Cassandra