español - spark python example
¿Cómo se ejecuta Spark en la cuenta YARN para el uso de memoria de Python? (1)
Después de leer la documentación, no entiendo cómo se ejecuta Spark en la cuenta YARN para el consumo de memoria de Python.
¿Cuenta para spark.executor.memory
, spark.executor.memoryOverhead
o dónde?
En particular, tengo una aplicación PySpark con spark.executor.memory=25G
, spark.executor.cores=4
y encuentro un contenedor frecuente que es eliminado por YARN por exceder los límites de memoria. errores al ejecutar un map
en un RDD. Funciona con una cantidad bastante grande de objetos de Python complejos, por lo que se espera que ocupe una cantidad no trivial de memoria, pero no 25GB. ¿Cómo debo configurar las diferentes variables de memoria para usar con el código pesado de Python?
Intentaría aumentar la memoria a la predeterminada de spark.python.worker.memory
( 512 m ) debido al pesado código de Python y este valor de propiedad no cuenta en spark.executor.memory
.
Cantidad de memoria a usar por cada proceso de trabajo de python durante la agregación, en el mismo formato que las cadenas de memoria JVM (por ejemplo, 512m, 2g). Si la memoria utilizada durante la agregación supera esta cantidad, derramará los datos en discos . link
Cálculo de ExecutorMemoryOverhead en Spark:
MEMORY_OVERHEAD_FRACTION = 0.10
MEMORY_OVERHEAD_MINIMUM = 384
val executorMemoryOverhead =
max(MEMORY_OVERHEAD_FRACTION * ${spark.executor.memory}, MEMORY_OVERHEAD_MINIMUM))
La propiedad es spark.{yarn|mesos}.executor.memoryOverhead
para YARN y Mesos.
YARN elimina los procesos que toman más memoria de la que solicitaron, que es la suma de executorMemoryOverhead
y executorMemory
.
En la imagen dada, los procesos de python en worker utilizan
spark.python.worker.memory
, y luegospark.yarn.executor.memoryOverhead
+spark.executor.memory
es JVM específico.
Recurso adicional hilo de correo Apache