2016-04-13 20 views
3

Ich arbeite an einer Anwendung für "Echtzeit-Rendering von Big Data (Spatial Data)". Mit Hilfe von Spark Streaming + Spark SQL + WebSocket kann ich vordefinierte Abfragen im Dashboard rendern. Aber ich möchte Daten mit interaktiven Abfragen und Ad-hoc-Abfragen abrufen.Cassandra + Spark für Echtzeitanalyse

Zu diesem Zweck versuche ich es mit "Spark Streaming + Cassandra" zu implementieren. Diese Abfragen erforderten Aggregation und Filterung großer Datenmengen.

: Ich bin zu Cassandra und Spark, also bin ich verwirrt über unten approachs, die besser sein wird \ schneller:

  1. Spark-Streaming -> Filterung (Funke) -> Speichern unter Cassandra -> Interaktive Abfrage -> UI (Dashboard)
  2. Spark-Streaming -> Filterung (Funke) -> Cassandra speichern -> Spark-SQL -> Interaktive Abfrage -> UI (Dashboard)

Will Cassandra schnell genug sein Ergebnis zu geben, in Echtzeit ? Oder sollte ich eine RDD von Cassandra erstellen, um interaktive Abfragen darüber durchzuführen.

Einer der Abfrage ist:

"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" 

Alle Eingaben und Anregungen sind wir dankbar. Danke,

Dank @doanduyhai für den Vorschlag SASI sekundären Index, machte es wirklich einen großen Unterschied.

+0

Die Leistung hängt sehr stark vom Design Ihrer Tabellen ab und davon, wie viele Zeilen Sie lesen müssen, um eine einzelne Anfrage zu beantworten. Wenn Sie den Pfad für das UI-Rendering optimieren, wäre es sinnvoll, die Daten in Cassandra in einer Form zu schreiben, die Ihnen die benötigten Informationen mit minimalen Lesevorgängen liefert. Ich glaube nicht, dass es eine allgemeine Antwort gibt, ohne auf die spezifischen Anforderungen der App einzugehen. – maasg

Antwort

2

Wird Cassandra schnell genug sein, um Ergebnisse in Echtzeit zu liefern? Oder sollte ich eine RDD von Cassandra erstellen, um interaktive Abfragen darüber durchzuführen.

Es hängt davon ab, wie viel Filterung Sie tun up-front und die Anzahl der Maschinen im Cluster. Wenn Ihre Cassandra-Tabelle 1 TB Daten hat und Sie Abfragen 100 GB Daten im Speicher abholen, unter der Annahme eines Clusters von 10 Rechnern, bedeutet das Laden von 1 GB im Speicher, aber die Abfrage wird niemals unter der Minute liegen.

Jetzt, wenn Sie genug filtern, um nur 100 MB insgesamt aus der Cassandra-Tabelle zu holen, bedeutet es 10 MB/Maschine und es ist möglich, Latenz in der Größenordnung von Sekunden zu haben.

Wie Daten früh in Cassandra filtern?

  1. Verwenden Sie den neuen SASI secondary index (Warten auf Cassandra 3.5 veröffentlicht in dieser Woche, weil zwei kritische Fehler entdeckt worden)
  2. Verwenden DSE Search
  3. Verwenden Stratio Lucene secondary index
+0

Dank @doanduyhai für schnelle Antwort. Meine Frage betrifft Cassandra vs Spark. In beiden Szenarien ist die Clusterkonfiguration identisch. Ich bin mir also nicht sicher, ob ich Daten von Cassandra nach Spark für Aggregation \ query zurückladen soll, oder Cassandra wird ausreichen? – Ajeet

+1

Cassandra allein oder Cassandra + Spark ist nicht viel Unterschied ** IF ** Sie nicht früh filtern. Die Verwendung von Spark zum Filtern von Daten im Speicher ist nicht schneller, da Sie Cassandra trotzdem vollständig scannen müssen, um die Daten zu erhalten ** out ** – doanduyhai

+0

Ich warte auf Spark 2.0 ... :) Das kommt mit "Structured Stream", und wenn ich es richtig verstehe, wird Cassandra für diesen Anwendungsfall nicht benötigt. Es bietet die Möglichkeit, interaktive Abfragen direkt im Stream durchzuführen. http://www.datanami.com/2016/02/25/spark-2-0-to-introduce-new-sustructured-streaming-engine/ – Ajeet

1

früh mit Solr zu filtern, welche ist besser \ schneller

Wie immer hängt es davon ab, welche Art von Abfragen Sie ausführen möchten. Cassandra legt einige Einschränkungen fest, die darauf basieren, wie Sie Ihre Tabellen einrichten. Zum Beispiel können Sie keine nicht indizierten Spalten in where Klauseln verwenden. Wenn Sie Spark verwenden, um die Daten zu laden, können Sie alle Abfragen durchführen, die Spark erlaubt.

Wenn Sie SparkSQL/DataFrames verwenden und eine Abfrage ausführen, die Cassandra does zulassen, wird Spark es herunterdrücken und Sie erhalten Leistung, die der Verwendung von Cassandra direkt ähnelt. Andernfalls muss es alle Daten von Cassandra laden und dann die von Ihnen angegebenen Filter anwenden, was offensichtlich weniger effizient ist.

Insgesamt könnten Sie Spark verwenden, aber es wird Benutzern ermöglichen, sehr langsame Abfragen auszuführen. Sie sollten sich also bewusst sein, wie Sie die Daten in Cassandra strukturieren, um die Wahrscheinlichkeit zu erhöhen, dass der Prädikat-Pushdown für die rohe Cassandra-Performance verwendet wird.

+0

Danke @sgvd, Es wird hilfreich sein. – Ajeet

Verwandte Themen