Spark Job просто останавливается при запросе полной таблицы Кассандры - PullRequest
0 голосов
/ 03 декабря 2018

У меня довольно своеобразная проблема.В механизме анализа искры DSE я часто получаю статистику, которую я сохраняю на кассандре в маленьком столе.Так как я держу таблицу урезанной, и она должна обслуживать веб-интерфейс с консолидированной информацией, я просто хочу запросить всю таблицу в спарк и отправить результаты через API.Я пробовал два метода для этого:

  1. val a = Try (sc.cassandraTable [Data] (пространство ключей, таблица) .collect ()). ToOption

  2. val query = "SELECT * FROM keyspace.table"
    val df = spark.sqlContext.sql (запрос) val list = df.collect ()

Я делаю это в программе Scala.Когда я использую метод 1, работа с искрой загадочным образом застревает, показывая этап 10 из 12 навсегда.Проверено на странице логов и искровых работ.Когда я использую второй метод, он просто сообщает мне, что такой таблицы не существует:

Неизвестное исключение: org.apache.spark.sql.AnalysisException: Таблица или представление не найдены: keyspace1. table1;строка 1 поз 15;'Project [*] + -' UnresolvedRelation keyspace1. table1

Интересно, что я протестировал оба метода в оболочке spark на кластере, и они прекрасно работают.В моей программе есть много других запросов, выполненных с использованием метода 1, и все они работают нормально, главное отличие состоит в том, что в каждом из них основной ключ секционирования всегда имеет условие, в отличие от этого запроса (верно и для этой конкретной таблицы).

Вот структура таблицы:

CREATE TABLE keyspace1.table1 (
    userid text,
    stat_type text,
    event_time bigint,
    stat_value double,
    PRIMARY KEY (userid, stat_type)) 
WITH CLUSTERING ORDER BY (stat_type ASC)

Любая надежная диагностика проблемы или обходной путь будет высоко ценится

1 Ответ

0 голосов
/ 03 декабря 2018

Когда вы делаете select * без предложения where в cassandra, вы фактически выполняете запрос полного диапазона.Это не предназначенный случай использования в Кассандре (кроме просмотра данных возможно).Просто для удовольствия, попробуйте заменить на select * from keyspace.table limit 10 и посмотрите, работает ли он, это может ...

В любом случае, мое внутреннее чувство говорит, что у вас проблемы не с искрой, а с кассандрой.Если у вас есть видимость метрик кассандры, поищите задержку запроса диапазона.

Теперь, если ваш код выше завершен - причина того, что метод 1 зависает, а метод 2 нет, состоит в том, что метод 1 содержитaction (collect), в то время как метод 2 не включает искровое действие, только вывод схемы.Если вы добавите метод 2 df.collect, вы столкнетесь с той же проблемой с Кассандрой

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...