/ / Cosa sono le variabili di trasmissione? Quali problemi risolvono? - Apache-Spark

Quali sono le variabili di trasmissione? Quali problemi risolvono? - apache-spark

Sto esaminando la guida alla programmazione Spark che dice:

Le variabili di trasmissione consentono al programmatore di mantenere una variabile di sola lettura memorizzata nella cache su ogni macchina anziché inviarne una copia con le attività.

Considerando quanto sopra, quali sono i casi d'uso delle variabili di trasmissione? Quali problemi risolvono le variabili di trasmissione?

Quando creiamo una variabile di trasmissione come di seguito, il riferimento alla variabile, eccolo qui broadcastVar disponibile in tutti i nodi del cluster?

val broadcastVar = sc.broadcast(Array(1, 2, 3))

Per quanto tempo queste variabili sono disponibili nella memoria dei nodi?

risposte:

29 per risposta № 1

Se si dispone di un enorme array a cui si accedeSpark Closures, ad esempio alcuni dati di riferimento, questo array verrà spedito a ciascun nodo spark con chiusura. Ad esempio, se si dispone di un cluster di 10 nodi con 100 partizioni (10 partizioni per nodo), questo array verrà distribuito almeno 100 volte (10 volte per ciascun nodo).

Se si utilizza la trasmissione, questa verrà distribuita una volta per nodo utilizzando un protocollo p2p efficiente.

val array: Array[Int] = ??? // some huge array
val broadcasted = sc.broadcast(array)

E alcuni RDD

val rdd: RDD[Int] = ???

In questo caso l'array verrà spedito con chiusura ogni volta

rdd.map(i => array.contains(i))

e con la trasmissione otterrai enormi vantaggi in termini di prestazioni

rdd.map(i => broadcasted.value.contains(i))