Apache Cassandraをインストールしてみた。
事前準備
Java >= 1.6 である必要があるので、インストールしておく。
$ chmod 755 sudo ./jdk-6u20-linux-i586-rpm.bin $ sudo ./jdk-6u20-linux-i586-rpm.bin $ java -version java version "1.6.0_20" Java(TM) SE Runtime Environment (build 1.6.0_20-b02) Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode, sharing)
インストール
公式サイトからApache-Cassandraをダウンロードする。(今回選んだのはBinaryの方)
現時点でのバージョンは、0.6.1 なので、以降はそのバージョンで話を進めます。
$ tar zxvf apache-cassandra-0.6.1-bin.tar.gz $ cd apache-cassandra-0.6.1 $ sudo mkdir -p /var/log/cassandra $ sudo chown -R `whoami` /var/log/cassandra $ sudo mkdir -p /var/lib/cassandra $ sudo chown -R `whoami` /var/lib/cassandra
/usr/local/以下に配置する。
$ sudo mv apache-cassandra-0.6.1 /usr/local/ $ cd /usr/local/ $ sudo ln -s apache-cassandra-0.6.1 cassandra
環境変数をセットする。
CASSANDRA_HOME=/usr/local/cassandra PATH=$PATH:$CASSANDRA_HOME/bin
ストレージの設定は、$CASSANDRA_HOME/conf/storage-conf.xml になるっぽいので、ざっと目を通す。コメントアウト部分を外すとこんな感じ。
<Storage> <!--======================================================================--> <!-- Basic Configuration --> <!--======================================================================--> <ClusterName>Test Cluster</ClusterName> <AutoBootstrap>false</AutoBootstrap> <Keyspaces> <Keyspace Name="Keyspace1"> <ColumnFamily Name="Standard1" CompareWith="BytesType"/> <ColumnFamily Name="Standard2" CompareWith="UTF8Type" KeysCached="100%"/> <ColumnFamily Name="StandardByUUID1" CompareWith="TimeUUIDType" /> <ColumnFamily Name="Super1" ColumnType="Super" CompareWith="BytesType" CompareSubcolumnsWith="BytesType" /> <ColumnFamily Name="Super2" ColumnType="Super" CompareWith="UTF8Type" CompareSubcolumnsWith="UTF8Type" RowsCached="10000" KeysCached="50%" Comment="A column family with supercolumns, whose column and subcolumn names are UTF8 strings"/> <ReplicaPlacementStrategy>org.apache.cassandra.locator.RackUnawareStrategy</ReplicaPlacementStrategy> <ReplicationFactor>1</ReplicationFactor> <EndPointSnitch>org.apache.cassandra.locator.EndPointSnitch</EndPointSnitch> </Keyspace> </Keyspaces> <Authenticator>org.apache.cassandra.auth.AllowAllAuthenticator</Authenticator> <Partitioner>org.apache.cassandra.dht.RandomPartitioner</Partitioner> <InitialToken></InitialToken> <CommitLogDirectory>/var/lib/cassandra/commitlog</CommitLogDirectory> <DataFileDirectories> <DataFileDirectory>/var/lib/cassandra/data</DataFileDirectory> </DataFileDirectories> <Seeds> <Seed>127.0.0.1</Seed> </Seeds> <RpcTimeoutInMillis>10000</RpcTimeoutInMillis> <CommitLogRotationThresholdInMB>128</CommitLogRotationThresholdInMB> <ListenAddress>localhost</ListenAddress> <StoragePort>7000</StoragePort> <ThriftAddress>localhost</ThriftAddress> <ThriftPort>9160</ThriftPort> <ThriftFramedTransport>false</ThriftFramedTransport> <!--======================================================================--> <!-- Memory, Disk, and Performance --> <!--======================================================================--> <DiskAccessMode>auto</DiskAccessMode> <RowWarningThresholdInMB>512</RowWarningThresholdInMB> <SlicedBufferSizeInKB>64</SlicedBufferSizeInKB> <FlushDataBufferSizeInMB>32</FlushDataBufferSizeInMB> <FlushIndexBufferSizeInMB>8</FlushIndexBufferSizeInMB> <ColumnIndexSizeInKB>64</ColumnIndexSizeInKB> <MemtableThroughputInMB>64</MemtableThroughputInMB> <BinaryMemtableThroughputInMB>256</BinaryMemtableThroughputInMB> <MemtableOperationsInMillions>0.3</MemtableOperationsInMillions> <MemtableFlushAfterMinutes>60</MemtableFlushAfterMinutes> <ConcurrentReads>8</ConcurrentReads> <ConcurrentWrites>32</ConcurrentWrites> <CommitLogSync>periodic</CommitLogSync> <CommitLogSyncPeriodInMS>10000</CommitLogSyncPeriodInMS> <GCGraceSeconds>864000</GCGraceSeconds> </Storage>
とりあえず起動してみる。
$ cassandra -f INFO 16:35:42,332 Auto DiskAccessMode determined to be standard INFO 16:35:43,246 Sampling index for /var/lib/cassandra/data/system/LocationInfo-1-Data.db INFO 16:35:43,285 Replaying /var/lib/cassandra/commitlog/CommitLog-1274767896157.log INFO 16:35:43,290 Log replay complete INFO 16:35:43,473 Saved Token found: 159732309793964689006434948302307938157 INFO 16:35:43,477 Saved ClusterName found: Test Cluster INFO 16:35:43,487 Creating new commitlog segment /var/lib/cassandra/commitlog/CommitLog-1274772943487.log INFO 16:35:43,536 Starting up server gossip INFO 16:35:43,717 Binding thrift service to localhost/127.0.0.1:9160 INFO 16:35:43,856 Cassandra starting up...
無事に起動したっぽい。ログが /var/log/cassandra/system.log に出力されていることを確認する。
$ cat /var/log/cassandra/system.log INFO [main] 2010-05-25 16:35:42,332 DatabaseDescriptor.java (line 229) Auto DiskAccessMode determined to be standard INFO [main] 2010-05-25 16:35:43,246 SSTableReader.java (line 124) Sampling index for /var/lib/cassandra/data/system/LocationInfo-1-Data.db INFO [main] 2010-05-25 16:35:43,285 CommitLog.java (line 166) Replaying /var/lib/cassandra/commitlog/CommitLog-1274767896157.log INFO [main] 2010-05-25 16:35:43,290 CommitLog.java (line 169) Log replay complete INFO [main] 2010-05-25 16:35:43,473 SystemTable.java (line 164) Saved Token found: 159732309793964689006434948302307938157 INFO [main] 2010-05-25 16:35:43,477 SystemTable.java (line 179) Saved ClusterName found: Test Cluster INFO [main] 2010-05-25 16:35:43,487 CommitLogSegment.java (line 50) Creating new commitlog segment /var/lib/cassandra/commitlog/CommitLog-1274772943487.log INFO [main] 2010-05-25 16:35:43,536 StorageService.java (line 317) Starting up server gossip INFO [main] 2010-05-25 16:35:43,717 CassandraDaemon.java (line 108) Binding thrift service to localhost/127.0.0.1:9160 INFO [main] 2010-05-25 16:35:43,856 CassandraDaemon.java (line 148) Cassandra starting up...
起動した状態だと、commitlogとdataという2つのディレクトリが作成される。(storage-conf.xml の設定通り)
$ tree /var/lib/cassandra/ /var/lib/cassandra/ |-- commitlog | `-- CommitLog-1274767896157.log `-- data |-- Keyspace1 `-- system 4 directories, 1 file
ターミナル上から接続してみる。
$ cassandra-cli --host localhost --port 9160 Connected to: "Test Cluster" on localhost/9160 Welcome to cassandra CLI. Type 'help' or '?' for help. Type 'quit' or 'exit' to quit. cassandra>
データを投入し、データ内容を確認してみる。
cassandra> set Keyspace1.Standard2['miyazakiaoi']['first'] = 'Aoi' Value inserted. cassandra> set Keyspace1.Standard2['miyazakiaoi']['last'] = 'Miyazaki' Value inserted. cassandra> set Keyspace1.Standard2['miyazakiaoi']['age'] = '24' Value inserted. cassandra> get Keyspace1.Standard2['miyazakiaoi'] => (column=last, value=Miyazaki, timestamp=1274774842755000) => (column=first, value=Aoi, timestamp=1274774820478000) => (column=age, value=24, timestamp=1274774879282000) Returned 3 results.
README.txtで書かれている内容そのままだけど、データの登録、確認は、こんな感じらしい。