2015-09-24 2 views
0

Я довольно новичок в Cassandra - в течение месяца, исходя из длинного фона SQL Server. Мне поручили вырезать некоторый Python для автоматизации объемной загрузки sstables. Введите sstableloader. Все, что я установил до сих пор, это тестирование. У меня установлена ​​1 виртуальная машина с Cassandra, установленной на одноузловой кластер. Для этого потребовалось немного настройки и ipaddress loopback. Итак, у меня 127.0.0.1 и 127.0.0.2, семя настроено на 127.0.0.1. Я успешно получил Cassandra и могу получить доступ к ней через простые строки подключения в Python из других ящиков - так что большинство моих требований выполнены. Когда я сталкиваюсь с проблемами, загружаю данные через все, кроме cql. Я могу использовать инструкции insert для получения данных за весь день - мне нужно успешно выполнить json2sstable и sstableloader (отдельно на этом этапе). Кикер сообщает, что все в порядке ... и мои данные никогда не появляются в любом случае. Ниже приводится мой способ воссоздать проблему.Cassandra json2sstable и sstableloader сообщают о положительных результатах, но никаких изменений данных не происходит

пространство ключей, колонка семьи и папки: sampledb_adl, emp_new_9/вар/Библиотека/Cassandra/данные/emp_new_9

Table created at cqlsh prompt: CREATE TABLE emp_new_9 (pkreq uuid, empid int, deptid int, first_name text, last_name text, PRIMARY KEY  ((pkreq))) WITH 
    bloom_filter_fp_chance=0.010000 AND 
    caching='KEYS_ONLY' AND 
    comment='' AND 
    dclocal_read_repair_chance=0.100000 AND 
    gc_grace_seconds=864000 AND 
    index_interval=128 AND 
    read_repair_chance=0.000000 AND 
    replicate_on_write='true' AND 
    populate_io_cache_on_flush='false' AND 
    default_time_to_live=0 AND 
    speculative_retry='99.0PERCENTILE' AND 
    memtable_flush_period_in_ms=0 AND 
    compaction={'class': 'SizeTieredCompactionStrategy'} AND 
    compression={'sstable_compression': 'LZ4Compressor'}; 

Исходные данные, введенные в таблицу с помощью cqlsh: INSERT INTO emp_new_9 (pkreq, EmpID, deptid, first_name , last_name) VALUES (uuid(), 30001,235, 'yogi', 'bear');

Результаты поиска 'select * from emp_new_9':
pkreq | deptid | empid | first_name | last_name -------------------------------------- + -------- + ------- + ------------ + ----------- 9c6dd9de-f6b1-4312-9737-e9d00b8187f3 | 235 | 30001 | йоги | медведь

Начатый nodetool смывать

Содержание папки emp_new_9 в данный момент:

sampledb_adl-emp_new_9-jb-1-CompressionInfo.db sampledb_adl-emp_new_9-jb-1-Index.db  sampledb_adl-emp_new_9-jb-1-TOC.txt 
sampledb_adl-emp_new_9-jb-1-Data.db    sampledb_adl-emp_new_9-jb-1-Statistics.db 
sampledb_adl-emp_new_9-jb-1-Filter.db   sampledb_adl-emp_new_9-jb-1-Summary.db 

Текущие результаты: [Root @ локальный emp_new_9] # sstable2json/вар/Библиотека/Cassandra/данные/sampledb_adl/emp_new_9/sampledb_adl-emp_new_9-ДБ-1-Data.db

[ 
{"key": "9c6dd9def6b143129737e9d00b8187f3","columns": [["","",1443108919841000], ["deptid","235",1443108919841000],  ["empid","30001",1443108919841000], ["first_name","yogi",1443108919841000], ["last_name","bear",1443108919841000]]} 
] 

Теперь, чтобы создать emp_new_10 с разными данными:

пространство ключей, колонка семьи и папки: sampledb_adl, emp_new_10/вар/Lib/Cassandra/данные/emp_new_10

Table created at cqlsh prompt: CREATE TABLE emp_new_10 (pkreq uuid, empid int, deptid int, first_name text, last_name text, PRIMARY KEY  ((pkreq))) WITH 
    bloom_filter_fp_chance=0.010000 AND 
    caching='KEYS_ONLY' AND 
    comment='' AND 
    dclocal_read_repair_chance=0.100000 AND 
    gc_grace_seconds=864000 AND 
    index_interval=128 AND 
    read_repair_chance=0.000000 AND 
    replicate_on_write='true' AND 
    populate_io_cache_on_flush='false' AND 
    default_time_to_live=0 AND 
    speculative_retry='99.0PERCENTILE' AND 
    memtable_flush_period_in_ms=0 AND 
    compaction={'class': 'SizeTieredCompactionStrategy'} AND 
    compression={'sstable_compression': 'LZ4Compressor'}; 

Исходные данные, введенные в таблицу с помощью cqlsh: INSERT INTO emp_new_10 (pkreq, EmpID, deptid, first_name, last_name) VALUES (uuid(), 30101,298, 'scoobie', 'doo');

Результаты 'выберите * из emp_new_10':

pkreq | deptid | empid | first_name | last_name -------------------------------------- + -------- + ------- + ------------ + ----------- c0e1763d-8b2b-4593-9daf-af3596ed08be | 298 | 30101 | scoobie | DOO

Начатый nodetool смывать

Содержание emp_new_10 папки на данный момент:

sampledb_adl-emp_new_10-jb-1-CompressionInfo.db sampledb_adl-emp_new_10-jb-1-Index.db  sampledb_adl-emp_new_10-jb-1-TOC.txt 
sampledb_adl-emp_new_10-jb-1-Data.db    sampledb_adl-emp_new_10-jb-1-Statistics.db 
sampledb_adl-emp_new_10-jb-1-Filter.db   sampledb_adl-emp_new_10-jb-1-Summary.db 

Текущие результаты: [Root @ локальный emp_new_10] # sstable2json/вар/Библиотека/Cassandra/данные/sampledb_adl/emp_new_10/sampledb_adl-emp_new_10-ДБ-1-данных.дб

[ 
{"key": "c0e1763d8b2b45939dafaf3596ed08be","columns": [["","",1443109509458000], ["deptid","298",1443109509458000],  ["empid","30101",1443109509458000], ["first_name","scoobie",1443109509458000], ["last_name","doo",1443109509458000]]} 
] 

Итак, йог 9, scoobie 10.

Теперь я собираюсь попробовать первый использовать json2sstable с файлом из emp_new_10, который я назвал (оригинал, я знаю): emp_new_10.json

json2sstable -K sampledb_adl -c emp_new_9 /home/tdmcoe_admin/Desktop/emp_new_10.json /var/lib/cassandra/data/sampledb_adl/emp_new_10/sampledb_adl-emp_new_10-jb-1-Data.db 

Результаты выводятся на окне терминала:

ERROR 08:56:48,581 Unable to initialize MemoryMeter (jamm not specified as javaagent). This means Cassandra will be unable to measure object sizes accurately and may consequently OOM. 
Importing 1 keys... 
1 keys imported successfully. 

Я получаю ошибку MemoryMeter все время и игнорировать поскольку googling сказал, что это не повлияло на результаты.

SO, содержимое моей папки не изменилось, 'select * from emp_new_9;' по-прежнему дает один и тот же исходный результат записи. emp_new_10 также не изменился. Что случилось с моими 1-мя ключами, импортированными успешно? Успешно где?

Теперь для соответствующего sstableloader. Те же базовые папки/данные, но теперь работает sstableloader:

[[email protected] emp_new_10]# sstableloader -d 127.0.0.1 /var/lib/cassandra/data/sampledb_adl/emp_new_9 

Примечание: Я также RAN ЛИНИЮ выше 127.0.0.2, и с 127.0.0.1,127.0.0.2 на всякий случай, но одни и те же результаты.

Результаты отпечатанные в окне терминала:

ERROR 09:05:07,686 Unable to initialize MemoryMeter (jamm not specified as javaagent). This means Cassandra will be unable to measure object sizes accurately and may consequently OOM. 
Established connection to initial hosts 
Opening sstables and calculating sections to stream 
Streaming relevant part of /var/lib/cassandra/data/sampledb_adl/emp_new_9/sampledb_adl-emp_new_9-jb-1-Data.db to [/<my machine ip>] 
Streaming session ID: 06a9c1a0-62d6-11e5-b85d-597b365ae56f 
progress: [/<my machine ip> 1/1 (100%)] [total: 100% - 0MB/s (avg: 0MB/s)] 

Так - 100% - яй! 0MB/s boo!

Теперь содержимое папки emp_new_9, которые я не трогали теперь есть второй набор файлов:

sampledb_adl-emp_new_9-jb-1-CompressionInfo.db sampledb_adl-emp_new_9-jb-1-TOC.txt    sampledb_adl-emp_new_9-jb-2-Statistics.db 
sampledb_adl-emp_new_9-jb-1-Data.db    sampledb_adl-emp_new_9-jb-2-CompressionInfo.db sampledb_adl-emp_new_9-jb-2-Summary.db 
sampledb_adl-emp_new_9-jb-1-Filter.db   sampledb_adl-emp_new_9-jb-2-Data.db    sampledb_adl-emp_new_9-jb-2-TOC.txt 
sampledb_adl-emp_new_9-jb-1-Index.db   sampledb_adl-emp_new_9-jb-2-Filter.db 
sampledb_adl-emp_new_9-jb-1-Statistics.db  sampledb_adl-emp_new_9-jb-2-Index.db 

результатам «выберите * из emp_new_9;» не изменились, используя sstable2json на BOTH файлов данных, просто покажите 1 старую запись йога. Когда я запускаю компакт-диск nodetool, он возвращается к 1 набору файлов только с одной линией йога. Так что 100% произошло?!? 100% чего?

Любая помощь приветствуется. Я очень смущен.

ответ

0

При использовании json2sstable вы должны указать имя нового несуществующего .db-файла. Как и было предусмотрено, SSTables являются неизменяемыми, поэтому они не будут обновляться через json2sstable.

По какой-то причине инструмент не жалуется на существующий SSTable. Если вы укажете новый .db-файл, вы обнаружите, что файлы SSTable будут созданы с ожидаемым.

+0

Сэр, вы джентльмен и ученый, это ответили на один из моих вопросов! Я обнаружил, что он не работает, если таблица пуста, поэтому никаких файлов .db в папке вообще нет, но если есть существующие файлы .db, тогда этот процесс сделает второй набор с новой информацией в этом втором наборе, который я назвал именем ... хотя все еще невидимым для Кассандры. – AdriennePDX

+0

Теперь мне просто нужно перегружать этот недавно измененный файл, используя sstableloader, чтобы Cassandra увидела его! Дайте мне знать, если у вас есть другие советы! Я не хочу отмечать этот ответ, но на всякий случай кто-то может ответить во второй половине. Однако, в конце концов, я буду отмечать это как ответ. – AdriennePDX

0

Я понял это - я использовал таблицу с полем uuid и пытался добавить в таблицу для массовой загрузки, которая уже имела uuid в этом поле, поэтому она терпела неудачу. Тестирование с помощью текстовых столбцов и все работало нормально!