使用CQLSH查看Cassandra分区

时间:2017-09-12 01:41:59

标签: cassandra cassandra-2.0 cqlsh cassandra-2.1 cassandra-3.0

使用Cassandra,我如何根据我创建主键的方式创建了多少个分区?我一直在关注一个教程,并提到转到bin/cassandra-cli并使用LIST命令。但是,最新的Cassandra安装并没有附带这个,我在线阅读了其他文章,表明cli现已弃用。

我是否还能看到使用cqlsh创建的分区?

提前致谢!

3 个答案:

答案 0 :(得分:3)

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

cassandra.yaml

如果初始标记被注释掉,这意味着节点将在启动期间找出它自己的分区范围。

接下来,您可以使用$ grep num_tokens conf/cassandra.yaml ... num_tokens: 128 ... $ grep initial_token conf/cassandra.yaml ... # initial_token: 1 ... 命令检查分区范围:

nodetool ring

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

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

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

$ 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 

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

您也可以使用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) 在一个简单的步骤中执行相同操作:

nodetool

这告诉记录带有分区键的位置' first'位于。

注意:如果某些节点关闭,$ bin/nodetool getendpoints mykeyspace mytable 'first' 127.0.0.1 127.0.0.2 命令不会列出这些节点,即使它们应该根据复制设置存储记录。

答案 1 :(得分:2)

cassandra-cli 与cqlsh相同。阅读本文以获取更多信息:https://wiki.apache.org/cassandra/CassandraCli

获取分区数(密钥)的最简单方法是使用nodetool。

nodetool tablestats <keyspace>.<table>

Keyspace和桌子是可选的。分区数列在键数(估计值)的值下。

如果你想要行数,那么Chris回答是正确的。

SELECT * FROM <keyspace>.<table>;

这将显示表格中的所有行。请记住,这是一项非常昂贵的操作,因为Cassandra必须从群集中具有该表的任何数据的所有节点获取此数据。

答案 2 :(得分:0)

可以只做一个select * from table,如果查看标题,分区和行键的颜色会有所不同,所以可以这样计算出来。