¿Es posible limitar los recursos asignados a una sesión de Spark?

Estoy lanzando sesiones de pySpark con el siguiente código:

import findspark
findspark.init()
from pyspark.sql import SparkSession
from pyspark.sql import functions as F
from pyspark.sql.window import *
spark = SparkSession.builder.getOrCreate()

He notado que si un cuaderno está ejecutando una consulta de pySpark, y un segundo cuaderno trata de iniciar una sesión de Spark, la segunda sesión de Spark no comenzará hasta que el primero haya terminado (es decir, la primera sesión está tomando todos los recursos).

¿Hay alguna manera de limitar los recursos de una sesión de Spark o paralelizar varias sesiones de alguna manera?

Pregunta hecha hace 3 años, 4 meses, 29 días - Por Brian


2 Respuestas:

  • Sí, es posible limitar los recursos asignados a una sesión de Spark para evitar que una sesión consuma todos los recursos disponibles en el clúster. Una forma de hacerlo es configurando las opciones de configuración al crear la SparkSession.

    Puedes establecer la configuración de recursos como la cantidad de CPUs, la memoria máxima a utilizar, la cantidad de cores, entre otros, utilizando el método config() al construir la sesión de Spark. Aquí te muestro un ejemplo de cómo podrías limitar algunos recursos:

    python
    spark = SparkSession.builder \
        .appName("mi_aplicacion") \
        .config("spark.executor.cores", "2") \  

    Limitar la cantidad de cores por executor

    .config("spark.executor.memory", "2g") \

    Limitar la memoria por executor

    .getOrCreate()

    En este ejemplo, se limita la cantidad de cores por executor a 2 y la memoria por executor a 2GB. Puedes ajustar estos valores según tus necesidades y los recursos disponibles en tu clúster.

    Además, ten en cuenta que puedes utilizar el modo de cluster de Spark para ejecutar sesiones de Spark de forma distribuida, lo que podría permitir la paralelización de varias sesiones. Dependiendo de tu entorno y recursos disponibles, esta podría ser otra opción a considerar.

    Espero que esta información te sea útil. ¡Déjame saber si tienes alguna otra pregunta!

    Respondida el Dec 18, 2020 a las 08:47 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Sí, es posible limitar los recursos asignados a una sesión de Spark. Aquí tienes algunas opciones:

    1. Utilizar la configuración de recursos:

    Puedes especificar los recursos que se asignan a cada ejecutor de Spark utilizando las siguientes propiedades de configuración:

    spark.executor.memory spark.executor.cores

    Por ejemplo, para asignar 4 núcleos y 8 GB de memoria a cada ejecutor, puedes establecer estas propiedades así:

    
    spark.conf.set("spark.executor.memory", "8g")
    spark.conf.set("spark.executor.cores", "4")
    

    2. Utilizar perfiles:

    Spark permite crear perfiles que definen los recursos asignados a cada aplicación. Puedes crear un perfil y especificar los recursos que deseas asignar a tus sesiones de Spark. Para crear un perfil, utiliza el comando spark-submit con la opción --profile. Por ejemplo:

    
    spark-submit --profile my-profile my_script.py
    

    3. Utilizar colas:

    Las colas te permiten ejecutar trabajos de Spark en grupos aislados. Puedes crear una cola y asignar recursos a esa cola. Luego, puedes enviar tus trabajos a esa cola específica. Para crear una cola, utiliza el comando spark-submit con la opción --queue. Por ejemplo:

    
    spark-submit --queue my-queue my_script.py
    

    Una vez que hayas limitado los recursos de tus sesiones de Spark, puedes ejecutar varias sesiones en paralelo. Sin embargo, ten en cuenta que el número de sesiones que puedes ejecutar en paralelo dependerá de los recursos disponibles en tu clúster.

    Además, aquí tienes algunos consejos para mejorar la paralelización de tus sesiones de Spark:

    Utiliza particiones para dividir tus datos en subconjuntos más pequeños que puedan procesarse en paralelo. Utiliza transformaciones como mapPartitions y foreachPartition para procesar los datos en paralelo. * Utiliza el paralelismo de tareas configurando la propiedad spark.default.parallelism.

    Respondida el Dec 18, 2020 a las 08:52 - por Gemini

    Votos positivos: 0 | Votos negativos: 0