2017-09-06 3 views
0

Ich erstelle eine Anwendung, in der Streaming-Daten erhalten, die in Kafka und dann auf Funken geht. konsumieren Sie die Daten, wenden Sie eine Anmeldung an und speichern Sie dann verarbeitete Daten in der Struktur. Geschwindigkeit der Daten ist sehr schnell. Ich bekomme in 1min 50K-Platten. Es gibt ein Fenster von 1 Minute im Spark-Streaming, in dem es die Daten verarbeitet und die Daten im Stock speichert.Streaming-Datenspeicher in Bienenstock mit Funken

meine Frage ist für die Produktion prospektive Architektur ist in Ordnung? Wenn ja, wie kann ich die Streaming-Daten im Hive speichern? Was ich tue, ist, wodurch Datenrahmen von 1 min Fensterdaten und wird es in hive sparen, indem Sie

results.write.mode(org.apache.spark.sql.SaveMode.Append).insertInto("stocks") 

Ich habe die Pipeline nicht erstellt. Ist es in Ordnung oder muss ich die Architektur ändern?

Danke

Antwort

1

Ich würde es versuchen!

ABER kafka-> spark-> hive ist nicht die optimale Pipline für Ihren Anwendungsfall.

  1. Hive basiert normalerweise auf hdfs, die nicht für eine kleine Anzahl von Einfügungen/Updates/ausgewählt ist. So Ihr Plan kann in folgenden Problemen am Ende:
    • viele kleine Dateien, die
    • Fenster in schlechter Leistung endet wird zu klein, weil es zu lange

Vorschlag nimmt:

Option 1: - verwenden Sie Kafka nur als Pufferwarteschlange und entwerfen Sie Ihre Pipeline wie - kafka-> hdfs (z. B. mit Funken oder Gerinne) -> Batch-Spa zu hbase/kudu-> Batch Funken hive/Impalas

Option 1 hat keine "Realtime"

  • kafka-> Gerinne/Funke: rk/Impalas Tabelle

    Option 2 Hive Analyseoption. Es hängt davon ab, wie oft Sie die Charge Funke

    ausführen Option2 ist eine gute Wahl, die ich empfehlen würde, speichern Sie wie 30 Tage in HBase und alle älteren Daten in Bienenstock/Impala. Mit einer Ansicht können Sie neue und alte Daten für die Echtzeitanalyse hinzufügen. Kudu macht die Architektur noch einfacher.

    Das Speichern von Daten in Hive-Tabellen kann schwierig sein, wenn Sie es partitionieren und über HIVESql verwenden möchten.

    Aber basicly es wie folgt funktionieren würde:

    xml.write.format("parquet").mode("append").saveAsTable("test_ereignis_archiv") 
    

    BR

+0

Danke für Ihre Antwort. Ich speichere 1 Minute Chargendaten im Stock. Wird die Struktur an dieselbe Datei angehängt oder wird eine andere Datei erstellt? – lucy

+0

jeder Stapel endet in einer anderen Datei. Wenn eine Charge unter der Blockgröße liegt, kann sie über die Zeit hinweg unperformant werden. Oder Sie entwerfen einen anderen Stapeljob, der die einzelnen Dateien zusammenführt.Die Lösung könnte eine Partitionierung sein, was den Prozess viel einfacher macht – kf2

Verwandte Themen