Cassandra起動
以下のコマンドで、Cassandraを起動します。起動時にエラーが発生すれば停止した状態になります。プロセスに残っていれば起動が成功です。パラメータの-pは、プロセスとして起動する指定です。
[root@localhost bin]#cd /usr/local/cassandra/dsc-cassandra-1.2.11/bin [root@localhost bin]#./cassandra -p
起動したプロセスを確認します。プロセスID26349で稼働中です。
[root@localhost bin]# ps auwx|grep cassandra root 26349 7.4 6.4 2066344 251752 pts/0 Sl 16:53 0:05 /usr/java/jre1.7.0_45/bin/java -ea -javaagent:./../lib/jamm-0.2.5.jar -XX:+UseThreadPriorities -XX:ThreadPriorityPolicy=42 -Xms1G -Xmx1G -Xmn500M -XX:+HeapDumpOnOutOfMemoryError -Xss288k -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=1 -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseTLAB -XX:+UseCondCardMark -Djava.net.preferIPv4Stack=true -Dcom.sun.management.jmxremote.port=7199 : :
nodetoolコマンドで、ノードの状態を確認できます。StatusがUpになっていれば、ノード正常に稼働しています。
[root@localhost bin]# ./nodetool -h localhost ring Note: Ownership information does not include topology; for complete information, specify a keyspace Datacenter: datacenter1 ========== Address Rack Status State Load Owns Token 127.0.0.1 rack1 Up Normal 38.05 KB 100.00% 6450387316871144019
Cassandraの停止は、乱暴ですが該当プロセスをkillします。
[root@localhost bin]# kill 26349
ここまでで、シングルノードの起動が完了しました。
データ操作(CQL)
起動してCassandraでCQLを使用して操作します。作成するテーブルは、次のような構成です。
KEYSPACE | ks1 | |
---|---|---|
TABLE | namelist1 | |
COLUMN | name | text |
addr | text | |
key1 | text | |
PRIMARY KEY | key1 |
インストールしたCassandraを起動した状態にします。まずはCQLのコマンドラインを起動して、試しにhelpを表示します。
[root@localhost bin]# ./cqlsh Connected to Test Cluster at localhost:9160. [cqlsh 3.1.7 | Cassandra 1.2.11 | CQL spec 3.0.0 | Thrift protocol 19.36.1] Use HELP for help. cqlsh> help Documented shell commands: =========================== ASSUME CONSISTENCY DESC EXIT HELP SOURCE CAPTURE COPY DESCRIBE EXPAND SHOW TRACING CQL help topics: ================ ALTER CREATE_TABLE_OPTIONS SELECT ALTER_ADD CREATE_TABLE_TYPES SELECT_COLUMNFAMILY ALTER_ALTER CREATE_USER SELECT_EXPR ALTER_DROP DELETE SELECT_LIMIT ALTER_RENAME DELETE_COLUMNS SELECT_TABLE ALTER_USER DELETE_USING SELECT_WHERE ALTER_WITH DELETE_WHERE TEXT_OUTPUT APPLY DROP TIMESTAMP_INPUT ASCII_OUTPUT DROP_COLUMNFAMILY TIMESTAMP_OUTPUT BEGIN DROP_INDEX TRUNCATE BLOB_INPUT DROP_KEYSPACE TYPES BOOLEAN_INPUT DROP_TABLE UPDATE COMPOUND_PRIMARY_KEYS DROP_USER UPDATE_COUNTERS CREATE GRANT UPDATE_SET CREATE_COLUMNFAMILY INSERT UPDATE_USING CREATE_COLUMNFAMILY_OPTIONS LIST UPDATE_WHERE CREATE_COLUMNFAMILY_TYPES LIST_PERMISSIONS USE CREATE_INDEX LIST_USERS UUID_INPUT CREATE_KEYSPACE PERMISSIONS CREATE_TABLE REVOKE
それでは、CQLを使用してTableの作成とデータの入出力をしてみます。KEYSPACEを作成して、存在を確認します。
cqlsh> CREATE KEYSPACE ks1 WITH REPLICATION = {'class' : 'SimpleStrategy', 'replication_factor': 1}; cqlsh> select * from system.schema_keyspaces; keyspace_name | durable_writes | strategy_class | strategy_options ---------------+----------------+---------------------------------------------+---------------------------- ks1 | True | org.apache.cassandra.locator.SimpleStrategy | {"replication_factor":"1"} system | True | org.apache.cassandra.locator.LocalStrategy | {} system_traces | True | org.apache.cassandra.locator.SimpleStrategy | {"replication_factor":"2"}
Tableを作成して、データを入力します。CQLはSQLとほぼ同じ構文です。2バイト文字も使用できます。
cqlsh> use ks1; cqlsh:ks1> CREATE TABLE namelist1 (name text, addr text, key1 text,PRIMARY KEY (key1));
INSERT INTOステートメントでデータを入力します。
cqlsh:ks1> INSERT INTO namelist1 (name,addr,key1) values ('Satou','Tokyo','000'); cqlsh:ks1> INSERT INTO namelist1 (name,addr,key1) values ('Tanaka','Osaka','001'); cqlsh:ks1> INSERT INTO namelist1 (name,addr,key1) values ('Watanabe','Nagoya','002'); cqlsh:ks1> INSERT INTO namelist1 (name,addr,key1) values ('佐藤','札幌','010'); cqlsh:ks1> INSERT INTO namelist1 (name,addr,key1) values ('たかはし','さいたま','011'); cqlsh:ks1> INSERT INTO namelist1 (name,addr,key1) values ('ヨシダ','ハカタ','012');
SELECTストーメントで、Tableの内容を確認します。
cqlsh:ks1> SELECT * FROM namelist1; key1 | addr | name ------+----------+---------- 000 | Tokyo | Satou 011 | さいたま | たかはし 012 | ハカタ | ヨシダ 010 | 札幌 | 佐藤 002 | Nagoya | Watanabe 001 | Osaka | Tanaka
SELECTストーメントでWHERE句を使用して検索を行います。
cqlsh:ks1> SELECT * FROM namelist1 WHERE key1='001'; key1 | addr | name ------+-------+-------- 001 | Osaka | Tanaka
UPDATEステートメントでデータを更新します。
cqlsh:ks1> UPDATE namelist1 SET addr = '埼玉' WHERE key1='011'; cqlsh:ks1> SELECT * FROM namelist1; key1 | addr | name ------+--------+---------- 000 | Tokyo | Satou 011 | 埼玉 | たかはし 012 | ハカタ | ヨシダ 010 | 札幌 | 佐藤 002 | Nagoya | Watanabe 001 | Osaka | Tanaka
DELETEステートメントでデータを削除します。
cqlsh:ks1> DELETE FROM namelist1 WHERE key1='012'; cqlsh:ks1> SELECT * FROM namelist1; key1 | addr | name ------+--------+---------- 000 | Tokyo | Satou 011 | 埼玉 | たかはし 010 | 札幌 | 佐藤 002 | Nagoya | Watanabe 001 | Osaka | Tanaka
CQLの特徴としてINDEXに指定していないColumnは、WHERE句に指定できません。指定するとエラーです。
cqlsh:ks1> SELECT * FROM namelist1 WHERE name='Satou'; Bad Request: No indexed columns present in by-columns clause with Equal operatorcqlsh:ks1> SELECT * FROM namelist1 WHERE key1='001' OR key1='000'; Bad Request: line 1:41 missing EOF at 'OR'
TABLE内のデータを全消去するには、TRUNCATEステートメントを使用します。
cqlsh:ks1> TRUNCATE namelist1; cqlsh:ks1> SELECT * FROM namelist1;
TABLEの削除は、DROP TABLEステートメントを使用します。TABLEが存在しないので、SELECTステートメントは、エラーです。
cqlsh:ks1> DROP TABLE namelist1; cqlsh:ks1> SELECT * FROM namelist1; Bad Request: unconfigured columnfamily namelist1