1

Je suis en cours d'exécution d'un script python dans pyspark et obtenu l'erreur suivante: NameError: nom « étincelle » est pas définieComment modifier le paramètre Spark pour autoriser spark.dynamicAllocation.enabled?

Je l'ai cherché et trouvé que la raison est que spark.dynamicAllocation.enabled est pas encore permis.

Selon la documentation de Spark (https://jaceklaskowski.gitbooks.io/mastering-apache-spark/content/spark-dynamic-allocation.html#spark_dynamicAllocation_enabled): spark.dynamicAllocation.enabled (par défaut: false) contrôle si l'allocation dynamique est activée ou non. Il est supposé que spark.executor.instances n'est pas défini ou est 0 (qui est la valeur par défaut).

Étant donné que le paramètre par défaut est false, j'ai besoin de modifier le paramètre Spark pour activer spark.dynamicAllocation.enabled.

J'ai installé Spark avec l'infusion et je n'ai pas modifié sa configuration/réglage.

Comment puis-je modifier le paramètre et activer spark.dynamicAllocation.enabled?

Merci beaucoup.

+0

lien ci-dessus est étincelle pas la documentation officielle. Son Mastering Apache Spark Book par Jack qui est également utilisateur de SO. s'il vous plaît le changer de manière appropriée :) –

Répondre

1

Il y a plusieurs endroits où vous pouvez le régler. Si vous souhaitez l'activer sur une base par emploi, définir les paramètres suivants dans chaque application:

conf.set("spark.dynamicAllocation.enabled","true") 

Si vous souhaitez définir si pour tous les travaux, accédez au fichier spark.conf. Dans le distro Hortonworks il devrait être

/usr/hdp/current/spark-client/conf/ 

Ajoutez le paramètre à votre étincelle defaults.conf et devrait être bon d'aller.

+0

Merci beaucoup! Je voudrais l'activer sur une base de travail. conf.set ("spark.dynamicAllocation.enabled", "true") est-ce une ligne de commande que je vais taper dans le terminal? Dans quel répertoire devrais-je changer, avant de taper cette ligne de commande? Merci beaucoup! – mflowww

+0

Si vous exécutez la ligne de commande à l'aide de la commande spark-shell, démarrez la commande shell avec is: spark-shell --conf spark.dynamicAllocation.enabled = true Peu importe le répertoire dans lequel vous vous trouvez vous démarrez le shell dans com Si vous écrivez une application, définissez-la dans l'application après avoir créé la config spark avec conf.set(). –

+0

merci beaucoup. Je vois.Si j'écris un script Python et que j'essaie de le lancer avec spark-submit en ligne de commande (pas dans le shell pyspark), je vais juste inclure cette ligne de code dans mon script Python, n'est-ce pas? – mflowww

2

Vous pouvez le faire de manière programmatique comme ceci.

val conf = new SparkConf() 
     .setMaster("ClusterManager") 
     .setAppName("test-executor-allocation-manager") 
     .set("spark.dynamicAllocation.enabled", "true") 
     .set("spark.dynamicAllocation.minExecutors", 1) 
     .set("spark.dynamicAllocation.maxExecutors", 2) 
     .set("spark.shuffle.service.enabled", "true") // for stand alone 
+0

Merci beaucoup! Dois-je inclure le script que vous avez fourni ici, au pyspark que j'écris? Ou cela fait partie du fichier de configuration .sh que je devrais modifier? – mflowww

+0

vous devez inclure cela dans votre fichier programme python ci-dessus est la syntaxe scala –

+0

Merci beaucoup. J'écris un script Python à envoyer dans pyspark. Laissez-moi essayer de modifier ce que vous suggérez ici et voir si cela fonctionne. – mflowww

0

C'est un problème qui affecte les installations Spark effectuées à l'aide d'autres ressources, ainsi, comme le script étincelle EC2 pour l'installation sur Amazon Web Services. De la documentation Spark, deux valeurs SPARK_HOME/conf/étincelles defaults.conf doivent être définis:

spark.shuffle.service.enabled true 
spark.dynamicAllocation.enabled true 

voir ceci: https://spark.apache.org/docs/latest/configuration.html#dynamic-allocation

Si votre installation a un script spark-env.sh dans SPARK_HOME/conf, assurez-vous qu'il ne dispose pas de lignes telles que les suivantes, ou qu'ils sont commentées:

export SPARK_WORKER_INSTANCES=1 #or some other integer, or 
export SPARK_EXECUTOR_INSTANCES=1 #or some me other integer