cassandra - 在本地主机端口 9042 二进制协议(protocol)模式上连接到 Cassandra 时出现 cqlsh 错误

标签 cassandra cqlsh

我刚刚开始学习 cassandra,并且遇到了 cqlsh 问题。我正在运行 Cassandra 2.2.2 和 cqlsh 4.1.1。我的 Cassandra.yaml 文件设置了 start_rpc: false 因为不想使用 Thrift 协议(protocol)。

Cassandra 启动正常,但是当我运行 cqlsh 命令时,我得到:

Connection error: Could not connect to localhost:9160

我意识到我应该连接到端口 9042,因为我没有使用 Thrift。所以我将命令更改为:

cqlsh localhost 9042

我收到以下错误:

Traceback (most recent call last):
  File "/usr/local/bin/cqlsh", line 2044, in <module>
    main(*read_options(sys.argv[1:], os.environ))
  File "/usr/local/bin/cqlsh", line 2030, in main
    display_float_precision=options.float_precision)
  File "/usr/local/bin/cqlsh", line 480, in __init__
    cql_version=cqlver, transport=transport)
  File "/usr/local/lib/python2.7/site-packages/cql/connection.py", line 143, in connect
    consistency_level=consistency_level, transport=transport)
  File "/usr/local/lib/python2.7/site-packages/cql/connection.py", line 59, in __init__
    self.establish_connection()
  File "/usr/local/lib/python2.7/site-packages/cql/thrifteries.py", line 159, in establish_connection
    self.remote_thrift_version = tuple(map(int, self.client.describe_version().split('.')))
  File "/usr/local/lib/python2.7/site-packages/cql/cassandra/Cassandra.py", line 1255, in describe_version
    return self.recv_describe_version()
  File "/usr/local/lib/python2.7/site-packages/cql/cassandra/Cassandra.py", line 1265, in recv_describe_version
    (fname, mtype, rseqid) = self._iprot.readMessageBegin()
  File "/usr/local/lib/python2.7/site-packages/thrift/protocol/TBinaryProtocol.py", line 126, in readMessageBegin
    sz = self.readI32()
  File "/usr/local/lib/python2.7/site-packages/thrift/protocol/TBinaryProtocol.py", line 206, in readI32
    buff = self.trans.readAll(4)
  File "/usr/local/lib/python2.7/site-packages/thrift/transport/TTransport.py", line 63, in readAll
    raise EOFError()
EOFError

我做错了什么吗?请指教。

从 cassandra.yaml 添加更多详细信息:

rpc_address: localhost
listen_address: localhost

broadcast_rpc_address 未设置。它被注释掉了。它猜测这是默认的/

最佳答案

在您的 cassandra.yaml 中,listen_addressrpc_addressbroadcast_rpc_address 的值是什么?您应该将 cqlsh 连接到其中之一指定的 IP。

您是否安装了多个版本的 Cassandra?我之所以这么问,是因为从 Cassandra 2.1 开始,cqlsh 自动通过 9042 连接,因此您不需要指定它。

如果您有通过软件包安装程序(apt-get、yum)安装的旧版本,那么只需运行 cqlsh 就会调用旧版本,并且您需要指定完整路径为您的新版本调用正确的版本。

我之所以提到这一点,是因为 cqlsh 4.1.1 是与 Cassandra 2.0.11 和 DSE 4.6.0 一起交付的。如果您确实拥有 Cassandra 2.2,那么您的 cqlsh 版本至少应为 5.0。

底线是确保您使用的是随您的 Cassandra 版本一起提供的 cqlsh。

关于cassandra - 在本地主机端口 9042 二进制协议(protocol)模式上连接到 Cassandra 时出现 cqlsh 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35928997/

相关文章:

linux - 脚本手动工作正常但无法在 crontab 上工作

python - CQLSH 导入错误 : cannot import name ensure_str

cassandra - order by 子句在 Cassandra 查询中不起作用

python - PySpark 上 Spark-cassandra 的服务器端过滤

docker - Linux服务器上没有Internet的docker上的Cassandra/Scylla

csv - get_num_processes() 不接受关键字参数 (CSV <-> CASSANDRA)

cassandra - 尝试在 cqlsh 中运行创建和选择时出错 : NoHostAvailable

linux - Cassandra 和 cqlsh - "Cassandra unknown"和 "CQL spec unknown"

cassandra - 最大限度。宽行的大小?

database - Cassandra 数据库行大小是否受可用内存限制?