Bienvenidos a AboutData.blog de Gold Light Data, donde exploramos lo último en Big Data, IA, ML, Analítica de Negocios e Inteligencia de Negocios. Únete a nosotros para mantenerte informado y empoderado en el dinámico mundo de la tecnología de datos.

Prepara datos a escala en Amazon SageMaker Studio mediante sesiones interactivas de AWS Glue serverless

Amazon SageMaker Studio es el primer entorno de desarrollo totalmente integrado (IDE) para el aprendizaje automático (ML). Proporciona una única interfaz visual web donde se pueden realizar todos los pasos de desarrollo de ML, incluida la preparación de datos y la creación, capacitación e implementación de modelos.

AWS Glue es un servicio de integración de datos serverless que facilita el descubrimiento, la preparación y la combinación de datos para el análisis, el aprendizaje automático y el desarrollo de aplicaciones. AWS Glue permite recopilar, transformar, limpiar y preparar datos sin problemas para almacenarlos en el data lake y data pipeline mediante una variedad de capacidades, incluidas las transformaciones integradas.

Los ingenieros de datos y los científicos de datos ahora pueden preparar datos a escala de forma interactiva mediante la integración de Studio notebook con sesiones de Spark serverless administradas por AWS Glue. Las sesiones interactivas de AWS Glue, que comienzan en segundos y detienen automáticamente el proceso cuando están inactivas, brindan un backend de Spark serverless, altamente escalable y bajo demanda para lograr una preparación de datos escalable dentro de Studio. Los beneficios notables de usar sesiones interactivas de AWS Glue en Studio incluyen: 

 

  • No hay clústeres para aprovisionar o administrar
  • No hay clústeres inactivos por los que pagar
  • No se requiere configuración inicial
  • Sin contención de recursos para el mismo entorno de desarrollo
  • Exactamente el mismo tiempo de ejecución y plataforma de Spark serverless que los trabajos de extracción, transformación y carga (ETL) de AWS Glue

En esta publicación, mostramos cómo preparar datos a escala en Studio mediante sesiones interactivas de AWS Glue serverless.

Descripción general de la solución

Para implementar esta solución, se deben completar los siguientes pasos de alto nivel:

  1. Actualiza tus permisos de rol de AWS Identity y Access Management (IAM).
  2. Inicia un kernel de sesión interactivo de AWS Glue.
  3. Configura tu sesión interactiva.
  4. Personaliza tu sesión interactiva y ejecuta un workflow escalable de data preparation.

Actualiza tus permisos de rol de IAM

Para comenzar, debes actualizar el rol de ejecución de IAM de tu usuario de Studio con los permisos necesarios.

Primero agrega las políticas administradas a tu función de ejecución:

  1. En la consola de IAM, elije roles en el panel de navegación.
  2. Busca la función de ejecución de Studio que usarás y elije el nombre de la función para ir a la página de resumen de funciones.
  3. Sobre la pestaña de Permissions, en el menú Add Permissions, elige Attach Policies.
  4. Selecciona las políticas administradas AmazonSageMakerFullAccess y AwsGlueSessionUserRestrictedServiceRole
  5. Elegir Attach Policies.
    La página de resumen muestra tus políticas administradas recién agregadas. Ahora agrega una política personalizada y adjunta a tu rol de ejecución.
  6. Sobre el menú Add Permissions, elige Create Inline Policy.
  7. Sobre la pestaña JSON, ingresa la siguiente política: 

     

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "VisualEditor0",
                "Effect": "Allow",
                "Action": [
                    "iam:GetRole",
                    "iam:PassRole",
                    "sts:GetCallerIdentity"
                ],
                "Resource": "*"
            }
        ]
    }
  8. Modifica la relación de confianza de tu rol: 

     

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Service": [
                        "glue.amazonaws.com",
                        "sagemaker.amazonaws.com"
                    ]
                },
                "Action": "sts:AssumeRole"
            }
        ]
    }

Inicia un kernel de sesión interactivo de AWS Glue

Si ya tienes usuarios existentes dentro de tu dominio de Studio, es posible que debas apagarlos y reiniciar tu Jupyter Server para recoger las nuevas imágenes del kernel.

Al refrescar, puedes crear un nuevo notebook de Studio y seleccionar tu kernel preferido, el built-in SparkAnalytics 1.0. La imagen ahora debería estar disponible, y puedes elegir tu kernel de AWS Glue preferido (Scala Spark Glue o PySpark Glue).

Configura tu sesión interactiva

Puedes configurar fácilmente tu sesión interactiva de AWS Glue con cell magics de notebook antes de la inicialización. Magics son pequeños comandos con el prefijo % al comienzo de las celdas de Jupyter que proporcionan atajos para controlar el entorno. En las sesiones interactivas de AWS Glue, la magia se utiliza para todas las necesidades de configuración, incluidas las siguientes:

  • %región – La región de AWS en la cual inicializar una sesión. El valor predeterminado es la región de estudio.
  • %iam_role – El ARN del rol de IAM para ejecutar tu sesión. El valor predeterminado es el rol de ejecución de SageMaker del usuario.
  • %worker_type – El tipo de trabajador de AWS Glue. El valor predeterminado es estándar.
  • %Numero de trabajadores – El número de trabajadores que se asignan cuando se ejecuta un trabajo. El valor predeterminado es cinco.
  • %tiempo de inactividad – El número de minutos de inactividad después de los cuales se agotará el tiempo de espera de una sesión. El valor predeterminado es 2.880 minutos.
  • % módulos_adicionales_python – Una lista separada por comas de módulos de Python adicionales para incluir en tu clúster. Esto puede ser de PyPi o Amazon Simple Storage Service (Amazon S3).
  • %%configurar – Un diccionario con formato JSON que consta de parámetros de configuración específicos de AWS Glue para una sesión.

Para obtener una lista completa de los parámetros mágicos configurables para este kernel, utiliza %help dentro de tu notebook.

Tu sesión interactiva de AWS Glue no comenzará hasta que se ejecute la primera non-magic cell.

Personaliza tu sesión interactiva y ejecuta una carga de trabajo de data preparation

Como ejemplo, las siguientes celdas del notebook muestran cómo puedes personalizar tu sesión interactiva de AWS Glue y ejecutar una carga de trabajo de data preparation escalable. En este ejemplo, realizamos una tarea ETL para agregar datos de calidad del aire para una ciudad determinada, agrupados por hora del día.

Configuramos nuestra sesión para guardar nuestros registros de Spark en un bucket S3 para la depuración en tiempo real, que veremos más adelante en esta publicación. Asegúrate de que el iam_role que está ejecutando tu sesión de AWS Glue tiene acceso de escritura al bucket de S3 especificado.

%help

%session_id_prefix air-analysis-
%glue_version 3.0
%idle_timeout 60
%%configure
{
"--enable-spark-ui": "true",
"--spark-event-logs-path": "s3://<BUCKET>/gis-spark-logs/"
}

A continuación, cargamos nuestro conjunto de datos directamente desde Amazon S3. Como alternativa, puedes cargar datos utilizando tu catálogo de datos de AWS Glue.

from pyspark.sql.functions import split, lower, hour
print(spark.version)
day_to_analyze = "2022-01-05"
df = spark.read.json(f"s3://openaq-fetches/realtime-gzipped/{day_to_analyze}/1641409725.ndjson.gz")
df_air = spark.read.schema(df.schema).json(f"s3://openaq-fetches/realtime-gzipped/{day_to_analyze}/*")

Finalmente, escribimos nuestro conjunto de datos transformado en una ubicación de bucket de salida que definimos:

df_city = df_air.filter(lower((df_air.city)).contains('delhi')).filter(df_air.parameter == "no2").cache()
df_avg = df_city.withColumn("Hour", hour(df_city.date.utc)).groupBy("Hour").avg("value").withColumnRenamed("avg(value)", "no2_avg")
df_avg.sort("Hour").show()

# Examples of reading / writing to other data stores: 
# https://github.com/aws-samples/aws-glue-samples/tree/master/examples/notebooks

df_avg.write.parquet(f"s3://<BUCKET>/{day_to_analyze}.parquet")

Una vez que hayas completado tu trabajo, puedes finalizar tu sesión interactiva de AWS Glue inmediatamente simplemente cerrando el kernel del notebook de Studio, o puedes usar el magic %stop_session.

Debugging y Spark UI

En el ejemplo anterior, especificamos el argumento ”--enable-spark-ui”: “true” junto con un "--spark-event-logs-path": location. Esto configura nuestra sesión de AWS Glue para grabar los registros de las sesiones, de modo que podamos utilizar una interfaz de usuario de Spark para monitorear y depurar nuestro trabajo de AWS Glue en tiempo real.

Lanzamos un contenedor Docker local que tiene permiso para leer el bucket S3 que contiene nuestros registros. Opcionalmente, puedes alojar una instancia de Amazon Elastic Compute Cloud (Amazon EC2).

Precios

Cuando se utilizan sesiones interactivas de AWS Glue en notebooks de Studio, se cobra por separado el uso de recursos en las notebooks de AWS Glue y Studio.

AWS cobra por las sesiones interactivas de AWS Glue según el tiempo en que la sesión está activa y la cantidad de unidades de procesamiento de datos (DPU) utilizadas. Se cobra una tarifa por hora por la cantidad de DPU utilizadas para ejecutar los workflows, facturados en incrementos de 1 segundo. Las sesiones interactivas de AWS Glue asignan un valor predeterminado de 5 DPU y requieren un mínimo de 2 DPU. También hay una duración mínima de facturación de 1 minuto para cada sesión interactiva. Para ver las tarifas de AWS Glue y los ejemplos de precios, o para estimar tus costos con la calculadora de precios de AWS, consulta precios de AWS Glue.

Notebook Studio se ejecuta en una instancia EC2 y se cobra por el tipo de instancia que elijas, según la duración del uso. Studio asigna un tipo de instancia EC2 predeterminado de ml-t3-medium cuando seleccionas la imagen y núcleo asociado SparkAnalytics. Puedes cambiar el tipo de instancia de Studio notebook para adaptarlo a tu carga de trabajo.

Conclusión

La integración nativa de las notebooks de Studio con las sesiones interactivas de AWS Glue facilita la preparación escalable de datos serverless sin problemas para científicos e ingenieros de datos. ¡Te animamos a que pruebes esta nueva funcionalidad en Studio!

Tags :

Author: Iván Torres
Author: Iván Torres

Iván Torres actualmente cuenta con una Maestría en Ciencias en Analítica de Negocios e Inteligencia Artificial Aplicada, otorgada por la Universidad de Charleston (West Virginia, USA), también es profesor de Ingeniería y Maestría en la Universidad TecMilenio, y ha contribuido en diferentes proyectos tecnológicos como analista, consultor y líder para empresas de ámbito internacional acumulando más de 15 años de experiencia en los campos de desarrollo de Software, Big Data, analítica de negocio e I.A. Editor de About Data Blog.

Deja un comentario

Categories