Incapaz de establecer variables de entorno en Spark usando liviano y chisma

Escenario :

He establecido un grupo de chispa en mi ambiente de kubernetes :

  • Livy Pod para la presentación de empleos
  • Spark Master Pod
  • Spark Worker Pod for execution

Lo que quiero lograr es lo siguiente: Tengo un cuaderno con un núcleo de Pyspark como una cápsula en el mismo entorno donde en la ejecución de las células se crea una sesión de chispa y el uso de la solicitud de postes de carga / afirmaciones todo mi código se ejecuta. Fui capaz de lograr el escenario anterior

Nota : No hay YARN, HDFS, Hadoop en mi env. He hecho uso de kubernetes, chispa independiente y el yipitro solamente.

Edición : Ahora lo que quería, es cuando ejecuto mi código de pyspark y se ejecuta en el trabajador de chispa, me gustaría enviar lo siguiente en ese entorno de ejecución:

  1. variables ambientales que he utilizado en el cuaderno
  2. paquetes de pip que he utilizado en el cuaderno
  3. o un virtualenv personalizado en el que podría proporcionar todos los paquetes utilizados juntos No puedo hacer lo mismo.

Cosas que he probado hasta ahora: Desde He hecho uso de la magia de chispa, he tratado de establecer variables ambientales utilizando las siguientes maneras que pude encontrar en las documentaciones y otras respuestas.

%%configure { 
"conf": {
    spark.executorEnv.TESTVAR
    spark.appMasterEnv.TESTVAR
    spark.driver.TESTVAR
    spark.driverenv.TESTVAR
    spark.kubernetes.driverenv.TESTVAR
    spark.kubernetes.driver.TESTVAR
    spark.yarn.executorEnv.TESTVAR
    spark.yarn.appMasterEnv.TESTVAR
    spark.workerenv.TESTVAR
   }
}

Agrupado para referencia, he probado las opciones anteriores individualmente.

He intentado golpear directamente el nombre de servicio de la cápsula de carga como una petición de correo normal pero todavía no hay suerte.

Pero las variables todavía no se están detectando

Después de esto traté de establecer el mismo manualmente en fallas de chispa. conf en el grupo de chispa, pero no funcionó. Agradecería cualquier ayuda en el asunto. También es mi primera pregunta de SO así que por favor avisen en caso de problemas.

Pregunta hecha hace 3 años, 4 meses, 28 días - Por cyberjedi


2 Respuestas:

  • Para establecer variables de entorno en Spark usando Livy y PySpark en un entorno de Kubernetes, puedes intentar lo siguiente:

    • En Livy, puedes enviar las variables de entorno al ejecutar un trabajo mediante el uso de "livy.spark.masterEnv" en tu configuración. Por ejemplo:
    python
    POST /batches
    {
      "file": "path to your script",
      "proxyUser": "user",
      "name": "example",
      "conf": {
        "spark.master": "k8s://...",
        "livy.spark.masterEnv.TESTVAR": "value"
      }
    }
    

    • En el cuaderno de Jupyter con PySpark, también puedes establecer variables de entorno antes de crear la sesión Spark. Por ejemplo:
    python
    import os
    from pyspark.sql import SparkSession

    os.environ["TESTVAR"] = "value"

    spark = SparkSession.builder.appName("example").getOrCreate()

    • Para instalar paquetes de pip y usar un entorno virtual personalizado, puedes considerar la opción de crear un archivo requirements.txt con los paquetes requeridos y luego instalar esos paquetes al iniciar la sesión Spark en el cuaderno de Jupyter. Por ejemplo:
    python
    import os
    from pyspark.sql import SparkSession

    os.system("pip install -r requirements.txt")

    spark = SparkSession.builder.appName("example").getOrCreate()

    Espero que estas sugerencias te ayuden a establecer correctamente las variables de entorno y los paquetes en tu entorno de Spark en Kubernetes. ¡Déjame saber si tienes alguna pregunta adicional!

    Respondida el Dec 18, 2020 a las 06:25 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Establecer variables de entorno en Spark con Livy y Kubernetes

    Para establecer variables de entorno en Spark que se ejecuta en Kubernetes utilizando Livy, puedes seguir estos pasos:

    1. Crea un archivo de configuración de Spark:

    Crea un archivo llamado spark-env.sh con el siguiente contenido:

    sh
    export TESTVAR=valor_deseado
    

    2. Monta el archivo de configuración en los pods de Spark:

    En la definición de tu pod de Spark, monta el archivo de configuración en el contenedor:

    yaml
    apiVersion: v1
    kind: Pod
    ...
    volumes:
    
    • name: spark-env-volume
    configMap: name: spark-env-configmap ... containers:
    • name: spark-executor
    ... volumeMounts:
    • name: spark-env-volume
    mountPath: /etc/spark/conf/spark-env.sh

    3. Crea un ConfigMap para montar el archivo de configuración:

    Crea un ConfigMap llamado spark-env-configmap con el archivo spark-env.sh como datos:

    yaml
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: spark-env-configmap
    data:
      spark-env.sh: |
        export TESTVAR=valor_deseado
    

    4. Establece las variables de entorno en Livy:

    Cuando envíes un trabajo de Spark a Livy, incluye las variables de entorno en la configuración de Spark:

    python
    from livy import LivyClient
    
    livy_client = LivyClient(endpoint_uri='http://livy-host:8998')
    session_info = livy_client.create_session(
        kind='spark',
        name='Mi sesión de Spark',
        conf={
            'spark.executorEnv.TESTVAR': 'valor_deseado'
        }
    )
    

    5. Ejecuta el trabajo de Spark con las variables de entorno establecidas:

    Ahora puedes ejecutar tu código de Spark y las variables de entorno establecidas en el paso 4 estarán disponibles en los trabajadores de Spark.

    Nota: Asegúrate de que los pods de Spark tengan permisos para leer el ConfigMap.

    Respondida el Dec 18, 2020 a las 06:30 - por Gemini

    Votos positivos: 0 | Votos negativos: 0