Je configure un Apache Spark cluster.
Lorsque je lance le cluster avec 1 maître et 3 esclaves, je vois cela sur la page du moniteur principal:
Memory
2.0 GB (512.0 MB Used)
2.0 GB (512.0 MB Used)
6.0 GB (512.0 MB Used)
Je veux augmenter la mémoire utilisée pour les travailleurs mais je n'ai pas pu trouver la bonne configuration pour cela. J'ai changé spark-env.sh comme ci-dessous:
export SPARK_WORKER_MEMORY=6g
export SPARK_MEM=6g
export SPARK_DAEMON_MEMORY=6g
export SPARK_Java_OPTS="-Dspark.executor.memory=6g"
export Java_OPTS="-Xms6G -Xmx6G"
Mais la mémoire utilisée est toujours la même. Que dois-je faire pour changer la mémoire utilisée?
Lorsque vous utilisez 1.0.0+ et utilisez spark-Shell ou spark-submit, utilisez le --executor-memory
option. Par exemple.
spark-Shell --executor-memory 8G ...
.9.0 et moins:
Lorsque vous démarrez un travail ou démarrez le Shell, changez la mémoire. Nous avons dû modifier le script spark-Shell pour qu'il transporte les arguments de ligne de commande comme arguments pour l'application Java Java sous-jacente. En particulier:
OPTIONS="$@"
...
$FWDIR/bin/spark-class $OPTIONS org.Apache.spark.repl.Main "$@"
Ensuite, nous pouvons exécuter notre spark Shell comme suit:
spark-Shell -Dspark.executor.memory=6g
Lors de sa configuration pour un pot autonome, j'ai défini la propriété système par programme avant de créer le contexte spark et je passe la valeur en tant qu'argument de ligne de commande (je peux la rendre plus courte que les accessoires système longs) puis).
System.setProperty("spark.executor.memory", valueFromCommandLine)
Quant à la modification du cluster par défaut à l'échelle, désolé, je ne sais pas exactement comment le faire correctement.
Un dernier point - je suis un peu inquiet du fait que vous avez 2 nœuds avec 2 Go et un avec 6 Go. La mémoire que vous pouvez utiliser sera limitée au plus petit nœud - alors voici 2 Go.
Dans Spark 1.1.1, pour définir la mémoire maximale des travailleurs. Dans conf/spark.env.sh, écrivez ceci:
export SPARK_EXECUTOR_MEMORY=2G
Si vous n'avez pas encore utilisé le fichier de configuration, copiez le fichier modèle
cp conf/spark-env.sh.template conf/spark-env.sh
Ensuite, faites le changement et n'oubliez pas de l'approvisionner
source conf/spark-env.sh
Dans mon cas, j'utilise un serveur notebook ipython pour me connecter à spark. Je veux augmenter la mémoire de l'exécuteur testamentaire.
C'est ce que je fais:
from pyspark import SparkContext
from pyspark.conf import SparkConf
conf = SparkConf()
conf.setMaster(CLUSTER_URL).setAppName('ipython-notebook').set("spark.executor.memory", "2g")
sc = SparkContext(conf=conf)
Selon documentation Spark vous pouvez modifier la mémoire par nœud avec l'argument de ligne de commande --executor-memory
lors de la soumission de votre candidature. Par exemple.
./bin/spark-submit \
--class org.Apache.spark.examples.SparkPi \
--master spark://master.node:7077 \
--executor-memory 8G \
--total-executor-cores 100 \
/path/to/examples.jar \
1000
J'ai testé et ça marche.
La configuration par défaut pour le travailleur consiste à allouer Host_Memory - 1Gb
pour chaque travailleur. Le paramètre de configuration pour ajuster manuellement cette valeur est SPARK_WORKER_MEMORY
, comme dans votre question:
export SPARK_WORKER_MEMORY=6g
.