使用CQLSH查看Cassandra分区

Big*_*Bug 4 cassandra cqlsh cassandra-2.0 cassandra-2.1 cassandra-3.0

使用Cassandra,如何基于创建主键的方式查看创建了多少个分区?我一直在遵循一个教程,其中提到要去bin/cassandra-cli使用该LIST命令。但是,最新的Cassandra安装不附带此工具,并且我在线阅读了其他文章,这些文章表明cli已被弃用。

无论如何,我是否可以看到使用cqlsh创建的分区?

提前致谢!

Ore*_*esz 6

首先,您必须调查cassandra.yaml文件以查看当前配置的令牌数。这告诉您每个节点将拥有多少个分区:

$ grep num_tokens conf/cassandra.yaml
...
num_tokens: 128
...
$ grep initial_token conf/cassandra.yaml
...
# initial_token: 1
...
Run Code Online (Sandbox Code Playgroud)

如果将初始令牌注释掉,则意味着该节点将在启动期间弄清楚其自己的分区范围。

接下来,您可以使用以下nodetool ring命令检查分区范围:

$ bin/nodetool ring

Datacenter: DC1
==========
Address    Rack        Status State   Load            Owns                Token                                       
                                                                          9167006318991683417                         
127.0.0.2  r1          Down   Normal  ?               ?                   -9178420363247798328                        
127.0.0.2  r1          Down   Normal  ?               ?                   -9127364991967065057                        
127.0.0.3  r1          Down   Normal  ?               ?                   -9063041387589326037 
Run Code Online (Sandbox Code Playgroud)

这显示了哪个分区范围属于集群中的哪个节点。

在上面的示例中,每个节点拥有128个分区范围。-9178420363247798327-9127364991967065057之间的范围属于节点127.0.0.2

您可以使用此简单选择来告诉每一行的分区键:

cqlsh:mykeyspace> select token(key), key, added_date, title from mytable;

 system.token(key)    | key       | added_date               | title
----------------------+-----------+--------------------------+----------------------
 -1651127669401031945 |  first    | 2013-10-16 00:00:00+0000 | Hello World
 -1651127669401031945 |  first    | 2013-04-16 00:00:00+0000 | Bye World
   356242581507269238 | second    | 2014-01-29 00:00:00+0000 | Lorem Ipsum
   356242581507269238 | second    | 2013-03-17 00:00:00+0000 | Today tomorrow
   356242581507269238 | second    | 2012-04-03 00:00:00+0000 | It's good to meet you

(5 rows)
Run Code Online (Sandbox Code Playgroud)

在分区范围内找到分区键将告诉您记录的存储位置。

您也可以使用nodetool一个简单的步骤来执行相同的操作:

$ bin/nodetool getendpoints mykeyspace mytable 'first'
127.0.0.1
127.0.0.2
Run Code Online (Sandbox Code Playgroud)

这告诉您具有分区键“ first”的记录的位置。

注意:如果某些节点关闭,getendpoints即使它们应基于复制设置存储记录,命令也不会列出这些节点。