首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AWS键空间DSBulk卸载失败,“令牌元数据不存在”

AWS键空间DSBulk卸载失败,“令牌元数据不存在”
EN

Stack Overflow用户
提问于 2022-10-21 19:35:45
回答 2查看 49关注 0票数 1

尝试使用dsbulk从AWS密钥空间卸载或计数数据时出错。

错误:

代码语言:javascript
复制
Operation COUNT_20221021-192729-813222 failed: Token metadata not present.

命令行:

代码语言:javascript
复制
$ dsbulk count/unload -k my_best_storage -t book_awards -f ./dsbulk_keyspaces.conf

配置:

代码语言:javascript
复制
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
  }

}
}

散装装载机工作正常.

EN

回答 2

Stack Overflow用户

发布于 2022-10-22 11:47:41

我怀疑这里的问题是,您的集群正在使用专有的com.amazonaws.cassandra.DefaultPartitioner分区器,而大多数开源工具和驱动程序都不认识它。

DataStax散装装载机 (DSBulk)工具使用引擎盖下的Cassandra Java驱动程序连接到Cassandra集群。Java驱动程序使用分区程序来确定哪些节点拥有令牌范围。只支持下列Cassandra分配器:

  • Murmur3Partitioner
  • RandomPartitioner
  • ByteOrderedPartitioner

因为Java驱动程序不知道DefaultPartitioner,所以它没有令牌范围所有者的映射(令牌元数据),因此无法确定如何“拆分”Cassandra环来查询节点。

正如您已经知道的,这不会影响load命令,因为它只会向协调员发送写操作,并让协调员了解数据是如何分区的。但是对于需要读取的unloadcount命令,Java驱动程序无法确定使用不支持的分区程序为子范围查询选择哪些协调程序。

也许,作为一种解决办法,您可以尝试通过以下方法禁用令牌感知:

代码语言:javascript
复制
$ dsbulk count [...]
  --driver.advanced.metadata.token-map.enabled false

但是我没有一个AWS关键空间集群,我可以测试,我怀疑它是否能工作。无论如何,欢迎你尝试。

有一个优秀的DSBulk特性请求提供完全禁用令牌感知的能力(内部票证ID DAT-622),但是在编写本报告时它没有被分配,所以我无法对它何时被优先排序提供任何期望。干杯!

票数 2
EN

Stack Overflow用户

发布于 2022-11-29 02:46:26

Amazon现在支持多个分区,包括MurMr3Partitioner。请参见下面的更新您的分区程序。您还需要将Token-map.Enable设置为true。

代码语言:javascript
复制
metadata {
      token-map.enabled = true
  }

此外,如果您正在使用VPC,您将需要下列权限来确保您将看到可用的对等点。

代码语言:javascript
复制
{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Sid":"ListVPCEndpoints",
         "Effect":"Allow",
         "Action":[
            "ec2:DescribeNetworkInterfaces",
            "ec2:DescribeVpcEndpoints"
         ],
         "Resource":"*"
      }
   ]
}

我还建议增加数据加载过程的连接池大小。

代码语言:javascript
复制
advanced.connection.pool.local.size = 3

最后,我建议使用AWS胶水而不是DSBulk。DSBulk是一个单一的进程工具,不会对较大的数据负载进行扩展。此外,学习胶水将有助于管理数据生命周期的其他方面。请参阅我在如何使用AWS Glue卸载/导出数据上的示例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74158451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档