2016-05-09 23 views
9

Cassandraテーブルからデータを読み込もうとしましたが、エラーが発生しました。私はデフォルトの設定で、単一ノードのインストールをしています。これは私が作っているクエリです:いくつかのcomponent_id値でcassandraでの読み込みエラー

CREATE TABLE component_readings (
    park_id int, 
    component_id int, 
    date timestamp, 
    reading_1 decimal, 
    reading_2 decimal, 
    ... 
    PRIMARY KEY ((park_id), component_id, date) 
); 

、それが動作し、他の値で、それは失敗します。

SELECT component_id, 
     reading_1, 
     reading_2, 
     reading_3, 
     date 
    FROM component_readings 
    WHERE park_id=2 
     AND component_id IN (479) 
     AND date >= '2016-04-09+0000' 
     AND date <= '2016-05-08+0000'; 

component_readingsなしクラスタリング条件で、単純なテーブルです。これは私が取得していますエラーです:

cassandra.ReadFailure: code=1300 [Replica(s) failed to execute read] 
message="Operation failed - received 0 responses and 1 failures" 
info={'required_responses': 1, 'received_responses': 0, 'failures': 1, 
'consistency': 'LOCAL_ONE'} 

そしてカサンドラのsystem.logには、このエラーを示しています

ERROR [SharedPool-Worker-1] 2016-05-09 15:33:58,872 StorageProxy.java:1818 - 
Scanned over 100001 tombstones during query 'SELECT * FROM xrem.component_readings 
WHERE park_id, component_id = 2, 479 AND date >= 2016-04-09 02:00+0200 AND date <= 
2016-05-08 02:00+0200 LIMIT 5000' (last scanned row partion key was ((2, 479), 
2016-05-04 17:30+0200)); query aborted 

奇妙なことは、外部からの問い合わせを行う場合にのみ、私はエラーを取得するということですプログラム(python cassandra-connector経由で)。私がcqlshシェルで直接作成すると、完全に動作します。

私のインストールはcassandra 2.2でしたが、私は3.5にアップグレードしましたが、同じエラーが発生します。

+0

リクエストで一貫性レベルを定足数に設定するとどうなりますか? – Whitefret

+0

同じ問題: 'cassandra.ReadFailure:code = 1300 [レプリカが読み込みを実行できませんでした] message ="操作が失敗しました - 0応答と1失敗を受け取りました "info = {'received_responses':0、 'failure' 'required_responses':1、 'consistency': 'QUORUM'} ' –

+0

あなたは1つのレプリカしか持っていませんか? – Whitefret

答えて

7

tombstone_failure_thresholdを超えています。デフォルトは100'000です。あなたはどちらか

  • はcassandra.yamlの値または
  • は後者alterあなたのテーブルを行うと、0にgc_grace_secondsを設定するには

あなたの墓石をきれいに増やすことができます

ALTER TABLE component_readings WITH GC_GRACE_SECONDS = 0; 

次に、nodetoolを使用して圧縮をトリガーします。これにより、すべての墓石が洗い流されます。

1ノードクラスタの特定のシナリオでは、GC_GRACE_SECONDSをゼロのままにすることができます。しかし、複数のノードを使用する場合は、元に戻してください。

+1

しかし、問題が墓石である場合、cqlshから起動して外部プログラムから失敗した場合、なぜクエリが機能するのですか?それは私には意味をなさない(BTWは、解決策は動作しますが、私はその理由を理解していません)。 –

+1

@CésarGarcíaTapia、はい、私はそれが奇妙であることに同意します。現在のところ、3.xブランチに影響を与える矛盾した墓石のカウント/挙動などについては、いくつかのチケットが開かれています。たぶんあなたはそのようなものの影響を受けますか?あなたはバグチケットを発行することができます。 – Ralf

関連する問題