Configuración avanzada: uso compartido de puntos de conexión de desarrollo entre múltiples usuarios - AWS Glue

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Configuración avanzada: uso compartido de puntos de conexión de desarrollo entre múltiples usuarios

En esta sección se explica cómo puede aprovechar los puntos de desarrollo con los blocs de notas de SageMaker en casos de uso habituales para compartir puntos de enlace de desarrollo entre múltiples usuarios.

Configuración de tenencia única

En casos de uso de tenencia única, a fin de simplificar la experiencia del desarrollador y evitar la contención de recursos, se recomienda que cada desarrollador use su propio punto de enlace de desarrollo dimensionado para el proyecto en el que está trabajando. Esto también simplifica las decisiones relacionadas con el tipo de empleado y el recuento de DPU y las deja a discreción del desarrollador y según el proyecto en el que están trabajando.

No tendrá que ocuparse de la asignación de recursos a menos que ejecute múltiples archivos de bloc de notas en forma concurrente. Si ejecuta código en varios archivos de bloc de notas al mismo tiempo, se iniciarán múltiples sesiones de Livy en forma concurrente. Para segregar las configuraciones del clúster de Spark con el fin de ejecutar múltiples sesiones de Livy al mismo tiempo, puede seguir los pasos que se presentan en los casos de uso de multiinquilinos.

Por ejemplo, si el punto de enlace de desarrollo tiene 10 empleados y el tipo de empleado es G.1X, entonces tendrá 9 ejecutores de Spark y todo el clúster tendrá 90 G de memoria del ejecutor ya que cada ejecutor tendrá 10 G de memoria.

Independientemente del tipo de empleado especificado, se activará la asignación dinámica de recursos de Spark. Si un conjunto de datos es lo suficientemente grande, Spark puede asignar todos los ejecutores a una única sesión de Livy ya que spark.dynamicAllocation.maxExecutors no está configurado en forma predeterminada. Esto significa que otras sesiones de Livy en el mismo punto de enlace de desarrollo esperarán para lanzar nuevos ejecutores. Si el conjunto de datos es pequeño, Spark podrá asignar ejecutores a múltiples sesiones de Livy al mismo tiempo.

nota

Para obtener más información acerca de cómo se asignan los recursos en diferentes casos de uso y cómo se establece una configuración para modificar el comportamiento, consulte Configuración avanzada: uso compartido de puntos de conexión de desarrollo entre múltiples usuarios.

Configuración de multiinquilinos

nota

Tenga en cuenta que los puntos de enlace de desarrollo están destinados a emular el entorno ETL de AWS Glue como un entorno de tenencia única. Si bien el uso de multiinquilinos es posible, es un caso de uso avanzado y se recomienda que la mayoría de los usuarios mantengan un patrón de tenencia única para cada punto de enlace de desarrollo.

En casos de uso de multiinquilinos, es posible que tenga que ocuparse de la asignación de recursos. El factor clave es el número de usuarios concurrentes que usan un bloc de notas Jupyter al mismo tiempo. Si su equipo trabaja en un flujo de trabajo de “seguir el sol” y solo hay un usuario de Jupyter en cada zona horaria, entonces el número de usuarios concurrentes es solo uno, por lo que no tendrá que preocuparse por la asignación de recursos. Sin embargo, si su bloc de notas se comparte entre varios usuarios y cada usuario envía código de forma ad-hoc, tendrá que considerar los siguientes puntos.

Para particionar los recursos del clúster de Spark entre varios usuarios, puede usar configuraciones de SparkMagic. Existen dos formas diferentes de configurar SparkMagic.

(A) Use la directiva %%configure -f

Si desea modificar la configuración por cada sesión de Livy desde el bloc de notas, puede ejecutar la directiva %%configure -f en el párrafo del bloc de notas.

Por ejemplo, si desea ejecutar la aplicación Spark en 5 ejecutores, puede ejecutar el siguiente comando en el párrafo del bloc de notas.

%%configure -f {"numExecutors":5}

Luego verá solo 5 ejecutores ejecutándose para el trabajo en la interfaz de usuario de Spark.

Recomendamos limitar el número máximo de ejecutores para la asignación dinámica de recursos.

%%configure -f {"conf":{"spark.dynamicAllocation.maxExecutors":"5"}}

(B) Modificar el archivo de configuración de SparkMagic

SparkMagic funciona con base en la API de Livy. SparkMagic crea sesiones de Livy con configuraciones como driverMemory, driverCores, executorMemory, executorCores, numExecutors, conf, etc. Estos son los factores clave que determinan la cantidad de recursos que se consumen de todo el clúster de Spark. SparkMagic le permite proporcionar un archivo de configuración para especificar los parámetros que se envían a Livy. Puede ver un archivo de configuración de ejemplo en este Repositorio GitHub.

Si desea modificar la configuración en todas las sesiones de Livy desde un bloc de notas, puede modificar /home/ec2-user/.sparkmagic/config.json para agregar session_config.

Para modificar el archivo de configuración en una instancia de bloc de notas de SageMaker, puede seguir estos pasos.

  1. Abra un bloc de notas de SageMaker.

  2. Abra el kernel del terminal.

  3. Ejecute los comandos siguientes:

    sh-4.2$ cd .sparkmagic sh-4.2$ ls config.json logs sh-4.2$ sudo vim config.json

    Por ejemplo, puede agregar estas líneas a /home/ec2-user/.sparkmagic/config.json y reiniciar el kernel de Jupyter desde el bloc de notas.

    "session_configs": { "conf": { "spark.dynamicAllocation.maxExecutors":"5" } },

Directrices y prácticas recomendadas

Para evitar este tipo de conflicto de recursos, puede usar algunos enfoques básicos como por ejemplo:

  • Tener un clúster de Spark más grande al aumentar el NumberOfWorkers (escalar horizontalmente) y actualizar el workerType (escalar verticalmente)

  • Asignar menos recursos por usuario (menos recursos por sesión de Livy)

Su enfoque dependerá del caso de uso. Si tiene un punto de enlace de desarrollo más grande y no hay una gran cantidad de datos, la posibilidad de un conflicto de recursos disminuirá significativamente porque Spark puede asignar recursos en función de una estrategia de asignación dinámica.

Como se describió con anterioridad, el número de ejecutores de Spark puede calcularse automáticamente con base en una combinación de DPU (o NumberOfWorkers) y tipo de empleado. Cada aplicación Spark lanza un controlador y varios ejecutores. Para calcular necesitará NumberOfWorkers = NumberOfExecutors + 1. La siguiente matriz explica cuánta capacidad necesita en su punto de enlace de desarrollo en función del número de usuarios concurrentes.

Número de usuarios concurrentes del bloc de notas Número de ejecutores de Spark que desea asignar por usuario Número total de empleados para su punto de enlace de desarrollo
3 5 18
10 5 60
50 5 300

Si desea asignar menos recursos por usuario, spark.dynamicAllocation.maxExecutors (o numExecutors) sería el parámetro más fácil de configurar como parámetro de sesión de Livy. Si establece la siguiente configuración en /home/ec2-user/.sparkmagic/config.json, entonces SparkMagic asignará un máximo de 5 ejecutores por sesión de Livy. Esto ayudará a segregar recursos por sesión de Livy.

"session_configs": { "conf": { "spark.dynamicAllocation.maxExecutors":"5" } },

Supongamos que hay un punto de enlace de desarrollo con 18 empleados (G-1 X) y que hay tres usuarios de bloc de notas concurrentes. Si la configuración de su sesión tiene spark.dynamicAllocation.maxExecutors=5 entonces cada usuario puede hacer uso de un controlador y cinco ejecutores. No habrá ningún conflicto de recursos incluso cuando ejecute varios párrafos de bloc de notas al mismo tiempo.

Compensación

Con esta configuración de sesión "spark.dynamicAllocation.maxExecutors":"5", podrá evitar errores de conflictos de recursos y no necesitará esperar a la asignación de recursos cuando haya accesos de usuario concurrentes. Sin embargo, incluso cuando haya muchos recursos libres (por ejemplo, no hay otros usuarios concurrentes), Spark no puede asignar más de 5 ejecutores para su sesión de Livy.

Otras notas

Es una buena práctica detener el kernel de Jupyter cuando deje de usar un bloc de notas. Esto liberará recursos y otros usuarios de bloc de notas podrán usar esos recursos inmediatamente sin esperar al vencimiento del kernel (apagado automático).

Problemas comunes

Es posible que experimentes ciertos problemas, aún cuando siga las pautas.

No se encuentra la sesión

Cuando intenta ejecutar un párrafo de bloc de notas aunque su sesión de Livy ya ha sido finalizada, verá el siguiente mensaje. Para habilitar la sesión de Livy, es necesario reiniciar el kernel de Jupyter al seleccionar Kernel > Restart (Reiniciar) en el menú Jupyter y, a continuación, vuelva a ejecutar el párrafo del bloc de notas.

An error was encountered: Invalid status code '404' from http://localhost:8998/sessions/13 with error payload: "Session '13' not found."

No hay recursos suficientes de YARN

Cuando intenta ejecutar un párrafo de bloc de notas aunque su clúster de Spark no tenga suficientes recursos para iniciar una nueva sesión de Livy, verá el siguiente mensaje. En general, este problema se puede evitar si sigue las pautas; sin embargo, existe la posibilidad de que el problema surja. Para solucionar el problema, puede comprobar si hay alguna sesión de Livy activa que no sea necesaria. Si hay sesiones de Livy innecesarias, tendrá que finalizarlas para liberar los recursos del clúster. Para obtener más información, consulte la siguiente sección.

Warning: The Spark session does not have enough YARN resources to start. The code failed because of a fatal error: Session 16 did not start up in 60 seconds.. Some things to try: a) Make sure Spark has enough available resources for Jupyter to create a Spark context. b) Contact your Jupyter administrator to make sure the Spark magics library is configured correctly. c) Restart the kernel.

Monitoreo y depuración

En esta sección se describen las técnicas para monitorear los recursos y las sesiones.

Monitoreo y depuración de la asignación de recursos de clúster

Puede ver la interfaz de usuario de Spark para monitorear cuántos recursos se asignan por sesión de Livy y cuáles son las configuraciones efectivas de Spark mientras trabaja. Para habilitar la interfaz de usuario de Spark, consulte Habilitación de la interfaz de usuario web de Apache Spark para puntos de enlace de desarrollo.

(Opcional) si necesita una vista en tiempo real de la interfaz de usuario de Spark, puede configurar un túnel SSH en relación con el servidor de historial de Spark que se ejecuta en el clúster de Spark.

ssh -i <private-key.pem> -N -L 8157:<development endpoint public address>:18080 glue@<development endpoint public address>

Luego, puede abrir http://localhost:8157 en su navegador para ver la interfaz de usuario de Spark.

Sesiones de Livy libres innecesarias

Revise estos procedimientos para cerrar las sesiones de Livy innecesarias desde un bloc de notas o un clúster de Spark.

(a). Finalizar sesiones de Livy desde un bloc de notas

Puede apagar el kernel en un bloc de notas de Jupyter para finalizar las sesiones de Livy innecesarias.

(b). Finalizar sesiones de Livy desde un clúster de Spark

Si hay sesiones de Livy innecesarias que todavía se están ejecutando, puede cerrar las sesiones de Livy en el clúster de Spark.

Como requisito previo para realizar este procedimiento, debe configurar la clave pública SSH para el punto de enlace de desarrollo.

Para iniciar sesión en el clúster de Spark, puede ejecutar el siguiente comando:

$ ssh -i <private-key.pem> glue@<development endpoint public address>

Puede ejecutar el siguiente comando para ver las sesiones activas de Livy:

$ yarn application -list 20/09/25 06:22:21 INFO client.RMProxy: Connecting to ResourceManager at ip-255-1-106-206.ec2.internal/172.38.106.206:8032 Total number of applications (application-types: [] and states: [SUBMITTED, ACCEPTED, RUNNING]):2 Application-Id Application-Name Application-Type User Queue State Final-State Progress Tracking-URL application_1601003432160_0005 livy-session-4 SPARK livy default RUNNING UNDEFINED 10% http://ip-255-1-4-130.ec2.internal:41867 application_1601003432160_0004 livy-session-3 SPARK livy default RUNNING UNDEFINED 10% http://ip-255-1-179-185.ec2.internal:33727

Puede cerrar la sesión de Livy con el siguiente comando:

$ yarn application -kill application_1601003432160_0005 20/09/25 06:23:38 INFO client.RMProxy: Connecting to ResourceManager at ip-255-1-106-206.ec2.internal/255.1.106.206:8032 Killing application application_1601003432160_0005 20/09/25 06:23:39 INFO impl.YarnClientImpl: Killed application application_1601003432160_0005