Cassandraのはじめ方─手を動かしてNoSQLを体感しよう

第2回Cassandraのインストールから起動まで

前回はCassandraとは何かを簡単に説明しました。第2回では、Cassandraを実際にインストールして開発環境で動かしてみましょう。

Cassandraをインストールしよう

環境を確認する

まずは環境の確認をしましょう。筆者の環境は以下のようになっています。

  • Windows 7 Professional
  • Sun JDK 1.6.0_18 64bit
  • Eclipse 3.5.1

この連載ではおもにWindowsでの環境を想定しています。ただ、CassandraはJavaベースなので、MacやLinuxなど別OSでも同様に動くはずです。

Cassandraをダウンロードする

本連載では現時点での最新版Cassandraha 0.6.1を使います。以下のサイトからダウンロードできます。

The Apache Cassandra Project
URL:http://cassandra.apache.org/download/

上記ページから、apache-cassandra-0.6.1-bin.tar.gzをダウンロード・解凍してください。そして、適切なフォルダに展開してください。筆者は

C:¥cassandra¥apache-cassandra-0.6.1

に展開しました。

Cassandraのディレクトリ構造

Cassandraを展開すると以下のようなディレクトリ構造になっています。

図1 Cassandraのディレクトリ構造
図1 Cassandraのディレクトリ構造

今回は、この中のbinとconfの下をおもに見ていきます。

JAVA_HOMEを設定する

Cassandraだけに限った話ではありませんが、JAVA_HOMEを正しく設定しておいてください。筆者は以下のようになっています。

C:¥>echo %JAVA_HOME%
C:¥personal¥application¥jdk¥jdk1.6.0_18

CASSANDRA_HOMEを設定する

Cassandraを動かすためには、表1にある項目を設定する必要があります。

表1 Cassandraの基本設定項目
項目名説明デフォルト値
CASSANDRA_HOMECassandraのインストール場所現在のディレクトリ
CASSANDRA_CONFCassandraの設定ファイルの配置場所%CASSANDRA_HOME%¥conf
CASSANDRA_MAINCassandraの起動に使うコードorg.apache.cassandra.
thrift.CassandraDaemon

その他の設定項目はデフォルト値があるのでこのままでも動きます。しかし余計な間違いを避けるために、CASSANDRA_HOMEは設定しておきましょう。

Windowsでは図2のように設定します。

図2 CASSANDRA_HOMEの設定例
図12 CASSANDRA_HOMEの設定例

データとコミットログの出力先を設定する

次に、実際にCassandraを動かした際のデータとコミットログの出力先を設定します。データやコミットログを含む仕組みについては後ほどご説明します。

データとコミットログの出力先は、Cassandraの設定ファイルであるstorage-conf.xmlで設定します。なお、圧縮ファイルを展開しただけだと、すべての設定ファイルがリードオンリーになっているので、別途解除してください。

Cassandraの設定ファイルは、デフォルトでは以下に置くことになっています。

%CASSANDRA_HOME%¥conf

storage-conf.xmlにはいろいろ記述されていますが、今回修正するのは2点だけです。

具体的には

  <CommitLogDirectory>/var/lib/cassandra/commitlog</CommitLogDirectory>
  <DataFileDirectories>
      <DataFileDirectory>/var/lib/cassandra/data</DataFileDirectory>
  </DataFileDirectories>

の部分を、以下のようにします。

  <CommitLogDirectory>C:¥cassandra¥commitlog</CommitLogDirectory>
  <DataFileDirectories>
      <DataFileDirectory>C:¥cassandra¥data</DataFileDirectory>
  </DataFileDirectories>

storage-conf.xmlについては今後詳細にご説明する予定ですが、開発用に起動するだけならstorage-conf.xmlの設定はこれだけです。

システムのログ出力先を変更する

次にシステムのログ出力先を変更します。

Cassandraはlog4jを使っているので、以下を変更します。

%CASSANDRA_HOME%¥conf¥log4j.properties

変更するのはログの出力先だけなので、以下のようにしておきましょう。

# Edit the next line to point to your logs directory
log4j.appender.R.File=C:¥¥cassandra¥¥log¥¥system.log

Cassandraは全部で3つのポートを使います(表2を参照⁠⁠。

表2 Cassandraの使用するポート
項目名ポート番号
ThriftでのRPCポート9160
JMXでの接続ポート8080
複数Cassandraノードのコミュニケーションポート7000

このうち、次の2つはクライアント側とのコミュニケーションに使用します。

  • クライアントからの処理要求を受け付けるポート(9160番、表2の①)
  • Cassandraノードの内部情報を取得するために接続するJMXのポート(8080、表2の②)

どのポートも固定なわけではなく、設定や起動ファイルの修正で変更可能です。

batファイルを修正する

最後に起動batファイルを少し修正します。

Cassandraにはcassandra.batファイルが最初からついているので、これでCassandraを起動できます。しかし、CassandraのbatファイルはJMXを8080ポートで指定しているため、Tomcatなどのデフォルトポートとかぶってしまいます。そのため、これを適切なポートに変えておきます。

変更するのはcassandra.batの以下の部分です。筆者は9081にしました。

set JAVA_OPTS=^
 -ea^
 -Xdebug^
 -Xrunjdwp:transport=dt_socket,server=y,address=8888,suspend=n^
 -Xms128m^
 -Xmx1G^
 -XX:TargetSurvivorRatio=90^
 -XX:+AggressiveOpts^
 -XX:+UseParNewGC^
 -XX:+UseConcMarkSweepGC^
 -XX:+CMSParallelRemarkEnabled^
 -XX:+HeapDumpOnOutOfMemoryError^
 -XX:SurvivorRatio=128^
 -XX:MaxTenuringThreshold=0^
 -Dcom.sun.management.jmxremote.port=8080^
 -Dcom.sun.management.jmxremote.ssl=false^
 -Dcom.sun.management.jmxremote.authenticate=false

Cassandraを起動して使ってみよう

では、いよいよCassandraを起動してみます。

%CASSANDRA_HOME%¥bin¥cassandra.batをコマンドラインからたたいてみましょう。

以下のような感じの起動ログが出るはずです。

C:¥cassandra¥apache-cassandra-0.6.1>bin¥cassandra.bat
Starting Cassandra Server
Listening for transport dt_socket at address: 8888
 INFO 16:12:38,171 Auto DiskAccessMode determined to be standard
 INFO 16:12:38,625 Saved Token not found. Using 12130970972828844347523289220179262978
 INFO 16:12:38,625 Saved ClusterName not found. Using Test Cluster
 INFO 16:12:38,656 Creating new commitlog segment C:¥cassandra¥commitlog¥CommitLog-1271747558656.log
 INFO 16:12:38,812 Starting up server gossip
 INFO 16:12:39,000 Binding thrift service to localhost/127.0.0.1:9160
 INFO 16:12:39,015 Cassandra starting up...

Cassandraにはコマンドラインツールがついているので、まずはそれで稼動を確認してみましょう。以下のように%CASSANDRA_HOME%¥bin¥cassandra-cli.batを実行すると起動します。

C:¥cassandra¥apache-cassandra-0.6.1>bin¥cassandra-cli.bat
Starting Cassandra Client
Welcome to cassandra CLI.

Type 'help' or '?' for help. Type 'quit' or 'exit' to quit.
cassandra>

まずは先ほど起動したCassandraサーバに接続しなくてはいけないのでconnectコマンドを打ちます。

cassandra> connect localhost/9160
Connected to: "Test Cluster" on localhost/9160

とりあえずCassandraのデフォルトで用意されているキースペース(※1)の設定情報にアクセスしてみましょう。以下のように出てくるはずです。

cassandra> describe keyspace Keyspace1
Keyspace1.Super1
Column Family Type: Super
Columns Sorted By: org.apache.cassandra.db.marshal.BytesType@66e8c7db

Column Family Type: Super
Column Sorted By: org.apache.cassandra.db.marshal.BytesType
flush period: null minutes

(以下省略)

各キースペースに定義されたデータ構造の情報が取れます。

では簡単なデータをCassandraに入れて、取り出してみましょう。現段階では、Cassandraではデータ構造は4次元または5次元の配列構造になっていると思ってください。なので、以下の形式でデータを入れていきます。

set キースペース.カラムファミリ名[キー名][カラム名]=値

データを取り出すときは、以下の形式で値の集合が取れます。

get キースペース.カラムファミリ名[キー名]

この例では「shot」という行に対して、⁠firstname」⁠lastname」⁠twitter」というカラムに値を設定してデータを挿入し、getでカラムの集合を取り出しています。

cassandra> set Keyspace1.Standard2['shot']['firstname']='Shinpei'
Value inserted.
cassandra> set Keyspace1.Standard2['shot']['lastname']='OHTANI'
Value inserted.
cassandra> set Keyspace1.Standard2['shot']['twitter']='http://twitter.com/shot6'
Value inserted.
cassandra> get Keyspace1.Standard2['shot']
=> (column=twitter, value=http://twitter.com/shot6, timestamp=1271173345860000)
=> (column=lastname, value=OHTANI, timestamp=1271173320777000)
=> (column=firstname, value=Shinpei, timestamp=1271173297104000)
Returned 3 results.

Cassandraを終了する

最後はCassandraを終了させましょう。
CassandraをWindows上から終了するには、Cassandraが動いているコンソールでCtrl+Cを押して停止させます。

ここまででCassandraを動かすところまできました。次回はCassandraのデータモデルについてご説明します。お楽しみに。

おすすめ記事

記事・ニュース一覧