¿Cómo puedo aumentar la memoria disponible para los nodos del ejecutor de chispa Apache?
Tengo un archivo de 2 GB que es adecuado para cargar en Apache Spark. Estoy ejecutando apache spark por el momento en 1 máquina, por lo que el controlador y el ejecutor están en la misma máquina. La máquina tiene 8 GB de memoria.
Cuando intento contar las líneas del archivo después de configurar el archivo para que se almacene en la memoria caché, obtengo estos errores:
2014-10-25 22:25:12 WARN CacheManager:71 - Not enough space to cache partition rdd_1_1 in memory! Free memory is 278099801 bytes.
Miré a la documentación aquí y puse spark.executor.memory
a 4g
en$SPARK_HOME/conf/spark-defaults.conf
La interfaz de usuario muestra que esta variable se establece en el entorno de Spark. Puedes encontrar la captura de pantalla aquí
Sin embargo, cuando voy a la pestaña Ejecutor, el límite de memoria para mi Ejecutor único todavía está establecido en 265.4 MB. También sigo teniendo el mismo error.
Intenté varias cosas mencionadas aquí, pero aún recibo el error y no tengo una idea clara de dónde debo cambiar la configuración.
Estoy ejecutando mi código de forma interactiva desde el shell de chispa
fuente
También tenga en cuenta que para el modo local debe establecer la cantidad de memoria del controlador antes de iniciar jvm:
Esto iniciará la JVM con 2G en lugar de los 512M predeterminados.
Detalles aquí :
fuente
Aparentemente, la pregunta nunca dice que se ejecute en modo local, no en hilo. De alguna manera no pude obtener el cambio spark-default.conf para trabajar. En cambio probé esto y funcionó para mí
(no se pudo aumentar la memoria del ejecutor a 8 g hay alguna restricción de la configuración del hilo).
fuente
executor-memory
más alto quedriver-memory
?La respuesta presentada por Grega me ayudó a resolver mi problema. Estoy ejecutando Spark localmente desde un script de Python dentro de un contenedor Docker. Inicialmente recibía un error de falta de memoria de Java al procesar algunos datos en Spark. Sin embargo, pude asignar más memoria al agregar la siguiente línea a mi script:
Aquí hay un ejemplo completo del script de Python que utilizo para iniciar Spark:
fuente
Necesita aumentar la memoria del controlador. En mac (es decir, cuando se ejecuta en el maestro local), la memoria del controlador predeterminada es 1024M). Por defecto, 380Mb se asignan al ejecutor.
Al aumentar [ --driver-memory 2G ], la memoria del ejecutor aumentó a ~ 950Mb.
fuente
cree un archivo llamado spark-env.sh en el directorio spark / conf y agregue esta línea
fuente
SPARK_WORKER_MEMORY
.Puedes construir el comando usando el siguiente ejemplo
fuente
La memoria del ejecutor de chispa es necesaria para ejecutar sus tareas de chispa según las instrucciones dadas por su programa de controlador. Básicamente, requiere más recursos que dependen de su trabajo enviado.
La memoria del ejecutor incluye la memoria requerida para ejecutar las tareas más la memoria de gastos generales que no debe ser mayor que el tamaño de JVM y el tamaño máximo del contenedor de hilo.
Agregue los siguientes parámetros en spark-defaults.conf
Si utiliza alguna herramienta de administración de clúster, como cloudera manager o amabari , actualice la configuración del clúster para reflejar las últimas configuraciones en todos los nodos del clúster.
Alternativamente, podemos pasar el núcleo del ejecutor y el valor de la memoria como argumento mientras ejecutamos el
spark-submit
comando junto con la ruta de clase y aplicación.Ejemplo:
fuente
mencionó que está ejecutando su código de manera interactiva en spark-shell, de modo que si no se establece un valor adecuado para la memoria del controlador o la memoria del ejecutor, spark le asigna un valor predeterminado, que se basa en su archivo de propiedades (donde el valor predeterminado es siendo mencionado).
Espero que sea consciente del hecho de que hay un controlador (nodo maestro) y un nodo trabajador (donde los ejecutores se crean y procesan), por lo que básicamente se requieren dos tipos de espacio para el programa spark, por lo que si desea establecer memoria del controlador, entonces cuando se inicia spark-shell.
spark-shell --driver-memory "su valor" y para configurar la memoria del ejecutor: spark-shell --executor-memory "su valor"
entonces creo que es bueno ir con el valor deseado de la memoria que desea que use su spark-shell.
fuente
fuente
En Windows o Linux, puede usar este comando:
fuente
Hasta donde sé, no sería posible cambiar el
spark.executor.memory
tiempo de ejecución. Si está ejecutando una versión independiente, con pyspark y graphframes, puede iniciar el pysparkREPL
ejecutando el siguiente comando:Asegúrese de cambiar la
SPARK_VERSION
variable de entorno adecuadamente con respecto a la última versión lanzada de Sparkfuente