微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 yaml 文件用于用户配置文件时,cassandra-stress 工具抛出错误

如何解决将 yaml 文件用于用户配置文件时,cassandra-stress 工具抛出错误

我可以使用认键空间和表运行 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',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','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','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)  

解决方法

ifelse 中的 yaml 解析器非常严格。我总是在提前定义架构方面取得更大的成功,并且只是使用压力来插入/查询数据。

我的建议是从您的 ifelse(a <- foo > bar,...,...) ifelse(...,b <- 1,b[2:9] <- 11,...) 中删除 cassandra-stress 语句,预先通过 cqlsh 运行它们,然后重试。

,

就像@Aaron 所说,最好事先定义架构。

另外,注意 yaml 文件中的多行 CQL 语句。我发现将多行语句改为单行语句解决了我的大部分问题。

拥有一个带有 yaml 语法突出显示的 IDE 可能有助于查看您的语法是否是您想要的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。