2015-04-29 18 views
11

Uso Spark 1.3.0 in un cluster di 5 nodi worker con 36 core e 58 GB di memoria ciascuno. Mi piacerebbe configurare il cluster Standalone di Spark con molti esecutori per lavoratore.Come allocare più esecutori per lavoratore in modalità cluster autonomo?

Ho visto il SPARK-1706 unito, tuttavia non è immediatamente chiaro come configurare effettivamente più esecutori.

Ecco l'ultima configurazione del cluster:

spark.executor.cores = "15" 
spark.executor.instances = "10" 
spark.executor.memory = "10g" 

Queste impostazioni sono impostate su una SparkContext quando l'applicazione Spark è presentata al cluster.

risposta

25

Prima è necessario configurare il cluster spark standalone, quindi impostare la quantità di risorse necessarie per ogni singola applicazione spark che si desidera eseguire.

Al fine di configurare il cluster, si può provare questo:

  • In conf/spark-env.sh:

    • Impostare la SPARK_WORKER_INSTANCES = 10 che determina il numero di istanze dei lavoratori (#Executors) per nodo (il suo il valore predefinito è solo 1)
    • Imposta il numero di core SPARK_WORKER_CORES = 15 # che un lavoratore può utilizzare (predefinito: tutti i core, il tuo caso è 36)
    • Set SPARK_WORKER_MEMORY = 55g # quantità totale di memoria che può essere utilizzata su una macchina (nodo Worker) per l'esecuzione di programmi Spark.
  • Copiare il file di configurazione per tutti i lavoratori nodi, sulla stessa cartella

  • Avviare il cluster eseguendo gli script in sbin (sbin/start-all.sh, ...)

Come avete 5 lavoratori, con la configurazione di cui sopra dovresti vedere 5 (lavoratori) * 10 (esecutori per lavoratore) = 50 esecutori vivi sull'interfaccia web del master (http://localhost:8080 per impostazione predefinita)

Quando si esegue un'applicazione in modalità standalone, per impostazione predefinita, acquisirà tutti gli Executor disponibili nel cluster. È necessario impostare in modo esplicito la quantità di risorse per l'esecuzione di questa applicazione: esempio:

val conf = new SparkConf() 
      .setMaster(...) 
      .setAppName(...) 
      .set("spark.executor.memory", "2g") 
      .set("spark.cores.max", "10") 
+1

Questo mi consente di eseguire più _workers_ per nodo fisico con 1 executor per worker. 'SPARK-1706' sembra indicare che ora dovrebbe essere possibile eseguire 1 worker per nodo fisico con più executor. Sai come eseguire questa configurazione? – Rich

+0

Oh, vedo che ho letto male i tempi di quella PR. Pensavo che fosse stato fuso l'anno scorso, non questo mese. Sembra che potrebbe non essere disponibile fino a Spark 1.4 – Rich

+0

@Rich Attualmente, 1 nodo avrà 1 Worker, che è responsabile dell'avvio e della gestione di più Executor, non è responsabile della gestione dei nostri lavori. Il termine "lavoratore" che hai usato può riferirsi a Executor, perché le persone che usano hadoop e spark possono usare quel termine per indicare l'unità che esegue il lavoro. – ngtrkhoa

1

A partire dal Spark 1.4 dovrebbe essere possibile configurare questo:

Impostazione: spark.executor.cores

Default: 1 in modalità YARN, tutti i core disponibili sul worker in modalità standalone.

Descrizione: il numero di core da utilizzare su ciascun executor. Solo per YARN e solo in modalità standalone. In modalità standalone, l'impostazione di questo parametro consente a un'applicazione di eseguire più esecutori sullo stesso operatore, a condizione che ci siano nuclei sufficienti su quel lavoratore.In caso contrario, verrà eseguito un solo esecutore per applicazione su ciascun lavoratore.

http://spark.apache.org/docs/1.4.0/configuration.html#execution-behavior

0

Fino nowaday, Apache Spark 2.2 Standalone Modalità cluster di distribuzione non risolvono il problema della numero di incaricati per lavoratore, .... ma c'è un'alternativa per questo , che è: lancio Esecutori Spark manualmente:

[[email protected] ~spark/bin]# ./spark-class org.apache.spark.executor.CoarseGrainedExecutorBackend --driver-url spark://[email protected]:PORT --executor-id val --hostname localhost-val --cores 41 --app-id app-20170914105902-0000-just-exemple --worker-url spark://[email protected]:34117 

I h ope che ti aiuti!

0

Nella modalità standalone, per impostazione predefinita, tutte le risorse del cluster vengono acquisite all'avvio dell'applicazione. È necessario specificare il numero di esecutori necessari utilizzando le configurazioni --executor-cores e --total-executor-cores.

Ad esempio, se nel cluster è presente 1 worker (1 worker == 1 computer, è consigliabile disporre di un solo worker per computer) nel cluster con 3 core e 3G disponibili nel pool (questo è specificato in spark-env.sh), quando si invia un'applicazione con --executor-cores 1 --total-executor-cores 2 --executor-memory 1g, vengono avviati due esecutori per l'applicazione con 1 core e 1g ciascuno. Spero che questo ti aiuti!

Problemi correlati