2016-04-13 3 views
3

Я работаю над приложением для «рендеринга больших данных (пространственных данных)». С помощью Spark Streaming + Spark SQL + WebSocket я могу отображать предварительно определенные запросы на панели управления. Но я хочу получать данные с интерактивными запросами и специальными запросами.Cassandra + Spark для анализа в реальном времени

Для этого я пытаюсь реализовать его с помощью «Spark Streaming + Cassandra». Эти запросы требовали агрегации и фильтрации на огромном количестве данных.

Я новичок в Кассандре и Спарк, поэтому я путаюсь о ниже approachs, который будет лучше \ быстрее:

  1. Спарк Streaming -> Фильтрация (Спарк) -> Сохранить в Кассандре -> Интерактивный запрос -> UI (Dashboard)
  2. Спарк Streaming -> Фильтрация (Спарк) -> Сохранить в Кассандре -> Спарк SQL -> Интерактивный запрос -> UI (Dashboard)

Will Cassandra быть достаточно быстро, чтобы дать результат в настоящее время ? Или я должен создать RDD из Cassandra для выполнения интерактивных запросов по нему.

Один из запроса:

"SELECT * FROM PERFORMANCE.GEONAMES A INNER JOIN 
(SELECT max(GEONAMEID) AS MAPINFO_ID FROM PERFORMANCE.GEONAMES 
where longitude between %LL_LONG% and %UR_LONG% 
and latitude between %LL_LAT% and %UR_LAT% 
and %WHERE_CLAUSE% GROUP BY LEFT(QUADKEY, %QUAD_TREE_LEVEL%) ) 
AS B ON A.GEONAMEID = B.MAPINFO_ID" 

Все входы или предложения будут оценены. Спасибо,

Спасибо @doanduyhai за предложение вторичного индекса SASI, это действительно сыграло огромную роль.

+0

Производительность будет очень сильно зависеть от дизайна ваших таблиц и количества строк, которые нужно прочитать для ответа на один запрос. Если вы оптимизируете путь для визуализации пользовательского интерфейса, имеет смысл написать данные в Кассандре в форме, которая даст вам необходимую информацию с минимальными показаниями. Я не думаю, что есть общий ответ, не глядя на конкретные требования приложения. – maasg

ответ

2

Будет ли Cassandra быть достаточно быстрым, чтобы дать результат в реальном времени? Или я должен создать RDD из Cassandra для выполнения интерактивных запросов по нему.

Это зависит от того, насколько фильтрации вы делаете авансовые и количество машин в кластере. Если в вашей таблице Cassandra есть 1 Тб данных, и вы запрашиваете выборку 100 Гб данных в памяти, предполагая, что кластер из 10 машин, это означает, что загрузка 1 ГБ в памяти управляема, но запрос никогда не будет подминутным.

Теперь, если вы фильтруете достаточно, чтобы получить всего 100 Мб всего из таблицы Кассандры, это означает, что 10 Мб/машина, и возможно иметь латентность порядка секунд.

Как фильтровать данные в начале Кассандры?

  1. Используйте новый SASI secondary index (ждать Cassandra 3.5 выпущен на этой неделе, потому что 2 критические ошибки были обнаружены)
  2. Использование DSE Search для фильтрации рано с Solr
  3. Использование Stratio Lucene secondary index
+0

Спасибо @doanduyhai за быстрый ответ. Мой вопрос касается Кассандры против Искры. В обоих сценариях конфигурация кластера будет такой же. Поэтому я не уверен, что я должен загружать данные из Cassandra в Spark для агрегирования \ запроса, или Cassandra будет достаточно? – Ajeet

+1

Кассандра одна или Кассандра + Искра не сильно отличается ** ЕСЛИ ** вы не фильтруете раньше. Использование Spark для фильтрации данных в памяти происходит не быстрее, потому что вам нужно полностью сканировать Cassandra так или иначе, чтобы получить данные ** out ** – doanduyhai

+0

Я жду Spark 2.0 ... :) Это идет с «Структурированным потоком», и если я это правильно понимаю, то для этого варианта использования Cassandra не потребуется. Он будет обеспечивать возможность интерактивных запросов непосредственно в потоке. http://www.datanami.com/2016/02/25/spark-2-0-to-introduce-new-structured-streaming-engine/ – Ajeet

1

который будет лучше \ быстрее

Как всегда, это зависит от того, какие запросы вы хотите запускать. Кассандра налагает некоторые ограничения, основанные на том, как вы настраиваете свои таблицы; например, вы не можете использовать неиндексированные столбцы в статьях where. Если вы используете Spark inbetween для загрузки данных, вы можете выполнять любые запросы, которые позволяет Spark.

Если вы используете SparkSQL/DataFrames и выполняете запрос, который разрешает Cassandra does, Spark сбрасывает его, и вы получаете производительность, аналогичную использованию Cassandra напрямую. В противном случае ему придется загрузить все данные из Cassandra, а затем применить все фильтры, которые вы указали, что, очевидно, намного менее эффективно.

Таким образом, вы можете использовать Spark, но это позволит пользователям запускать очень медленные запросы. Таким образом, вы все равно должны знать, как вы структурируете данные в Cassandra, чтобы увеличить вероятность предиката нажимать на производительность Cassandra.

+0

Спасибо @sgvd, это будет полезно. – Ajeet

Смежные вопросы