尝试使用dsbulk从AWS密钥空间卸载或计数数据时出错。
错误:
Operation COUNT_20221021-192729-813222 failed: Token metadata not present.命令行:
$ dsbulk count/unload -k my_best_storage -t book_awards -f ./dsbulk_keyspaces.conf配置:
datastax-java-driver {
basic.contact-points = [ "cassandra.us-east-2.amazonaws.com:9142"]
advanced.auth-provider {
class = PlainTextAuthProvider
username = "aw.keyspaces-at-XXX"
password = "XXXX"
}
basic.load-balancing-policy {
local-datacenter = "us-east-2"
}
basic.request {
consistency = LOCAL_QUORUM
default-idempotence = true
}
advanced {
request{
log-warnings = true
}
ssl-engine-factory {
class = DefaultSslEngineFactory
truststore-path = "./cassandra_truststore.jks"
truststore-password = "XXX"
hostname-validation = false
}
metadata {
token-map.enabled = false
}
}
}散装装载机工作正常.
发布于 2022-10-22 11:47:41
我怀疑这里的问题是,您的集群正在使用专有的com.amazonaws.cassandra.DefaultPartitioner分区器,而大多数开源工具和驱动程序都不认识它。
DataStax散装装载机 (DSBulk)工具使用引擎盖下的Cassandra Java驱动程序连接到Cassandra集群。Java驱动程序使用分区程序来确定哪些节点拥有令牌范围。只支持下列Cassandra分配器:
Murmur3PartitionerRandomPartitionerByteOrderedPartitioner因为Java驱动程序不知道DefaultPartitioner,所以它没有令牌范围所有者的映射(令牌元数据),因此无法确定如何“拆分”Cassandra环来查询节点。
正如您已经知道的,这不会影响load命令,因为它只会向协调员发送写操作,并让协调员了解数据是如何分区的。但是对于需要读取的unload和count命令,Java驱动程序无法确定使用不支持的分区程序为子范围查询选择哪些协调程序。
也许,作为一种解决办法,您可以尝试通过以下方法禁用令牌感知:
$ dsbulk count [...]
--driver.advanced.metadata.token-map.enabled false但是我没有一个AWS关键空间集群,我可以测试,我怀疑它是否能工作。无论如何,欢迎你尝试。
有一个优秀的DSBulk特性请求提供完全禁用令牌感知的能力(内部票证ID DAT-622),但是在编写本报告时它没有被分配,所以我无法对它何时被优先排序提供任何期望。干杯!
发布于 2022-11-29 02:46:26
Amazon现在支持多个分区,包括MurMr3Partitioner。请参见下面的更新您的分区程序。您还需要将Token-map.Enable设置为true。
metadata {
token-map.enabled = true
}此外,如果您正在使用VPC,您将需要下列权限来确保您将看到可用的对等点。
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"ListVPCEndpoints",
"Effect":"Allow",
"Action":[
"ec2:DescribeNetworkInterfaces",
"ec2:DescribeVpcEndpoints"
],
"Resource":"*"
}
]
}我还建议增加数据加载过程的连接池大小。
advanced.connection.pool.local.size = 3最后,我建议使用AWS胶水而不是DSBulk。DSBulk是一个单一的进程工具,不会对较大的数据负载进行扩展。此外,学习胶水将有助于管理数据生命周期的其他方面。请参阅我在如何使用AWS Glue卸载/导出数据上的示例。
https://stackoverflow.com/questions/74158451
复制相似问题