3

cassandra cli を使用して CF を削除しようとしました

DROP COLUMN FAMILY cfName

そして、CLI から CF をリストすると、そこにはありませんでした。ヘクター経由で既存の CF を取得しようとしたときに、

まだCF名が見えた

   KeyspaceDefinition keyspaceDefinition = newConnection().describeKeyspace(keyspaceName);
    keyspaceDefinition.getCfDefs();

CF 内のデータはありませんが、CF はまだリストされています。cassandra -cli list column family を実行すると、hector を介して CF をリストした後、削除された CF が再び表示されます。

4

1 に答える 1

4

Cassandra 1.1 でもこの問題に対処する必要がありました。基本的に、私の列ファミリーは破損しており、そのスキーマを変更する唯一の方法は、キースペースを削除/復元することでした (当時、DataStax が説明してくれました)。

DataStax とサポート契約を結んでいる場合は、続行する前に連絡することを強くお勧めします。彼らが最初に言うことは、これは Cassandra 1.1 の特定のバージョンのバグであり、アップグレードする必要があるということです。私はそれをテストしていませんが、彼らによると、インプレース アップグレードを使用すると、新しいバージョンでスキーマを変更できます。したがって、1.2 または 2.0 にアップグレードすることでこれを修正できる場合があります。

私の場合 (本番、エンタープライズ環境)、その場でのアップグレードはオプションではありませんでした。これを修正するには、基本的にキースペース全体を削除し、それ (および列ファミリー) を再作成して、スナップショットから回復する必要がありました。ここにある指示に大まかに従いました:

  • 各ノードでキースペースのスナップショットを作成します。スナップショット ファイルは [keyspaceName]/snapshots dir に保存する必要がありますが、念のため Cassandra 以外の別の場所にコピーしました。
  • キースペースをドロップします。
  • すべてのノードを停止します。
  • 各ノードで、キースペース ディレクトリの .db ファイルを削除します (ただし、スナップショット ディレクトリは削除しません)。
  • ファイルをスナップショット ディレクトリからキースペース ディレクトリにコピーして戻します。
  • 1 つのノードを再起動する
  • そのノードからcassandra-cliキースペースを再作成します。
  • データがあることを確認します。
  • 残りのノードを再起動します。
于 2014-04-10T16:30:54.647 に答える