cassandra - Cassandra sstableloader 加载表快照“无法连接”失败
问题描述
使用 sstableloader 从不同集群上的键空间快照加载新表,出现错误
重建步骤:
- 创建此表
- cp 快照文件到临时目录 temp_dir。
- sstableloader 加载(错误输出)
有人知道问题是什么吗?我该如何解决?谢谢你。
细节如:
sstableloader --nodes vm_cdb01 -u dba -p xxx /xxx/temp_dir/snapshot_directory
WARN 21:21:42,124 Small cdc volume detected at /cdc_raw; setting cdc_total_space_in_mb to 1773. You can override this in cassandra.yaml
WARN 21:21:42,302 Only 45.202GiB free across all data volumes. Consider adding more capacity to your cluster or removing obsolete snapshots
All host(s) tried for query failed (tried: vm-cdb01/10.28.60.76:9042 (com.datastax.driver.core.exceptions.TransportException: [vm-cdb01/xx.xxx.76] Cannot connect))
com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: vm-cdb01/xx.xxx.76:9042 (com.datastax.driver.core.exceptions.TransportException: [vm-cdb01/xx.xxx.76] Cannot connect))
at com.datastax.driver.core.ControlConnection.reconnectInternal(ControlConnection.java:233)
at com.datastax.driver.core.ControlConnection.connect(ControlConnection.java:79)
at com.datastax.driver.core.Cluster$Manager.init(Cluster.java:1424)
at com.datastax.driver.core.Cluster.init(Cluster.java:163)
at com.datastax.driver.core.Cluster.connectAsync(Cluster.java:334)
at com.datastax.driver.core.Cluster.connectAsync(Cluster.java:309)
at com.datastax.driver.core.Cluster.connect(Cluster.java:251)
at org.apache.cassandra.utils.NativeSSTableLoaderClient.init(NativeSSTableLoaderClient.java:73)
at org.apache.cassandra.io.sstable.SSTableLoader.stream(SSTableLoader.java:159)
at org.apache.cassandra.tools.BulkLoader.load(BulkLoader.java:80)
at org.apache.cassandra.tools.BulkLoader.main(BulkLoader.java:48)
Exception in thread "main" org.apache.cassandra.tools.BulkLoadException: com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: vm-cdb01/xx.xxx.76:9042 (com.datastax.driver.core.exceptions.TransportException: [vm-cdb01/xx.xxx.76] Cannot connect))
at org.apache.cassandra.tools.BulkLoader.load(BulkLoader.java:93)
at org.apache.cassandra.tools.BulkLoader.main(BulkLoader.java:48)
Caused by: com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: vm-cdb01/xx.xxx.76:9042 (com.datastax.driver.core.exceptions.TransportException: [vm-cdb01/xx.xxx.76] Cannot connect))
at com.datastax.driver.core.ControlConnection.reconnectInternal(ControlConnection.java:233)
at com.datastax.driver.core.ControlConnection.connect(ControlConnection.java:79)
at com.datastax.driver.core.Cluster$Manager.init(Cluster.java:1424)
at com.datastax.driver.core.Cluster.init(Cluster.java:163)
at com.datastax.driver.core.Cluster.connectAsync(Cluster.java:334)
at com.datastax.driver.core.Cluster.connectAsync(Cluster.java:309)
at com.datastax.driver.core.Cluster.connect(Cluster.java:251)
at org.apache.cassandra.utils.NativeSSTableLoaderClient.init(NativeSSTableLoaderClient.java:73)
at org.apache.cassandra.io.sstable.SSTableLoader.stream(SSTableLoader.java:159)
at org.apache.cassandra.tools.BulkLoader.load(BulkLoader.java:80)
... 1 more
解决方案
对我来说,任何人都认为 sstableloader 很容易运行,这似乎很荒谬。它做出了程序切换应涵盖的假设。自从我运行 sstableloader 以来已经有一段时间了,但是由于它的工作原理,我最终创建了一个 shell 脚本来完成这项工作 - 特别是如果你想将多个表从多个键空间复制到不同的位置。概括地说,这是我的脚本运行命令的方式:
sstableloader -u ${targetUser} -pw ${cassandraCopyTargetPassword} -d ${targetHost}pwd
你提供的一切都是为了目标。如果您在与默认端口不同的端口上运行,则需要指定“-p ####”。我注意到你的“-p”(端口)值有一些“关闭” - 比如目录路径。
现在至于它实际加载的内容,我认为这就是整个过程崩溃的地方——有人应该解决它,因为假设是荒谬的(再次,而不是开关)。
sstableloader 查找您所在的目录 - 它必须与您的目标表将驻留的键空间和表直接匹配。
例如,在源上,假设我想从 /opt/cassandra/data/sourceKeyspace/sourceTable 目录中复制所有 sstable,但这些 sstable 将映射到 TARGET 系统上的 targetKeyspace/targetTable。我需要在源主机上的某处创建与 targetKeyspace/targetTable 匹配的目录。例如,我可以将该目录创建为 /tmp/targetKeyspace/targetTable(它不必在 /tmp 中,但它与任何地方一样好)。然后,我会将目录更改为该位置,创建从该目录到 /opt/cassandra/data/sourceKeyspace/sourceTable 中所有 sstables 的软链接,并运行 sstableloader 提供上面创建的目标目录的名称(或 pwd,如果你坐在目标目录中,就像我对我的脚本所做的那样)。至少可以说令人困惑。
再一次,我认为这是一个关于如何使其发挥作用的好主意的想法超出了我的范围。无论如何,希望这可以帮助您使其正常工作。
推荐阅读
- python - 重塑时出错
- java - 从Java中的多个文件夹中读取多个txt文件
- checkbox - RPA Express (Workfusion) Web 元素设置复选框
- angular6 - 是否可以创建一个自定义表单控件验证函数,该函数具有响应式表单的依赖项
- python - Keras中的指数权重张量
- python - 打包一个使用多个python版本的项目
- java - 创建一个类的数组,将数组中的单个值作为参数传递
- bash - 如何缩短读取千行文件的时间处理 - bash脚本?
- c - 客户端关闭后接受新连接(C,winsock2)
- javascript - Cordova 运行后缺少一些 JS 代码