memory - org - getting started apache spark
Cómo cambiar la memoria por nodo para Apache spark worker (5)
Estoy configurando un clúster Apache Spark.
Cuando ejecuto el clúster con 1 maestro y 3 esclavos, veo esto en la página del monitor principal:
Memory
2.0 GB (512.0 MB Used)
2.0 GB (512.0 MB Used)
6.0 GB (512.0 MB Used)
Quiero aumentar la memoria utilizada para los trabajadores, pero no pude encontrar la configuración correcta para esto. He cambiado spark-env.sh de la siguiente manera:
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"
Pero la memoria utilizada sigue siendo la misma. ¿Qué debo hacer para cambiar la memoria usada?
Cuando use 1.0.0+ y use spark-shell o spark-submit, use la opción --executor-memory
. P.ej
spark-shell --executor-memory 8G ...
0.9.0 y menos:
Cuando comienza un trabajo o inicia el shell, cambie la memoria. Tuvimos que modificar el script spark-shell para que llevara argumentos de línea de comandos como argumentos para la aplicación java subyacente. En particular:
OPTIONS="$@"
...
$FWDIR/bin/spark-class $OPTIONS org.apache.spark.repl.Main "$@"
Entonces podemos ejecutar nuestro caparazón de la chispa de la siguiente manera:
spark-shell -Dspark.executor.memory=6g
Al configurarlo para un jar independiente, configuro la propiedad del sistema mediante programación antes de crear el contexto de chispa y pasar el valor como un argumento de línea de comando (puedo hacerlo más corto que los apoyos del sistema de largo aliento).
System.setProperty("spark.executor.memory", valueFromCommandLine)
En cuanto a cambiar el ancho del clúster predeterminado, lo siento, no estoy del todo seguro de cómo hacerlo correctamente.
Un último punto: estoy un poco preocupado por el hecho de que tienes 2 nodos con 2GB y uno con 6GB. La memoria que puede usar estará limitada al nodo más pequeño, por lo tanto, aquí 2 GB.
De acuerdo con la documentación de Spark , puede cambiar la memoria por nodo con el argumento de la línea de comando --executor-memory
al enviar su aplicación. P.ej
./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
Lo he probado y funciona.
En Spark 1.1.1, para establecer la memoria máxima de los trabajadores. en conf / spark.env.sh, escribe esto:
export SPARK_EXECUTOR_MEMORY=2G
Si aún no ha utilizado el archivo de configuración, copie el archivo de plantilla
cp conf/spark-env.sh.template conf/spark-env.sh
Luego haz el cambio y no te olvides de obtenerlo
source conf/spark-env.sh
En mi caso, utilizo el servidor portátil ipython para conectarme a la chispa. Quiero aumentar la memoria para el ejecutor.
Esto es lo que hago:
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)
La configuración predeterminada para el trabajador es asignar Host_Memory - 1Gb
para cada trabajador. El parámetro de configuración para ajustar manualmente ese valor es SPARK_WORKER_MEMORY
, como en su pregunta:
export SPARK_WORKER_MEMORY=6g
.