在localhost端口9042二进制协议模式下连接到Cassandra时出现cqlsh错误

时间:2016-03-10 22:54:59

标签: cassandra cqlsh

我刚开始学习cassandra,我遇到了cqlsh的问题。我正在运行Cassandra 2.2.2和cqlsh 4.1.1。我的Cassandra.yaml文件我将Solidus设置为不想使用Thrift协议。

Cassandra开始很好但是当我运行start_rpc: false命令时,我得到:

cqlsh

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

Connection error: Could not connect to localhost:9160

我收到以下错误:

cqlsh localhost 9042

我做错了吗?请指教。

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

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

rpc_address: localhost listen_address: localhost 未设置。它被注释掉了。它猜是默认/

1 个答案:

答案 0 :(得分:2)

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

您是否安装了多个版本的Cassandra?我只是问,因为csssh自Cassandra 2.1起自动连接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。