Sto cercando di ottimizzare l'utilizzo del cluster per un'attività semplice.Risorse spark non allocate completamente su Amazon EMR
Cluster è 1 + 2 x m3.xlarge, runnning Spark 1.3.1, Hadoop 2.4, Amazon AMI 3,7
Il compito legge tutte le righe di un file di testo e li analizza come csv.
Quando ho scintille invio un compito come una modalità di filo-cluster, ottengo uno dei seguenti risultati:
- 0 esecutore: lavoro attende all'infinito fino a quando ho ucciso manualmente
- 1 esecutore: lavoro sotto utilizzare le risorse con solo 1 macchina per la lavorazione
- OOM quando non si assegna abbastanza memoria dal driver
Quello che mi sarei aspettato:
- Il driver Spark viene eseguito su cluster master con tutta la memoria disponibile, più 2 executors con 9404 MB ciascuno (come definito da script install-spark).
A volte, quando ottengo un'esecuzione "riuscita" con 1 executor, la clonazione e il riavvio del passo termina con 0 executor.
Ho creato cluster utilizzando questo comando:
aws emr --region us-east-1 create-cluster --name "Spark Test"
--ec2-attributes KeyName=mykey
--ami-version 3.7.0
--use-default-roles
--instance-type m3.xlarge
--instance-count 3
--log-uri s3://mybucket/logs/
--bootstrap-actions Path=s3://support.elasticmapreduce/spark/install-spark,Args=["-x"]
--steps Name=Sample,Jar=s3://elasticmapreduce/libs/script-runner/script-runner.jar,Args=[/home/hadoop/spark/bin/spark-submit,--master,yarn,--deploy-mode,cluster,--class,my.sample.spark.Sample,s3://mybucket/test/sample_2.10-1.0.0-SNAPSHOT-shaded.jar,s3://mybucket/data/],ActionOnFailure=CONTINUE
Con alcune varianti passo tra cui:
--driver memoria 8G --driver-core 4 --num-esecutori 2
install-scintilla script con -x produce il seguente scintilla defaults.conf:
$ cat spark-defaults.conf
spark.eventLog.enabled false
spark.executor.extraJavaOptions -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 -XX:MaxHeapFreeRatio=70
spark.driver.extraJavaOptions -Dspark.driver.log.level=INFO
spark.executor.instances 2
spark.executor.cores 4
spark.executor.memory 9404M
spark.default.parallelism 8
Update 1
ottengo lo stesso comportamento con un esempio generico JavaWordCount:
/home/hadoop/spark/bin/spark-submit --verbose --master yarn --deploy-mode cluster --driver-memory 8G --class org.apache.spark.examples.JavaWordCount /home/hadoop/spark/lib/spark-examples-1.3.1-hadoop2.4.0.jar s3://mybucket/data/
Tuttavia, se mi tolgo la '--driver memoria 8G', il compito viene assegnato 2 esecutori e finisce correttamente.
Quindi, qual è il problema con la memoria del driver che impedisce al mio compito di ottenere gli esecutori?
Il driver deve essere eseguito sul nodo master del cluster insieme al contenitore master del filato come spiegato here?
Come posso dare più memoria al mio driver di scintilla? (Dove si accumulano e altre operazioni utili)
Sì, fondamentalmente l'utente ha bisogno di sintonizzare le impostazioni per abbinare ciò che si desidera. I documenti di Spark riguardanti il lancio sul filo parlano bene. – ChristopherB
L'analisi del nodo implica che il driver non viene eseguito sul gestore risorse (Istanza master in EMR). È questo il caso? (cercando di capovolgerlo) (quando si esegue come cluster di filati) – noli
Sì, questo è quello che dice .. A meno che non mi sbagli, non ho visto nulla in esecuzione sul nodo principale quando si utilizza la modalità cluster-cluster . –