Ho un cluster RMI. Ogni server RMI ha un contesto Spark. C'è un modo per condividere un RDD tra diversi contesti Spark?Come condividere Spark RDD tra 2 contesti Spark?
risposta
No, un RDD è collegato a un singolo SparkContext
. L'idea generale è che hai un cluster Spark e un programma driver che dice al cluster cosa fare. Questo driver avrebbe il SparkContext
e avviare le operazioni sugli RDD.
Se si desidera spostare semplicemente un RDD da un programma di driver a un altro, la soluzione è di scriverlo su disco (S3/HDFS/...) nel primo driver e caricarlo da disco nell'altro driver.
Come già affermato da Daniel Darabos non è possibile. Ogni oggetto distribuito in Spark è limitato a un contesto specifico che è stato utilizzato per crearlo (SparkContext
in caso di RDD, SQLContext
in caso di set di dati DataFrame
). Se si desidera condividere oggetti tra applicazioni, è necessario utilizzare i contesti condivisi (vedere ad esempio spark-jobserver
, Livy o Apache Zeppelin). Dal RDD
o DataFrame
è solo un piccolo oggetto locale non c'è davvero molto da condividere.
La condivisione dei dati è un problema completamente diverso. È possibile utilizzare la cache di memoria specializzata (Apache Ignite) o distribuita in file system di memoria (come Alluxio - ex Tachyon) per ridurre al minimo la latenza quando si passa da un'applicazione all'altra, ma non è possibile evitarla.
Non è nativamente, a mio avviso, RDD non è dati, ma un modo per creare dati tramite trasformazioni/filtri dai dati originali.
Un'altra idea è quella di condividere i dati finali. Quindi, si memorizzare il RDD in un data-store, come ad esempio: - HDFS (un file in parquet, ecc ..) - elasticsearch - Apache Ignite (in memoria)
penso che vi piacerà Apache Ignite : https://ignite.apache.org/features/igniterdd.html
Apache Ignite fornisce un'implementazione di Spark RDD astrazione che consenta di condividere facilmente stato in memoria su più Spark lavori, sia all'interno della stessa applicazione o tra diversi Spark applicazioni.
IgniteRDD è implementato come è una vista su una cache Ignite distribuita, che può essere implementato sia nel processo di lavoro Spark esecuzione, o su un lavoratore Spark, o nel proprio cluster.
(ho lasciato si scava la loro documentazione per trovare quello che stai cercando.)
- 1. Spark molteplici contesti
- 2. RDD Aggregate in spark
- 3. Apache Spark: Come posso convertire uno Spark DataFrame in un RDD con tipo RDD [(Tipo1, Tipo2, ...)]?
- 4. Come creare Spark RDD da un iteratore?
- 5. Come ottenere l'ennesima riga di Spark RDD?
- 6. Treat Spark RDD come plain Seq
- 7. Spark: Gruppo concat equivalente in scala RDD
- 8. Apache filtro Spark RDD in due RDDs
- 9. Qual è la differenza tra Spark DataSet e RDD
- 10. Spark JSON campo di testo per RDD
- 11. Mock a Spark RDD nei test dell'unità
- 12. Implementazione di Spark RDD personalizzato in Java
- 13. Spark RDD's - come funzionano
- 14. Spark SQL: Convertire RDD [GenericData.Record] per dataframe
- 15. In che modo Spark decide come partizionare un RDD?
- 16. Come verificare se Spark RDD è in memoria?
- 17. Come creare un set di dati Spark da un RDD
- 18. Come ottenere elemento per Indice in Spark RDD (Java)
- 19. Come aggiungere una nuova colonna a un RDD Spark?
- 20. Scrivere RDD come file di testo utilizzando Apache Spark
- 21. Spark Streaming: come aggiornare periodicamente il RDD memorizzato nella cache?
- 22. Come convertire spark DataFrame in RDD mllib LabeledPoints?
- 23. Come elencare gli RDD definiti in Spark shell?
- 24. Come posso unire efficientemente un grande rdd ad una grande rdd in spark?
- 25. Persistendo Spark uscita Streaming
- 26. Spark Caching: RDD Solo l'8% nella cache
- 27. Elaborazione Xml in Spark
- 28. Creazione di un dataframe Spark da un RDD di liste
- 29. Rimodellare/dati di snodo Spark RDD e/o scintille DataFrames
- 30. Scala Spark: dividere la raccolta in diversi RDD?