2014-09-02 12 views
6

Ich bin auf der Suche nach einer Funktionalität ähnlich dem verteilten Cache von Hadoop in Spark. Ich brauche eine relativ kleine Datendatei (mit einigen Indexwerten), um in allen Knoten vorhanden zu sein, um einige Berechnungen durchzuführen. Gibt es einen Ansatz, der dies in Spark ermöglicht?Hadoop DistributedCache-Funktionalität in Spark

Meine bisherige Problemumgehung besteht darin, die Indexdatei als normale Verarbeitung zu verteilen und zu reduzieren, was in meiner Anwendung ungefähr 10 Sekunden dauert. Danach wird anhalten ich die Datei, um sie als Broadcast-Variable, die angibt, wie folgt:

JavaRDD<String> indexFile = ctx.textFile("s3n://mybucket/input/indexFile.txt",1); 
ArrayList<String> localIndex = (ArrayList<String>) indexFile.collect();  

final Broadcast<ArrayList<String>> globalIndex = ctx.broadcast(indexVar); 

Das macht das Programm in der Lage zu verstehen, was die Variable Globalindex enthält. Bis jetzt ist es ein Patch, der für mich in Ordnung sein könnte, aber ich halte es für nicht die beste Lösung. Wäre es mit einem erheblich größeren Datensatz oder einer großen Anzahl von Variablen noch effektiv?

Hinweis: Ich verwende Spark 1.0.0, das auf einem Standalone-Cluster läuft, der sich auf mehreren EC2-Instanzen befindet.

+0

Können Sie die Datei nicht zwischenspeichern? Grundsätzlich als RDD speichern. Wird skalierbar sein. – Venkat

+0

Ich denke, das Übertragen der Variable ist dasselbe wie das Zwischenspeichern. Meine Frage richtet sich meist darauf, ob eine direkte Caching-Methode existiert oder nicht, ohne sie vorher "verarbeiten" zu müssen. –

+0

Also ich persönlich denke, eine Broadcast-Var ist besser als die Distcache in Bezug auf die Benutzerfreundlichkeit, aber gibt es einen Grund, Sie könnten einfach Hadoop verteilten Cache verwenden – aaronman

Antwort

5

Bitte sehen Sie sich SparkContext.addFile() Methode an. Raten Sie, das ist, was Sie gesucht haben.

0

Solange wir Broadcast-Variablen verwenden, sollte es auch mit größeren Datenmengen wirksam sein.

von der Funke Dokumentation „Broadcast Variablen ermöglichen es dem Programmierer eher auf jedem Rechner einen nur lesbaren Variable gecached zu halten, als eine Kopie davon mit Aufgaben Versand. Sie benutzt werden, beispielsweise können jeden geben Verknüpfen Sie eine Kopie eines großen Eingabe-Datasets auf effiziente Weise. "