Jak zmienić pamięć na węzeł dla Apache spark worker

Konfiguruję Klaster Apache Spark.

Kiedy uruchamiam klaster z 1 master i 3 niewolnikami, widzę to na stronie monitora głównego:

Memory
2.0 GB (512.0 MB Used)
2.0 GB (512.0 MB Used)
6.0 GB (512.0 MB Used)

Chcę zwiększyć używaną pamięć dla workerów, ale nie mogłem znaleźć odpowiedniego config dla tego. Zmieniłem się spark-env.sh jak poniżej:

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"

Ale używana pamięć jest nadal taka sama. Co zrobić, aby zmienić używaną pamięć?

Author: Nick Chammas, 2014-06-16

5 answers

Jeśli używasz 1.0.0+ i używasz Spark-shell lub Spark-submit, użyj opcji --executor-memory. Np.

spark-shell --executor-memory 8G ...

0.9.0 oraz pod:

Po uruchomieniu zadania lub uruchomieniu powłoki Zmień pamięć. Musieliśmy zmodyfikować skrypt Spark-shell tak, aby przenosił argumenty linii poleceń jako argumenty bazowej aplikacji java. W szczególności:

OPTIONS="$@"
...
$FWDIR/bin/spark-class $OPTIONS org.apache.spark.repl.Main "$@"

Wtedy możemy uruchomić naszą powłokę iskrową w następujący sposób:

spark-shell -Dspark.executor.memory=6g

Konfigurując go do samodzielnego jar, ustawiam właściwość systemowa programowo przed utworzeniem kontekstu spark i przekazaniem wartości jako argumentu wiersza poleceń (mogę wtedy uczynić ją krótszą niż długie rekwizyty systemowe).

System.setProperty("spark.executor.memory", valueFromCommandLine)

Co do zmiany domyślnego klastra, niestety nie do końca wiem jak to zrobić poprawnie.

Ostatnia kwestia - trochę mnie martwi fakt, że masz 2 węzły z 2GB i jeden z 6GB. Pamięć, której możesz użyć, będzie ograniczona do najmniejszego węzła - więc tutaj 2GB.

 16
Author: samthebest,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-10 17:53:45

W Spark 1.1.1, aby ustawić maksymalną pamięć pracowników. w conf/spark.env.sh, napisz to:

export SPARK_EXECUTOR_MEMORY=2G

Jeśli nie użyłeś jeszcze pliku konfiguracyjnego, skopiuj plik szablonu

cp conf/spark-env.sh.template conf/spark-env.sh

Następnie dokonaj zmiany i nie zapomnij o jej źródle

source conf/spark-env.sh
 13
Author: Tristan Wu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-27 12:27:24

W moim przypadku używam IPython notebook server do łączenia się ze spark. Chcę zwiększyć pamięć dla executora.

Oto co robię:

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
Author: Ha Pham,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-18 05:39:16

Zgodnie z Dokumentacja Spark możesz zmienić pamięć na węzeł za pomocą argumentu linii poleceń --executor-memory podczas składania aplikacji. Np.

./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
Przetestowałem i działa.
 9
Author: FuzzY,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-26 20:05:07

Domyślną konfiguracją workera jest przydzielenie Host_Memory - 1Gb dla każdego workera. Parametr konfiguracyjny do ręcznego dostosowania tej wartości to SPARK_WORKER_MEMORY, Jak w twoim pytaniu:

export SPARK_WORKER_MEMORY=6g.

 1
Author: maasg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-16 12:58:08