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

У меня есть сценарий для записи данных в таблицу cassandra с помощью spark -sql. У меня есть кластер кассандры с 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 с использованием spark-job на spark-кластере. Данные вставляются правильно. Но чтобы проверить количество записей, вставленных в таблицу, я выполняю запрос на подсчет, как показано ниже

 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

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

1 Ответ

0 голосов
/ 11 января 2019

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

  • Параметры репликации пространства ключей - Коэффициент репликации устанавливается для пространств ключей, а не для таблиц. Убедитесь, что вы используете правильную стратегию репликации для своей кластерной топологии. Использование значения по умолчанию SimpleStrategy в кластере с несколькими DC будет почти всегда неправильно. Другая ошибка заключается в использовании LOCAL_ONE вместо ONE CL, когда в локальном DC нет ни одной реплики. Никакие реплики в локальном DC не могут быть вызваны забыванием или неправильным написанием имени DC в опциях NetworkTopologyStrategy или использованием SimpleStrategy, который может решить сохранить все реплики для определенного диапазона в другом DC.
  • Состояние узлов в кластере - Запрос на подсчет может потребоваться для доступа ко многим узлам. Проверьте состояние вашего кластера. Убедитесь, что все узлы находятся в состоянии UN (вверх, нормально).
  • Узел, к которому вы подключаетесь, находится в нужном DC - С кластерами с несколькими DC и уровнями согласованности LOCAL_ * чрезвычайно важно подключиться к правильному DC.
...