Hector API和Cassandra数据库的问题:未记录的异常

时间:2012-04-03 14:01:51

标签: cassandra hector

每当我使用任何Hector API函数访问我的Cassandra数据库时,我都会遇到异常:

me.prettyprint.hector.api.exceptions.HectorException:标记为所有主机池。重试负担被推送给客户。

我的服务器确实在后台运行了Cassandra数据库。

我读到了异常并且它实际上没有记录。看来这个例外是由连接问题引起的。

我该如何解决?

3 个答案:

答案 0 :(得分:3)

如果Hector客户端无法连接到Cassandra,您将收到该错误。可以有多种原因可以尝试:

  • 确保正确配置代码(ip / host / port)中的连接属性。
  • 确保您可以远程使用cassandra-cli连接到它 - 这可能是一个网络问题。
  • 尝试在此处发布您的连接代码 - 可能存在问题。

答案 1 :(得分:0)

由于网络连接问题,我随机收到此错误,但多次重试通常会修复它。这是我用来重试Hector API函数的代码:

/** An interface where inside the execute() method I call Hector */
public interface Retriable<T> {
    T execute();
}

/**
 * Executes operation and retries N times in case of an exception
 * @param retriable
 * @param maxRetries
 * @param <T>
 * @return
 */
public static <T> T executeWithRetry(Retriable<T> retriable, int maxRetries) {
    T result;
    int retries = 0;
    long sleepSec = 1;
    // retry in case of an exception:
    while (true) {
        try {
            result = retriable.execute();
            break;
        } catch (Exception e) {
            if (retries == maxRetries) {
                LOG.error("Exception occurred. Reached max retries.", e);
                throw e;
            }
            retries++;
            LOG.error(String.format("Exception occurred. Retrying in %d seconds - #%d", sleepSec, retries), e);
            try {
                Thread.sleep(sleepSec * 1000);
                // increase sleepSec exponentially:
                sleepSec *= 2;
            } catch (InterruptedException e1) {
                e1.printStackTrace();
            }
        }
    }
    return result;
}

关于如何使用它的一个例子:

    ColumnFamilyResult<String, String> columns = executeWithRetry(new Retriable<ColumnFamilyResult<String, String>>() {
        @Override
        public ColumnFamilyResult<String, String> execute() {
            return template.queryColumns(row.getKey());
        }
    });

答案 2 :(得分:0)

我在 cassandra-unit 2.0.2.1 时遇到了同样的错误,但降级版本 2.0.2.0 解决了这个问题。这很奇怪,但我现在使用 2.0.2.0 和一些额外的 sbt 依赖项

         "com.datastax.cassandra" % "cassandra-driver-core" % "2.0.1",
         "org.cassandraunit" % "cassandra-unit" % "2.0.2.0" withSources() withJavadoc()