一、啟動cassandra客戶端
首先啟動cassandra,然后運行bin\cassandra-cli.bat啟動客戶端,默認hostname為localhost,port為9160
F:\apache-cassandra-2.1.11-bin\bin>cassandra-cli Starting Cassandra Client org.apache.thrift.transport.TTransportException: java.net.ConnectException: Conn ection refused: connect at org.apache.thrift.transport.TSocket.open(TSocket.java:187) at org.apache.thrift.transport.TFramedTransport.open(TFramedTransport.ja va:81) at org.apache.cassandra.thrift.TFramedTransportFactory.openTransport(TFr amedTransportFactory.java:41) at org.apache.cassandra.cli.CliMain.connect(CliMain.java:66) at org.apache.cassandra.cli.CliMain.main(CliMain.java:239) Caused by: java.net.ConnectException: Connection refused: connect at java.net.DualStackPlainSocketImpl.connect0(Native Method) at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source) at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) at java.net.AbstractPlainSocketImpl.connect(Unknown Source) at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at org.apache.thrift.transport.TSocket.open(TSocket.java:182) ... 4 more Exception connecting to 127.0.0.1/9160. Reason: Connection refused: connect. Welcome to Cassandra CLI version 2.1.11 The CLI is deprecated and will be removed in Cassandra 2.2. Consider migrating to cqlsh. CQL is fully backwards compatible with Thrift data; see http://www.datastax.com/ dev/blog/thrift-to-cql3 Type 'help;' or '?' for help. Type 'quit;' or 'exit;' to quit.
可以看到Connection refused,如果遇到這個問題首先要檢查配置情況(具體看我之前寫的總結二),然后看cassandra是否啟動,在window7下顯示啟動成功后可能還在后台初始化數據所以等待一小會后再運行cassandra-cli.bat啟動客戶端,在window8下啟動cassandra后不要關掉窗口,window7下啟動成功后關閉窗口cassandra仍然是在后台運行的,但在window8下關閉窗口就相當於關閉了cassandra,所以在window8下需要重新開個dos窗口來運行cassandra-cli.bat啟動客戶端。
如果配置都沒問題,仍然拒絕連接,那就是cassandra啟動失敗,這時候我們可以到與$CASSANDRA_HOME同級目錄的cassandra文件夾中查看登錄日志來查找失敗的原因。
也可以連接自己定義的hostname和port,如:cassandra-cli -h localhost -p 9160或者cassandra-cli -hostname localhost -port 9160
在上面我們可以看到這么一句話
The CLI is deprecated and will be removed in Cassandra 2.2. Consider migrating to cqlsh.
所以更新版本的想要運行cassandra客戶端就到cqlsh中吧。
二、cassandra cli簡介
首先我么來看下cli中有哪些命令
[default@unknown] ? Getting around: ? Display this help. help; Display this help. help <command>; Display command-specific help. exit; Exit this utility. quit; Exit this utility. Commands: assume Apply client side validation. connect Connect to a Cassandra node. consistencylevel Sets consisteny level for the client to use. count Count columns or super columns. create column family Add a column family to an existing keyspace. create keyspace Add a keyspace to the cluster. del Delete a column, super column or row. decr Decrements a counter column. describe cluster Describe the cluster configuration. describe Describe a keyspace and its column families or column fa mily in current keyspace. drop column family Remove a column family and its data. drop keyspace Remove a keyspace and its data. drop index Remove an existing index from specific column. get Get rows and columns. incr Increments a counter column. list List rows in a column family. set Set columns. show api version Show the server API version. show cluster name Show the cluster name. show keyspaces Show all keyspaces and their column families. show schema Show a cli script to create keyspaces and column familie s. truncate Drop the data in a column family. update column family Update the settings for a column family. update keyspace Update the settings for a keyspace. use Switch to a keyspace.
我們挑主要的幾個講一下:
1、connect
connect hostname/port;
2、consistencylevel
詳細信息參考http://www.doc88.com/p-495509829231.html
由於用的是單節點,所以我們設該值為one就可以了
[default@unknown] consistencylevel as one; Consistency level is set to 'ONE'.
3、create keyspace
[default@unknown] create keyspace keyspace1 with placement_strategy='SimpleStrat egy' and strategy_options={replication_factor:1}; 6a9f1cd8-758d-3a9a-9f0a-e799b00bb159
單節點replication_factor設為1就行了。
4、use
[default@unknown] use keyspace1; Authenticated to keyspace: keyspace1
5、create column family
column family分為Standard和Super兩種類型,默認情況下是Standard。不知道的可以先了解一下cassandra的數據存儲結構。
創建standard類型:
[default@keyspace1] create column family standardFamily with comparator=UTF8Type ; b7f2a26b-1e36-31e0-a7c2-7d32daf041fd
某一個Key內的所有Column都是按照它的Name來排序的,comparator是設置排序類型。(關於排序前面有講到,請自行查閱)
創建super類型:
[default@keyspace1] create column family superFamily with comparator = UTF8Type and subcomparator = UTF8Type and column_type = 'Super'; 2bf4b959-6199-321b-8e56-c8cb2f653ae1
在super類型中,comparator按照所有superColumn的key來排序,subcomparator按照superColumn中所有column的name排序。
6、set
插入standard類型的數據:
[default@keyspace1] set standardFamily['key1']['cloumnName1'] = 'columnValue1'; cannot parse 'columnValue1' as hex bytes
我們可以看到不能解析,這時候需要調用ascii()函數,utf8()函數等函數來設置數據類型,cassandra中的數據類型有 bytes, integer, long, int, lexicaluuid, timeuuid, utf8, ascii, double, countercolumn。
[default@keyspace1] set standardFamily['key1']['cloumnName1'] = ascii('columnValue1'); org.apache.cassandra.serializers.MarshalException: cannot parse 'key1' as hex bytes
可以看到key也不能解析,事實上key,column_name,column_value都是需要函數解析的
[default@keyspace1] set standardFamily[utf8('key1')][utf8('columnName1')] = utf8 ('columnValue1'); Value inserted. Elapsed time: 52 msec(s).
成功插入,但是這樣顯然很麻煩,我們可以用assume來設置數據類型。
7、assume
格式:assume column family validator/comparator/keys/sub_comparator as type;
[default@keyspace1] assume standardFamily keys as utf8; Assumption for column family 'standardFamily' added successfully.
設置key的數據類型為utf8。
[default@keyspace1] assume standardFamily validator as utf8; Assumption for column family 'standardFamily' added successfully.
設置value的數據類型為utf8。
至於comparator/sub_comparator就是指定排序的類型了。(前面有講到排序類型)
[default@keyspace1] set standardFamily['key2']['columnName2'] = 'columnValue2'; Value inserted. Elapsed time: 1.85 msec(s).
這樣如果也對name設置了排序類型的話就可以直接插入了(提示:如果column_name沒有設置排序類型,column_name是仍舊需要函數解析的)
並且assume設置的驗證類型在關閉服務器后就會失效,所以我們永久的方法就是直接修改column family的設置,看下面的update。
8、update column family
[default@keyspace1] update column family standardFamily with key_validation_clas s = UTF8Type and default_validation_class = UTF8Type; fe850dbb-c170-3639-846d-2ce3ef975462
這樣設置就永久保存了。
9、describe
我們來看下standradFamily的配置情況。
[default@keyspace1] describe standardFamily; WARNING: CQL3 tables are intentionally omitted from 'describe' output. See https://issues.apache.org/jira/browse/CASSANDRA-4377 for details. ColumnFamily: standardFamily Key Validation Class: org.apache.cassandra.db.marshal.UTF8Type Default column value validator: org.apache.cassandra.db.marshal.UTF8Type Cells sorted by: org.apache.cassandra.db.marshal.UTF8Type GC grace seconds: 864000 Compaction min/max thresholds: 4/32 Read repair chance: 0.0 DC Local Read repair chance: 0.1 Caching: KEYS_ONLY Default time to live: 0 Bloom Filter FP chance: default Index interval: default Speculative Retry: NONE Built indexes: [] Compaction Strategy: org.apache.cassandra.db.compaction.SizeTieredCompacti onStrategy Compression Options: sstable_compression: org.apache.cassandra.io.compress.LZ4Compressor
可以看到我們的設置都生效了。
10、get
獲取key對應的value
[default@keyspace1] get standardFamily['key1']; => (name=columnName1, value=columnValue1, timestamp=1448367633646000) Returned 1 results. Elapsed time: 193 msec(s).
獲取key下column_name對應的value
[default@keyspace1] get standardFamily['key1']['columnName1']; => (name=columnName1, value=columnValue1, timestamp=1448367633646000) Elapsed time: 193 msec(s).
11、list
獲取某個column family中的所有數據,也可以用limit來限制查詢的數量,默認100
[default@keyspace1] list standardFamily; Using default limit of 100 Using default cell limit of 100 ------------------- RowKey: 3 => (name=3, value=3, timestamp=1448369924110000) ------------------- RowKey: key1 => (name=columnName1, value=columnValue1, timestamp=1448367633646000) ------------------- RowKey: 1 => (name=1, value=1, timestamp=1448368544230000) ------------------- RowKey: key2 => (name=2, value=columnValue2, timestamp=1448369767734000) => (name=columnName2, value=columnValue2, timestamp=1448369748230000) 4 Rows Returned. Elapsed time: 270 msec(s).
[default@keyspace1] list standardFamily limit 1; Using default cell limit of 100 ------------------- RowKey: 3 => (name=3, value=3, timestamp=1448369924110000) 1 Row Returned. Elapsed time: 24 msec(s).
可以看出key是按照cassandra自己的機制排序的,但column或者superColumn是可以自己定義類型排序的。
PS:剩下的就不一一細述了