7

Il cluster My Spark ha 1 master e 3 lavoratori (su 4 macchine separate, ogni macchina con 1 core) e altre impostazioni sono come nell'immagine seguente, dove spark.cores.max è impostato su e spark.executor.cores anche (in pic-1)perché Spark non sta distribuendo lavori a tutti gli esecutori, ma a un solo executer?

Ma quando presento il mio lavoro a Spark cluster, dalla Spark web-UI posso vedere solo un esecutore viene utilizzato (secondo memoria utilizzata e blocchi RDD in pi c-2), ma non tutti gli esecutori. In questo caso la velocità di elaborazione è molto più lenta di quanto mi aspettassi.

Dato che ho impostato il numero massimo di core 3, non tutti gli executors dovrebbero essere abituati a questo lavoro?

Come configurare Spark per distribuire il lavoro corrente a tutti gli executors, invece di un solo executor che esegue il lavoro corrente?

Grazie mille.

------------------ pic-1: spark settings

--------------- --- pic-2: enter image description here

risposta

2

hai detto che sta eseguendo due ricevitori, che tipo di ricevitori sono essi (Kafka, HDFS, Twitter ??)

Quale versione scintilla stai usando?

In base alla mia esperienza, se si utilizza un ricevitore diverso dal ricevitore di file, occuperà 1 core in modo permanente. Quindi, quando dici che hai 2 ricevitori, i 2 core saranno utilizzati in modo permanente per ricevere i dati, quindi ti rimane solo 1 core che sta facendo il lavoro.

Si prega di inviare anche lo screenshot di Spark master hompage. E screenshot della pagina Streaming di Job.

+0

per il tipo di ricevitori, non ne sono sicuro, basta usare quello predefinito dopo aver scaricato il pacchetto Spark 1.3. Dovrebbe essere Kafka. – keypoint

+0

Sto trasmettendo da AWS Kinesis a Spark, suppongo che questo ricevitore corrisponda ai frammenti di Kinesis, dal momento che ho 2 frammenti per il mio stream Kinesis. – keypoint

+1

Puoi pubblicare un'istantanea della pagina di streaming principale di Spark. docs "Quando si esegue un programma Spark Streaming localmente, non utilizzare" local "o" local [1] "come l'URL principale. Uno di questi significa che verrà utilizzato solo un thread per l'esecuzione locale delle attività. DStream basato su un ricevitore (ad esempio socket, Kafka, Flume, ecc.), Quindi il thread singolo verrà utilizzato per eseguire il ricevitore, senza thread per l'elaborazione dei dati ricevuti. Quindi, quando si esegue localmente, utilizzare sempre "local [n ] "Come l'URL principale dove n> numero di ricevitori da eseguire" Quanto sopra applicato anche per il cluster. –

0

Nello streaming di scintille viene lanciato solo un ricevitore per trasferire i dati dalla sorgente di ingresso a RDD.

Il riavvio dei dati dopo la prima trasformazione può aumentare il parallelismo.

+0

Ciao Ho 2 ricevitori lanciati. E potresti per favore dare un esempio di come ripartire? – keypoint