инструмент cassandra-stress выдает ошибку при использовании файла yaml для профиля пользователя
Я могу запустить cassandra-stress с пространством ключей и таблицами по умолчанию, но со ссылкой на документ datastax я пытался использовать инструмент cassandra-stress, используя свой собственный профиль. Документ Datastax - https://docs.datastax.com/en/dse/5.1/dse-admin/datastax_enterprise/tools/toolsCStress.html
У меня есть 2 DC с (2 + 1) узлом и настройкой cassandra 3.11, и я соответствующим образом изменил файл yaml, но получаю ошибки.
Команда -
cassandra-stress user profile=/var/lib/cassandra/stresstest/cqlstress-example.yaml n=1000000 ops\(insert=3,read1=1\) no-warmup cl=one
Ошибка -
java.io.IOError: while parsing a block mapping
in 'reader', line 5, column 4:
CREATE KEYSPACE perftesting WITH ...
^
expected <block end>, but found FlowEntry
in 'reader', line 5, column 87:
... lass': 'NetworkTopologyStrategy', 'dc1': 1, 'dc2': 2};
^
at org.apache.cassandra.stress.StressProfile.load(StressProfile.java:823)
at org.apache.cassandra.stress.settings.SettingsCommandUser.<init>(SettingsCommandUser.java:62)
at org.apache.cassandra.stress.settings.SettingsCommandUser.build(SettingsCommandUser.java:150)
at org.apache.cassandra.stress.settings.SettingsCommand.get(SettingsCommand.java:217)
at org.apache.cassandra.stress.settings.StressSettings.get(StressSettings.java:264)
at org.apache.cassandra.stress.settings.StressSettings.parse(StressSettings.java:241)
at org.apache.cassandra.stress.Stress.run(Stress.java:80)
at org.apache.cassandra.stress.Stress.main(Stress.java:62)
Caused by: while parsing a block mapping
in 'reader', line 5, column 4:
CREATE KEYSPACE perftesting WITH ...
^
expected <block end>, but found FlowEntry
in 'reader', line 5, column 87:
... lass': 'NetworkTopologyStrategy', 'dc1': 1, 'dc2': 2};
^
at org.yaml.snakeyaml.parser.ParserImpl$ParseBlockMappingKey.produce(ParserImpl.java:570)
at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:158)
at org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:143)
at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:230)
at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:159)
at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:237)
at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:159)
at org.yaml.snakeyaml.composer.Composer.composeDocument(Composer.java:122)
at org.yaml.snakeyaml.composer.Composer.getSingleNode(Composer.java:105)
at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:120)
at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:481)
at org.yaml.snakeyaml.Yaml.loadAs(Yaml.java:475)
at org.apache.cassandra.stress.StressProfile.load(StressProfile.java:814)
... 7 more
Содержимое cqlstress-example.yaml
keyspace: perftesting
keyspace_definition:
CREATE KEYSPACE perftesting WITH replication = { 'class': 'NetworkTopologyStrategy', 'dc1': 1, 'dc2': 2};
table: users
table_definition:
CREATE TABLE users (
username text,
first_name text,
last_name text,
password text,
email text,
last_access timeuuid,
PRIMARY KEY(username)
);
extra_definitions:
- CREATE MATERIALIZED VIEW perftesting.users_by_first_name AS SELECT * FROM perftesting.users WHERE first_name IS NOT NULL and username IS NOT NULL PRIMARY KEY (first_name, username);
- CREATE MATERIALIZED VIEW perftesting.users_by_first_name2 AS SELECT * FROM perftesting.users WHERE first_name IS NOT NULL and username IS NOT NULL PRIMARY KEY (first_name, username);
- CREATE MATERIALIZED VIEW perftesting.users_by_first_name3 AS SELECT * FROM perftesting.users WHERE first_name IS NOT NULL and username IS NOT NULL PRIMARY KEY (first_name, username);
columnspec:
- name: username
size: uniform(10..30)
- name: first_name
size: fixed(16)
- name: last_name
size: uniform(1..32)
- name: password
size: fixed(80) # sha-512
- name: email
size: uniform(16..50)
- name: startdate
cluster: uniform(20...40)
- name: description
size: gaussian(100...500)
insert:
partitions: fixed(10)
batchtype: UNLOGGED
queries:
read1:
cql: select * from users where username = ? and startdate = ?
fields: samerow # samerow or multirow (select arguments from the same row, or randomly from all rows in the partition)
2 ответа
Парсер yaml в
cassandra-stress
довольно строгий. Мне всегда удавалось заранее определить схему и просто использовать стресс для вставки / запроса данных.
Я предлагаю удалить
CREATE
заявления от вашего
stress.yaml
, запустите их заранее через cqlsh и повторите попытку.
Как сказал @Aaron, лучше заранее определить схему.
С другой стороны, будьте осторожны с многострочными операторами CQL в файле yaml. Я обнаружил, что изменение многострочных операторов на однострочные решило большинство моих проблем.
Наличие IDE с подсветкой синтаксиса yaml может помочь здесь увидеть, соответствует ли ваш синтаксис вам.