cassandra AWS密钥空间DSBulk卸载失败,“令牌元数据不存在”

jjjwad0x  于 2022-11-05  发布在  Cassandra
关注(0)|答案(1)|浏览(148)

尝试使用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
  }

}
}

dsbulk load -加载操作员工作正常...

cyvaqqii

cyvaqqii1#

我怀疑这里的问题是你的集群使用了专有的com.amazonaws.cassandra.DefaultPartitioner分区程序,大多数开源工具和驱动程序都不识别它。
DataStax Bulk LoaderDSBulk)工具在后台使用Cassandra Java driver连接到Cassandra群集。Java驱动程序使用分区程序确定哪些节点拥有令牌[范围]。仅支持以下Cassandra分区程序:

  • Murmur3Partitioner
  • RandomPartitioner
  • ByteOrderedPartitioner

由于Java驱动程序不知道DefaultPartitioner,因此它没有令牌范围所有者的Map(令牌元数据),因此无法确定如何“拆分”Cassandra环以查询节点。
正如您已经发现的,这不会影响load命令,因为它只是将写操作发送给协调器,并让协调器确定数据是如何分区的。但是对于需要读操作的unloadcount命令,Java驱动程序无法确定使用不受支持的分区器为子范围查询选择哪个协调器。
作为一种解决方法,您可以尝试使用以下命令禁用令牌感知:

$ dsbulk count [...]
  --driver.advanced.metadata.token-map.enabled false

但是我没有可以测试的AWS Keyspaces集群,我怀疑它是否能工作。无论如何,欢迎您尝试。
有一个未完成的DSBulk功能请求提供完全禁用令牌感知的能力(内部票证IDDAT-622),但在编写时尚未分配,因此我无法提供任何关于何时将优先考虑它的期望。干杯!

相关问题