2014-09-02 7 views
6

Sto cercando una funzionalità simile alla cache distribuita di Hadoop in Spark. Ho bisogno di un file di dati relativamente piccolo (con alcuni valori di indice) per essere presente in tutti i nodi per fare alcuni calcoli. C'è qualche approccio che lo rende possibile in Spark?Funzionalità Hadoop DistributedCache in Spark

La mia soluzione finora consiste nella distribuzione e nella riduzione del file di indice come una normale elaborazione, che richiede circa 10 secondi nella mia applicazione. Dopo di che, io insisto che indica il file come una variabile di trasmissione, come segue:

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); 

Questo rende il programma in grado di capire ciò che la variabile globalIndex contiene. Finora è una patch che potrebbe andare bene per me, ma ritengo che non sia la soluzione migliore. Sarebbe comunque efficace con un set di dati considerevolmente più grande o una grande quantità di variabili?

Nota: Sto utilizzando Spark 1.0.0 in esecuzione su un cluster autonomo situato in diverse istanze EC2.

+0

Non si può memorizzare nella cache il file? Fondamentalmente archiviare come RDD. Sarà scalabile – Venkat

+0

Penso che la trasmissione della variabile sia la stessa della memorizzazione nella cache. La mia domanda è diretta principalmente a sapere se esiste un metodo di caching diretto o meno, senza doverlo prima "processare". –

+0

Quindi personalmente penso che una trasmissione var sia migliore della distcache in termini di usabilità, ma c'è una ragione per cui si può semplicemente usare la cache distribuita di Hadoop – aaronman

risposta

5

Si prega di dare un'occhiata al metodo SparkContext.addFile(). Indovina che è quello che stavi cercando.

0

Finché utilizziamo le variabili Broadcast, dovrebbe essere efficace anche con un set di dati più grande.

Dalla documentazione Spark "variabili Broadcast consentono al programmatore di tenere un sola lettura cache variabile su ogni macchina, piuttosto che la spedizione di una copia di esso con compiti. Possono essere utilizzati, ad esempio, per dare ad ogni nodo una copia di un grande set di dati di input in modo efficiente. "

Problemi correlati