【问题标题】:Using Cassandra sstableloader from one AWS instance to another, fails使用 Cassandra sstableloader 从一个 AWS 实例到另一个实例失败
【发布时间】:2017-07-10 07:53:30
【问题描述】:

一个 AWS 实例已安装并运行 Cassandra (2.1.16)。另一个 AWS 实例没有安装 Cassandra,但正在使用 apache-cassandra-2.1.16 二进制文件中的 sstableloader 程序。 sstableloader服务器上使用的cassandra.yaml有如下设置:

cluster_name: '测试集群' 听地址: 存储端口:7000 rpc_address:0.0.0.0 rpc_port: 9160

两台服务器都使用同一个 AWS 安全组,该安全组向该组开放了以下端口:

7000, 9160

当我像这样执行 ssltableloader 时:

./sstableloader -d <CassandraNode> -f ../../cassandra/cassandra.yaml -v ../../cassandra/<Keyspace>/<CFName>/

我收到此错误:

Established connection to initial hosts
Opening sstables and calculating sections to stream
Streaming relevant part of ../../cassandra/<Keyspace>/<CFName>/<Keyspace-CFName>-ka-6952-Data.db ../../cassandra/<Keyspace>/<CFName>/<Keyspace-CFName>-ka-6951-Data.db to [/public ip of Cassandra node]
ERROR 20:06:33 [Stream #c7915b50-f7a7-11e6-bd84-8dd23712cb6e] Streaming error occurred
java.net.ConnectException: Connection timed out
at sun.nio.ch.Net.connect0(Native Method) ~[na:1.8.0_111]
at sun.nio.ch.Net.connect(Net.java:454) ~[na:1.8.0_111]
at sun.nio.ch.Net.connect(Net.java:446) ~[na:1.8.0_111]
at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:648) ~[na:1.8.0_111]
at java.nio.channels.SocketChannel.open(SocketChannel.java:189) ~[na:1.8.0_111]
at org.apache.cassandra.tools.BulkLoadConnectionFactory.createConnection(BulkLoadConnectionFactory.java:62) ~[apache-cassandra-2.1.16.jar:2.1.16]
at org.apache.cassandra.streaming.StreamSession.createConnection(StreamSession.java:240) ~[apache-cassandra-2.1.16.jar:2.1.16]
at org.apache.cassandra.streaming.ConnectionHandler.initiate(ConnectionHandler.java:80) ~[apache-cassandra-2.1.16.jar:2.1.16]
at org.apache.cassandra.streaming.StreamSession.start(StreamSession.java:227) ~[apache-cassandra-2.1.16.jar:2.1.16]
at org.apache.cassandra.streaming.StreamCoordinator$StreamSessionConnector.run(StreamCoordinator.java:208) [apache-cassandra-2.1.16.jar:2.1.16]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_111]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_111]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_111]
progress: total: 100% 0  MB/s(avg: 0 MB/s)WARN  20:06:33 [Stream #c7915b50-f7a7-11e6-bd84-8dd23712cb6e] Stream failed
Streaming to the following hosts failed:
[/<public ip of Cassandra node>]
java.util.concurrent.ExecutionException: org.apache.cassandra.streaming.StreamException: Stream failed
at com.google.common.util.concurrent.AbstractFuture$Sync.getValue(AbstractFuture.java:299)
at com.google.common.util.concurrent.AbstractFuture$Sync.get(AbstractFuture.java:286)
at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:116)
at org.apache.cassandra.tools.BulkLoader.main(BulkLoader.java:125)
Caused by: org.apache.cassandra.streaming.StreamException: Stream failed
at org.apache.cassandra.streaming.management.StreamEventJMXNotifier.onFailure(StreamEventJMXNotifier.java:85)
at com.google.common.util.concurrent.Futures$4.run(Futures.java:1172)
at com.google.common.util.concurrent.MoreExecutors$SameThreadExecutorService.execute(MoreExecutors.java:297)
at com.google.common.util.concurrent.ExecutionList.executeListener(ExecutionList.java:156)
at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:145)
at com.google.common.util.concurrent.AbstractFuture.setException(AbstractFuture.java:202)
at org.apache.cassandra.streaming.StreamResultFuture.maybeComplete(StreamResultFuture.java:209)
at org.apache.cassandra.streaming.StreamResultFuture.handleSessionComplete(StreamResultFuture.java:185)
at org.apache.cassandra.streaming.StreamSession.closeSession(StreamSession.java:413)
at org.apache.cassandra.streaming.StreamSession.onError(StreamSession.java:518)
at org.apache.cassandra.streaming.StreamSession.start(StreamSession.java:233)
at org.apache.cassandra.streaming.StreamCoordinator$StreamSessionConnector.run(StreamCoordinator.java:208)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

我已成功使用本地电脑上的 sstableloader 将数据加载到 AWS 上的 Cassandra 节点。我失败的地方是当我尝试从一个 ASW 实例到另一个实例的 sstableloader 时。

为了全面披露,我也尝试过在两个实例之间打开所有端口的情况下,它会导致同样的失败。

在尝试执行 sstableloading 的实例上是否缺少配置步骤?

【问题讨论】:

    标签: amazon-web-services amazon-ec2 cassandra


    【解决方案1】:

    Cassandra 节点使用其公共 IP 作为其广播地址。当我从我的盒子里使用 sstableloader 时,这很有效。尝试从另一个 AWS 实例使用 sstableloader 时失败,因为该服务器无法通过其公共 IP 找到 Cassandra 节点。我能够通过使用 Cassandra 节点的私有 IP 作为广播地址来使其工作。

    【讨论】:

      猜你喜欢
      • 2015-08-27
      • 1970-01-01
      • 2018-04-18
      • 1970-01-01
      • 2016-06-06
      • 1970-01-01
      • 2013-04-02
      • 1970-01-01
      • 2012-03-01
      相关资源
      最近更新 更多