Невозможно найти количество (*) согласованности бросков таблицы кассандры LOCAL_ONE (требуется 1 ответ, но ответила только 0 реплика)

У меня есть сценарий для записи данных в таблицу cassandra с помощью spark -sql. У меня есть кластер cassandra с 3 узлами. Я создал таблицу с коэффициентом репликации 2, как показано ниже:

CREATE TABLE keyspaceRf2. c_columnar (
    id int,
    company_id int,
    dd date,
    c_code text,
     year int,
     quarter int,
        etc ....etc...
    PRIMARY KEY (( id,  year,  quarter), dd, c_code, company_id )
) WITH CLUSTERING ORDER BY ( dd DESC, c_code DESC, company_id DESC);

Я пытаюсь вставить данные в keyspaceRf2. Таблица c_columnar, использующая искровую работу на искровом кластере. Данные вставляются правильно. Но чтобы проверить количество записей, вставленных в таблицу, я выполняю запрос на подсчет, как показано ниже.

 val countDf = loadFromCassandra(c_reader,"keyspaceRf2", " c_columnar");

println ( " count = " + countDf.count()


def loadFromCassandra( c_reader: DataFrameReader , keyspace: String , col_Name:String): DataFrame = {

        c_reader
        .options(Map( "table" -> col_Name, "keyspace" -> keyspace ))
        .load()
  }

Когда приведенный выше код выполняется, он выдает ошибку, как показано ниже.

ОШИБКА :

TaskSetManager:66 - Lost task 33.0 in stage 18.0 : java.io.IOException: Exception during execution of SELECT count(*) FROM "keyspaceRf2"." c_columnar" WHERE token("id", " year", " quarter") > ? AND token("id", " year", " quarter") <= ?   ALLOW FILTERING: Cassandra failure during read query at consistency LOCAL_ONE (1 responses were required but only 0 replica responded, 1 failed)
        at com.datastax.spark.connector.rdd.CassandraTableScanRDD.com$datastax$spark$connector$rdd$CassandraTableScanRDD$$fetchTokenRange(CassandraTableScanRDD.scala:350)
        at com.datastax.spark.connector.rdd.CassandraTableScanRDD$$anonfun$17.apply(CassandraTableScanRDD.scala:367)
        at com.datastax.spark.connector.rdd.CassandraTableScanRDD$$anonfun$17.apply(CassandraTableScanRDD.scala:367)
        at scala.collection.Iterator$$anon$12.nextCur(Iterator.scala:434)
        at scala.collection.Iterator$$anon$12.hasNext(Iterator.scala:440)
        at com.datastax.spark.connector.util.CountingIterator.hasNext(CountingIterator.scala:12)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Caused by: com.datastax.driver.core.exceptions.ReadFailureException: Cassandra failure during read query at consistency LOCAL_ONE (1 responses were required but only 0 replica responded, 1 failed)
        at com.datastax.driver.core.exceptions.ReadFailureException.copy(ReadFailureException.java:85)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at com.datastax.spark.connector.cql.SessionProxy.invoke(SessionProxy.scala:37)
        at com.sun.proxy.$Proxy23.execute(Unknown Source)
        at com.datastax.spark.connector.cql.DefaultScanner.scan(Scanner.scala:34)
        at com.datastax.spark.connector.rdd.CassandraTableScanRDD.com$datastax$spark$connector$rdd$CassandraTableScanRDD$$fetchTokenRange(CassandraTableScanRDD.scala:342)
        ... 15 more

Что я здесь делаю не так?


person BdEngineer    schedule 10.01.2019    source источник


Ответы (1)


Пожалуйста, проверьте дважды:

  • Параметры репликации пространства ключей - коэффициент репликации устанавливается для пространств ключей, а не таблиц. Убедитесь, что вы используете правильную стратегию репликации для топологии кластера. Использование значения по умолчанию SimpleStrategy в кластере с несколькими контроллерами домена почти всегда будет неправильным. Другая ошибка заключается в использовании LOCAL_ONE вместо ONE CL, когда на локальном контроллере домена нет ни одной реплики. Отсутствие реплик в локальном контроллере домена может быть вызвано забыванием или неправильным написанием имени контроллера домена в NetworkTopologyStrategy параметрах или использованием SimpleStrategy, который может решить сохранить все реплики для определенного диапазона в другом контроллере домена.
  • Состояние узлов в кластере. Запрос счетчика может потребовать доступа ко многим узлам. Проверьте состояние вашего кластера. Убедитесь, что все узлы находятся в состоянии UN (работает, нормально).
  • Узел, к которому вы подключаетесь, находится в правильном DC - с кластерами с несколькими DC и уровнями согласованности LOCAL_ * чрезвычайно важно подключиться к правильному DC.
person Piotr Kołaczkowski    schedule 11.01.2019
comment
спасибо за быстрый ответ, 1) Да, коэффициент репликации установлен в пространствах ключей, а не в таблицах. 2) Этот кластер, который я использую, находится на одном контроллере домена. 3) Keyspace следует за SimpleStrategy, как показано ниже. CREATE KEYSPACE keyspaceRf2 WITH Durable_writes = true AND replication = {'class': 'SimpleStrategy', 'replication_factor': 2}; 4) Проверил состояние узлов в CL, все они работают. 5) У меня только один DC и все узлы / соединения соединяются одинаково. - person BdEngineer; 11.01.2019
comment
Довольно интересно, что я могу запрашивать данные с помощью запроса выбора, но не могу использовать запрос count (*). - person BdEngineer; 11.01.2019
comment
@ Piotr Kołaczkowski, вы имеете в виду DEBUG уровня журнала? сторона кассандры Я не знаю, как это сделать. - person BdEngineer; 14.01.2019
comment
docs.datastax.com/en/cql/3.3/cql/ cql_reference / - person Piotr Kołaczkowski; 15.01.2019