Cassandra错误'NoneType'对象在导入csv时没有属性'datacenter'

时间:2016-09-03 15:44:27

标签: python csv cassandra copy nonetype

我已经设置了一个包含3个节点的cassandra集群。

我正在尝试使用copy命令进行简单的导出/导入,但它失败并出现以下错误:

cqlsh:walmart> select * from test;

 store | date       | isholiday | dept
-------+------------+-----------+------
     1 | 22/04/1993 |     False |    1


cqlsh> use walmart;
cqlsh:walmart> copy test to 'test.csv';
'NoneType' object has no attribute 'datacenter'

我研究了错误,并且每个相关链接似乎都指出了python问题。

我还安装了python驱动程序pip cassandra-driver。手动插入数据有效,但不能通过导出/导入。

cassandra@cassandra-srv01:~$ python -c 'import cassandra; print cassandra.__version__'
3.6.0

Ubuntu 16.04 64bit。

我该如何解决此错误?

$CASSANDRA_HOME/logs内的日志没有关于错误的任何条目。

回溯:

Traceback (most recent call last):
  File "/usr/local/Cellar/cassandra/3.7/libexec/bin/cqlsh.py", line 1152, in onecmd
    self.handle_statement(st, statementtext)
  File "/usr/local/Cellar/cassandra/3.7/libexec/bin/cqlsh.py", line 1189, in handle_statement
    return custom_handler(parsed)
  File "/usr/local/Cellar/cassandra/3.7/libexec/bin/cqlsh.py", line 1907, in do_copy
    task = ImportTask(self, ks, table, columns, fname, opts, DEFAULT_PROTOCOL_VERSION, CONFIG_FILE)
  File "/usr/local/Cellar/cassandra/3.7/libexec/bin/../pylib/cqlshlib/copyutil.py", line 1061, in __init__
    CopyTask.__init__(self, shell, ks, table, columns, fname, opts, protocol_version, config_file, 'from')
  File "/usr/local/Cellar/cassandra/3.7/libexec/bin/../pylib/cqlshlib/copyutil.py", line 207, in __init__
    self.local_dc = shell.conn.metadata.get_host(shell.hostname).datacenter
AttributeError: 'NoneType' object has no attribute 'datacenter

2 个答案:

答案 0 :(得分:3)

它不太好,但我会尽力为这个问题做出贡献。我是cassandra的新手,在尝试通过复制功能将数据导入cassandra表时遇到了完全相同的问题。我通过安装在虚拟机上的cqlsh连接到安装了cassandra的服务器。所以我必须在运行cqlsh命令时指定服务器IP地址和端口:#cqlsh ip_address port 我用这样的服务器名连接:#cqlsh myserver.example.com 9040我连接了,复制功能没有用。

但是要连接服务器的数字IP地址(例如:

cqlsh 127.0.0.1 9040)它有效。

纯粹的机会,我只是测试了它,它对我有用。

当有人在这里解释这个事实时会很棒!

答案 1 :(得分:2)

问题在于您正在使用的cqlsh的构建,在该构建中,copyutil没有使用正确的主机进行连接。新版本中已fixed。只需克隆repo并运行bin/cqlsh并尝试相同的命令。