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 :()?
Wann sind die Tabellen verfügbar? Werden sie zu Beginn des Programms erstellt und für die Dauer des Programms an alle Mitarbeiter gesendet? –
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