使用 cassandra-stress 导入时,ScyllaDB 模式会导致问题
ScyllaDB schema causes issues when imported with cassandra-stress
我目前在我的环境中使用 ScyllaDB,并且由于技术原因,正在研究迁移到 Cassandra。我正在尝试使用可能与 ScyllaDB 中当前使用的模式相同的模式,使 cassandra-stress 使用数据加载 Cassandra 集群。遗憾的是,存在一些问题。
环境:
- ScyllaDB 3.0.7(= Cassandra 3.0.8)运行宁于Ubuntu 18.04
- Cassandra 3.11.4 运行宁 Ubuntu 18.04
- cassandra-stress 3.0.18(
cassandra-tools
pkg 的一部分)运行宁 Ubuntu 18.04
过程如下:
- 从 ScyllaDB 转储模式 (
desc keyspace_name
)
- 准备 cassandra-stress yaml 文件 - 一个键空间,总共五个 table
- 运行 卡桑德拉压力 (
cassandra-stress user profile=schema.yml cl=QUORUM duration=30s 'ops(insert=1)' -node 172.19.11.9 -rate threads=1
)
为了确保没有与键空间相关的问题,每个 运行 cassandra-stress 都是在一个新的键空间上完成的(我正在递增名称)。
现在,当模式 1:1 作为从 Scylla 转储的模式时,两个 table 的定义(并且只有这两个)导致压力工具失败:com.datastax.driver.core.exceptions.SyntaxError: line 1:35 no viable alternative at input 'WHERE' (UPDATE "activities_bp_action" SET [WHERE]...)
.
table定义如下:
table: activities_bp
table_definition: |
CREATE TABLE activities_bp (
business_profile_id int,
create_date timestamp,
event_uuid uuid,
PRIMARY KEY (business_profile_id, create_date, event_uuid)
) WITH CLUSTERING ORDER BY (create_date DESC, event_uuid ASC)
AND compression = {'sstable_compression': 'org.apache.cassandra.io.compress.DeflateCompressor'}
table: activities_bp_action
table_definition: |
CREATE TABLE activities_bp_action (
business_profile_id int,
action text,
create_date timestamp,
event_uuid uuid,
PRIMARY KEY ((business_profile_id, action), create_date, event_uuid)
) WITH CLUSTERING ORDER BY (create_date DESC, event_uuid ASC)
AND compression = {'sstable_compression': 'org.apache.cassandra.io.compress.DeflateCompressor'}
如果将包含 PRIMARY KEY
和 CLUSTERING ORDER
的两行替换为以下内容,则 cassandra-stress 运行 没有错误并开始用数据填充集群.然而,现在的定义已经偏离了 ScyllaDB 中的定义:
PRIMARY KEY (event_uuid, create_date)
) WITH CLUSTERING ORDER BY (create_date DESC)
现在,在 cassandra-stress 是 运行 修改后的定义之后,我可以回滚到未修改的那个(过去失败的那个)。如果 运行 在一个已经存在的键空间上,yaml 现在可以正常工作并用数据填充集群。这表明问题是在创建 tables?
时发生的
当 运行在调试模式下使用 cassandra-stress 和 Cassandra 时,我无法找到 cassandra-stress 在其堆栈跟踪中显示的完整查询,查询让我有点困惑.
知道为什么会出现这个问题吗?谢谢!
编辑:
附加 schema.yml
:https://gist.github.com/schybbkoh/76cdbf19a2bb933419063526ff5ac44f
编辑:
事实证明,"runs fine with no errors and starts to fill up the cluster with data" 模式仅创建并填充模式中最后定义的 table 数据。这里出了点问题。
好的,问题解决了。有两个问题:
cassandra-stress 3.0.18
vs Cassandra 3.11.4
使用不同的 CQL 规范(发生冲突)
cassandra-stress 3.x
不支持在一个 YML 中定义多个 table(参见 https://issues.apache.org/jira/browse/CASSANDRA-8780)
我目前在我的环境中使用 ScyllaDB,并且由于技术原因,正在研究迁移到 Cassandra。我正在尝试使用可能与 ScyllaDB 中当前使用的模式相同的模式,使 cassandra-stress 使用数据加载 Cassandra 集群。遗憾的是,存在一些问题。
环境:
- ScyllaDB 3.0.7(= Cassandra 3.0.8)运行宁于Ubuntu 18.04
- Cassandra 3.11.4 运行宁 Ubuntu 18.04
- cassandra-stress 3.0.18(
cassandra-tools
pkg 的一部分)运行宁 Ubuntu 18.04
过程如下:
- 从 ScyllaDB 转储模式 (
desc keyspace_name
) - 准备 cassandra-stress yaml 文件 - 一个键空间,总共五个 table
- 运行 卡桑德拉压力 (
cassandra-stress user profile=schema.yml cl=QUORUM duration=30s 'ops(insert=1)' -node 172.19.11.9 -rate threads=1
)
为了确保没有与键空间相关的问题,每个 运行 cassandra-stress 都是在一个新的键空间上完成的(我正在递增名称)。
现在,当模式 1:1 作为从 Scylla 转储的模式时,两个 table 的定义(并且只有这两个)导致压力工具失败:com.datastax.driver.core.exceptions.SyntaxError: line 1:35 no viable alternative at input 'WHERE' (UPDATE "activities_bp_action" SET [WHERE]...)
.
table定义如下:
table: activities_bp
table_definition: |
CREATE TABLE activities_bp (
business_profile_id int,
create_date timestamp,
event_uuid uuid,
PRIMARY KEY (business_profile_id, create_date, event_uuid)
) WITH CLUSTERING ORDER BY (create_date DESC, event_uuid ASC)
AND compression = {'sstable_compression': 'org.apache.cassandra.io.compress.DeflateCompressor'}
table: activities_bp_action
table_definition: |
CREATE TABLE activities_bp_action (
business_profile_id int,
action text,
create_date timestamp,
event_uuid uuid,
PRIMARY KEY ((business_profile_id, action), create_date, event_uuid)
) WITH CLUSTERING ORDER BY (create_date DESC, event_uuid ASC)
AND compression = {'sstable_compression': 'org.apache.cassandra.io.compress.DeflateCompressor'}
如果将包含 PRIMARY KEY
和 CLUSTERING ORDER
的两行替换为以下内容,则 cassandra-stress 运行 没有错误并开始用数据填充集群.然而,现在的定义已经偏离了 ScyllaDB 中的定义:
PRIMARY KEY (event_uuid, create_date)
) WITH CLUSTERING ORDER BY (create_date DESC)
现在,在 cassandra-stress 是 运行 修改后的定义之后,我可以回滚到未修改的那个(过去失败的那个)。如果 运行 在一个已经存在的键空间上,yaml 现在可以正常工作并用数据填充集群。这表明问题是在创建 tables?
时发生的当 运行在调试模式下使用 cassandra-stress 和 Cassandra 时,我无法找到 cassandra-stress 在其堆栈跟踪中显示的完整查询,查询让我有点困惑.
知道为什么会出现这个问题吗?谢谢!
编辑:
附加 schema.yml
:https://gist.github.com/schybbkoh/76cdbf19a2bb933419063526ff5ac44f
编辑:
事实证明,"runs fine with no errors and starts to fill up the cluster with data" 模式仅创建并填充模式中最后定义的 table 数据。这里出了点问题。
好的,问题解决了。有两个问题:
cassandra-stress 3.0.18
vsCassandra 3.11.4
使用不同的 CQL 规范(发生冲突)cassandra-stress 3.x
不支持在一个 YML 中定义多个 table(参见 https://issues.apache.org/jira/browse/CASSANDRA-8780)