Ошибка Cassandra Объект «NoneType» не имеет атрибута «центр данных» при импорте csv

Я создал кластер cassandra с 3 узлами.

Я пытаюсь выполнить простой экспорт/импорт с помощью команды копирования, но происходит сбой со следующей ошибкой:

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

Убунту 16.04 64бит.

как я могу исправить эту ошибку?

в журналах внутри $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

person GuilhermeMesquitaX    schedule 03.09.2016    source источник
comment
Решение: Укажите ip вместо имени хоста и порта при подключении: cassandra@cassandra-srv01:~$ cqlsh 192.168.56.101 9042 Подключен к fiap_cluster по адресу 192.168.56.101:9042. cqlsh› скопировать walmart.test из 'file.csv'; Использование 1 дочернего процесса. Запуск копии walmart.test со столбцами [store, date, isholiday, dept]. Обработано: 1 ряд; Скорость: 2 ряда/с; Сред. скорость: 3 строки/с 1 строка импортирована из 1 файла за 0,399 секунды (0 пропущено).   -  person GuilhermeMesquitaX    schedule 08.09.2016


Ответы (2)


это не так хорошо, но я постараюсь внести свой вклад в проблему. Я новичок в cassandra, и у меня была точно такая же проблема при попытке импортировать данные в таблицу cassandra с помощью функции копирования. я подключаюсь к серверу, на котором установлена ​​cassandra, через cqlsh, установленный на виртуальной машине. поэтому я должен указать IP-адрес сервера и порт при выполнении команды cqlsh: # cqlsh ip_address port я подключился с именем сервера следующим образом: # cqlsh myserver.example.com 9040 и я был подключен, и функция копирования не работала .

Но подключение с числовым ip адресом сервера (например:

cqlsh 127.0.0.1 9040) сработало.

это было чисто случайно, я просто проверил, и это сработало для меня.

когда кто-то здесь может объяснить этот факт, это было бы здорово!

person edwing    schedule 08.09.2016
comment
большое спасибо за то, что поделились решением. Он работал, указав ip и порт при подключении, как вы предложили. Я указал его ранее, но имя хоста вместо ip. - person GuilhermeMesquitaX; 08.09.2016
comment
То же самое относилось ко мне. Я подключался через «localhost» вместо «127.0.0.1». - person leovrf; 07.03.2017

Проблема заключается в используемой вами сборке cqlsh. В этой сборке copyutil не использует правильный хост для подключения. Это было исправлено в новых релизах. Просто клонируйте репозиторий, запустите bin/cqlsh и попробуйте те же команды.

person rajat    schedule 06.09.2016