2017-02-13 17 views
0

Unsere Anwendung verwendet einen lang andauernden Funkenkontext (genau wie funken RPEL), um Benutzern zu ermöglichen, Aufgaben online auszuführen. Wir verwenden Funkensendungen, um dimensionale Daten zu verarbeiten. Wie in der Praxis übertragen wir die Dimensionstabellen und verwenden Dataform-APIs, um die Faktentabelle mit den anderen Dimensionstabellen zu verbinden. Eine der Dimensionstabellen ist ziemlich groß und hat etwa 100k Datensätze und 15MB Speichergröße (kyro serialisiert ist nur ein paar MB weniger).Spark Broadcasting Alternativen

Wir sehen, dass jeder Funke JOB auf dem de-normalisierten Datenrahmen bewirkt, dass alle Dimensionen immer und immer wieder übertragen werden. Die größere Tabelle dauert bei jeder Übertragung ~ 7 Sekunden. Wir versuchen, einen Weg zu finden, die Dimensionstabellen nur einmal pro Kontextlebensdauer zu übertragen. Wir haben sowohl sqlcontext als auch sparkcontext ausgestrahlt.

Gibt es noch andere Alternativen zum Funkensenden? Oder gibt es eine Möglichkeit, den Speicherbedarf des Datenrahmens zu reduzieren (Kompression/Serialisierung usw. - post-kyro noch 15MB ist :()?

+0

Wann sind die Tabellen verfügbar? Werden sie zu Beginn des Programms erstellt und für die Dauer des Programms an alle Mitarbeiter gesendet? –

+0

Das sind Hive-Tabellen unter den Abdeckungen und die Dimensionstabellen werden während des Starts des Programms übertragen, und der Benutzer wird nach der anfänglichen Belastung weiterhin mit Daten herumschlendern. – Krish

Antwort

0

Endlich konnten wir in einer späteren Version eine Notlösung finden, bis die Funke Unterstützung Pinning von RDDs oder vorzugsweise RDDs. Dies wird anscheinend nicht einmal in v2.1.0 angesprochen.

Die Lösung beruht auf RDD mapPartitions, unten eine kurze Zusammenfassung des Ansatzes ist

  • die Dimensionstabelle Datensätze als Karte Sammeln von Schlüssel-Wert-Paaren und Broadcast-Funkenkontext. Sie können möglicherweise RDD.keyBy verwenden
  • Fakturzeilen mit der RDD mapPartitions-Methode zuordnen. Für jede Tatsache Reihe mapParitions
    • sammeln die Dimension IDs in der Tatsache, Zeile und Lookup der Dimensionsdatensätze
    • eine neue Tatsache Reihe von Denormalisieren die Dimensions IDs in der Tatsache Tabelle
ergibt
0

Mögliche Alternative

Wir verwenden Iginite Funken Integration zu laden große Menge an Daten zu Beginn der Arbeit und hält auf mutieren nach Bedarf.

in Embedded-Modus können Sie beim Booten von Spark-Kontext entzünden beginnen und am Ende töten.

Sie mehr darüber hier lesen.

https://ignite.apache.org/features/igniterdd.html

+1

Können Sie bitte Ihre Antwort überprüfen? Scheint meine Frage nicht zu beantworten. – Krish