web-dev-qa-db-fra.com

Comment changer la mémoire par nœud pour Apache spark worker

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?

33
Ha Pham

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.

16
samthebest

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
13
Tristan Wu

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)
10
Ha Pham

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.

9
FuzzY

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.

1
maasg