7

Hector API 関数を使用して Cassandra データベースにアクセスすると、例外が発生します。

me.prettyprint.hector.api.exceptions.HectorException: すべてのホスト プールがダウンとマークされました。再試行の負荷がクライアントに押し出されました。

私のサーバーには Cassandra データベースがバックグラウンドで実行されています。

私は例外を読み上げましたが、事実上文書化されていません。例外は接続の問題によるものと思われます。

どうすれば修正できますか?

4

3 に答える 3

3

Hector クライアントが Cassandra に接続できない場合、このエラーが発生します。これには多くの理由が考えられ、次のことを試してみてください。

  • コード内の接続プロパティ (ip/host/port) が正しく構成されていることを確認してください。
  • cassandra-cli を使用してリモートで接続できることを確認してください。ネットワークの問題である可能性があります。
  • ここに接続コードを投稿してみてください。おそらくそこに問題があります。
于 2012-04-05T17:14:50.807 に答える
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());
        }
    });
于 2014-06-27T15:35:27.817 に答える