Spark ressources qui ne sont pas entièrement alloué sur Amazon EMR

Je suis en train de maximiser l'utilisation de cluster pour une tâche simple.

Cluster est de 1+2 x m3.xlarge, runnning Étincelle 1.3.1, Hadoop 2.4, Amazon AMI 3.7

La tâche lit toutes les lignes d'un fichier texte et de les analyser en tant que fichier csv.

Quand j'ai de l'étincelle-soumettre une tâche comme un fil-mode cluster, je reçois un de le résultat suivant:

  • 0 exécuteur testamentaire: job attend à l'infini jusqu'à ce que je le supprimer manuellement
  • 1 liquidateur: travail en vertu d'utiliser les ressources avec seulement 1 machine de travail
  • OOM quand je n'attribuez pas assez de mémoire sur le pilote

Ce que j'aurais attendu:

  • Étincelle pilote exécuter sur un cluster de maître avec toute la mémoire disponible, plus 2 exécuteurs testamentaires avec 9404MB chaque (tel que défini par installer-spark script).

Parfois, quand je reçois un "succès" exécution avec 1 exécuteur testamentaire, le clonage et le redémarrage de l'étape se termine avec 0 exécuteur testamentaire.

J'ai créé mon cluster à l'aide de cette commande:

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

Avec une certaine étape, y compris les variations:

--pilote-mémoire 8G --pilote de cœurs 4 --num exécuteurs testamentaires 2


installer-spark script avec -x produit est le suivant étincelle de paramètres par défaut.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

Mise à jour de 1

- Je obtenir le même comportement avec un générique JavaWordCount exemple:

/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/

Cependant, si je supprime le '--pilote-mémoire 8G", la tâche est affectée 2 exécuteurs testamentaires et se termine correctement.

Donc, quel est le problème avec le pilote de mémoire m'empêcher de tâche pour obtenir les exécuteurs?

Si le pilote est exécuté sur le cluster nœud maître du côté du Fils de maître conteneur comme expliqué ici?

Comment puis-je donner plus de mémoire à mon étincelle d'emploi chauffeur? (Où collecte et de certaines autres opérations surviennent)

OriginalL'auteur Michel Lemay | 2015-06-08