インストール
$ mkdir -p ~/apache/cassandra
$ cd ~/apache/cassandra/
$ wget http://www.meisei-u.ac.jp/mirror/apache/dist//cassandra/0.7.0/apache-cassandra-0.7.0-bin.tar.gz
$ tar xvzf apache-cassandra-0.7.0-bin.tar.gz
$ mv apache-cassandra-0.7.0/ 0.7.0
設定
CASSANDRA_HOME
$ vi /home/ktakeda47/.bashrc
export CASSANDRA_HOME=/home/ktakeda47/apache/cassandra/0.7.0
export CASSANDRA_CONF=$CASSANDRA_HOME/conf
export CASSANDRA_MAIN=org.apache.cassandra.thrift.CassandraDaemon
$ source ~/.bashrc
Java1.6が必要
$ java -version
java version "1.6.0_20"
各種ディレクトリの場所指定
$ cd 0.7.0/
$ vi conf/cassandra.yaml
# directories where Cassandra should store data on disk.
#data_file_directories:
# - /var/lib/cassandra/data
data_file_directories:
- /home/ktakeda47/apache/cassandra/0.7.0/data
# commit log
#commitlog_directory: /var/lib/cassandra/commitlog
commitlog_directory: /home/ktakeda47/apache/cassandra/0.7.0/commitlog
# saved caches
#saved_caches_directory: /var/lib/cassandra/saved_caches
saved_caches_directory: /home/ktakeda47/apache/cassandra/0.7.0/saved_caches
$ mkdir data
$ mkdir commitlog
$ mkdir saved_caches
log4jログファイルの出力先指定
$ vi conf/log4j-server.properties
#log4j.appender.R.File=/var/log/cassandra/system.log
log4j.appender.R.File=/home/ktakeda47/apache/cassandra/0.7.0/log/system.log
$ mkdir log
JMXのポート変更
$ vi conf/cassandra-env.sh
# Specifies the default port over which Cassandra will be available for
# JMX connections.
#JMX_PORT="8080"
JMX_PORT="9090"
起動
$ ./bin/cassandra -f
cliでアクセス
$ ./bin/cassandra-cli
Welcome to cassandra CLI.
Type 'help;' or '?' for help. Type 'quit;' or 'exit;' to quit.
[default@unknown]
[default@unknown] connect localhost/9160;
Connected to: "Test Cluster" on localhost/9160
キースペース作成
[default@unknown] create keyspace Sample1;
[default@unknown] use Sample1;
Authenticated to keyspace: Sample1
カラムファミリー作成
[default@Sample1] create column family Standard1;
[default@Sample1] create column family Super1 with COLUMN_TYPE=Super and COMPARATOR=BytesType and SUBCOMPARATOR=BytesType;
[default@Sample1] create column family utf8Order with COMPARATOR=UTF8Type;
[default@Sample1] create column family time_utf8Order with COLUMN_TYPE=Super and COMPARATOR=LongType and SUBCOMPARATOR=UTF8Type;
データモデル確認
[default@Sample1] show keyspaces;
WARNING: Could not connect to the JMX on localhost:8080, information won't be shown.
Keyspace: Sample1:
Replication Strategy: org.apache.cassandra.locator.SimpleStrategy
Replication Factor: 1
Column Families:
ColumnFamily: Standard1
Columns sorted by: org.apache.cassandra.db.marshal.BytesType
Row cache size / save period: 0.0/0
Key cache size / save period: 200000.0/3600
Memtable thresholds: 0.4359375/93/60
GC grace seconds: 864000
Compaction min/max thresholds: 4/32
Read repair chance: 1.0
ColumnFamily: Super1 (Super)
Columns sorted by: org.apache.cassandra.db.marshal.BytesType/org.apache.cassandra.db.marshal.BytesType
Row cache size / save period: 0.0/0
Key cache size / save period: 200000.0/3600
Memtable thresholds: 0.4359375/93/60
GC grace seconds: 864000
Compaction min/max thresholds: 4/32
Read repair chance: 1.0
ColumnFamily: time_utf8Order (Super)
Columns sorted by: org.apache.cassandra.db.marshal.LongType/org.apache.cassandra.db.marshal.UTF8Type
Row cache size / save period: 0.0/0
Key cache size / save period: 200000.0/3600
Memtable thresholds: 0.4359375/93/60
GC grace seconds: 864000
Compaction min/max thresholds: 4/32
Read repair chance: 1.0
ColumnFamily: utf8Order
Columns sorted by: org.apache.cassandra.db.marshal.UTF8Type
Row cache size / save period: 0.0/0
Key cache size / save period: 200000.0/3600
Memtable thresholds: 0.4359375/93/60
GC grace seconds: 864000
Compaction min/max thresholds: 4/32
Read repair chance: 1.0
なんかwarn出てますよorz
Javaからアクセス
package sample;
import java.nio.ByteBuffer;
import org.apache.cassandra.thrift.Cassandra.Client;
import org.apache.cassandra.thrift.Column;
import org.apache.cassandra.thrift.ColumnParent;
import org.apache.cassandra.thrift.ConsistencyLevel;
import org.apache.cassandra.thrift.InvalidRequestException;
import org.apache.cassandra.thrift.TimedOutException;
import org.apache.cassandra.thrift.UnavailableException;
import org.apache.cassandra.utils.ByteBufferUtil;
import org.apache.thrift.TException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TFramedTransport;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;
import org.apache.thrift.transport.TTransportException;
public class SimpleInsert {
public SimpleInsert() {
}
public static final void main(String[] args) {
TTransport tTransport = new TFramedTransport(new TSocket("localhost", 9160));
TProtocol tProtocol = new TBinaryProtocol(tTransport);
try {
tTransport.open();
} catch (TTransportException e) {
throw new RuntimeException(e);
}
Client client = new Client(tProtocol);
try {
client.set_keyspace("Sample1");
ByteBuffer key = ByteBufferUtil.bytes("sample1");
ColumnParent columnParent = new ColumnParent("Standard1")
.setSuper_column((ByteBuffer) null);
Column column = new Column(
ByteBufferUtil.bytes("hoge"),
ByteBufferUtil.bytes("sample_value"),
System.currentTimeMillis());
client.insert(key, columnParent, column, ConsistencyLevel.ONE);
tTransport.flush();
} catch (TTransportException e) {
throw new RuntimeException(e);
} catch (InvalidRequestException e) {
throw new RuntimeException(e);
} catch (UnavailableException e) {
throw new RuntimeException(e);
} catch (TimedOutException e) {
throw new RuntimeException(e);
} catch (TException e) {
throw new RuntimeException(e);
} finally {
tTransport.close();
}
}
}
確認
$ ./bin/cassandra_cli
なんか入ってる?
[default@Sample1] connect localhost/9160;
[default@Sample1] use Sample1;
[default@Sample1] get Standard1['sample1'];
=> (column=686f6765, value=73616d706c655f76616c7565, timestamp=1296460094273)Returned 1 results.
see also:
http://gihyo.jp/dev/serial/01/cassandra/0001
see also:
http://d.hatena.ne.jp/amanar/20110109/1294570753