Mejorar los kernels con comandos magic en EMR Studio - Amazon EMR

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.

Mejorar los kernels con comandos magic en EMR Studio

Descripción general

EMR Studio y EMR Notebooks admiten comandos. magic Magiclos comandos, o magic comandos, son mejoras que el IPython núcleo proporciona para ayudarle a ejecutar y analizar datos. IPythones un entorno de shell interactivo creado con Python.

Amazon EMR también admite Sparkmagic un paquete que proporciona núcleos relacionados con Spark (PySparknúcleos SparkR y Scala) con comandos magic específicos y que usa Livy en el clúster para enviar trabajos de Spark.

Puede usar comandos magic siempre que tenga un kernel de Python en su cuaderno de EMR. Del mismo modo, cualquier kernel relacionado con Spark admite los comandos de Sparkmagic.

Los comandos Magic, también llamados magics, vienen en dos variedades:

  • magics de línea: estos comandos magic se indican con un único % como prefijo y funcionan en una sola línea de código.

  • magics de celda: estos comandos magic se indican con un doble %% como prefijo y funcionan en varias líneas de código.

Para ver todos los comandos magic disponibles, consulte Enumerar los comandos magic y Sparkmagic.

Consideraciones y limitaciones

  • EMR sin servidor no admite %%sh para ejecutar spark-submit. No es compatible con magic de Cuadernos de EMR.

  • Los clústeres de Amazon EMR en EKS no admiten los comandos de Sparkmagic para EMR Studio. Esto se debe a que los kernels de Spark que se utilizan con los puntos de conexión administrados están integrados en Kubernetes, y Sparkmagic y Livy no los admiten. Como solución alternativa, puedes establecer la configuración de Spark directamente en el SparkContext objeto, como se muestra en el siguiente ejemplo.

    spark.conf.set("spark.driver.maxResultSize", '6g')
  • Los siguientes magic comandos y acciones están prohibidos por AWS:

    • %alias

    • %alias_magic

    • %automagic

    • %macro

    • Modificar proxy_user con %configure

    • Modificar KERNEL_USERNAME con %env o %set_env

Enumerar los comandos magic y Sparkmagic

Utilice los siguientes comandos para enumerar los comandos magic disponibles:

  • %lsmagic muestra una lista de todas las funciones magic disponibles actualmente.

  • %%help muestra las funciones magic relacionadas con Spark que están disponibles actualmente en el paquete de Sparkmagic.

Usar %%configure para configurar Spark

Uno de los comandos más útiles de Sparkmagic es el comando %%configure, que configura los parámetros de creación de sesiones. En cuanto a los ajustes de conf, puede establecer cualquier configuración de Spark que se mencione en la documentación de configuración de Apache Spark.

ejemplo Agregar un archivo JAR externo a los Cuadernos de EMR desde el repositorio de Maven o Amazon S3

Puede usar el siguiente enfoque para agregar una dependencia de un archivo JAR externo a cualquier kernel relacionado con Spark compatible con Sparkmagic.

%%configure -f {"conf": { "spark.jars.packages": "com.jsuereth:scala-arm_2.11:2.0,ml.combust.bundle:bundle-ml_2.11:0.13.0,com.databricks:dbutils-api_2.11:0.0.3", "spark.jars": "s3://amzn-s3-demo-bucket/my-jar.jar" } }
ejemplo : Configurar Hudi

Puede utilizar el editor de cuadernos para configurar el cuaderno de EMR de modo que utilice Hudi.

%%configure { "conf": { "spark.jars": "hdfs://apps/hudi/lib/hudi-spark-bundle.jar,hdfs:///apps/hudi/lib/spark-spark-avro.jar", "spark.serializer": "org.apache.spark.serializer.KryoSerializer", "spark.sql.hive.convertMetastoreParquet":"false" } }

Usar %%sh para ejecutar spark-submit

La magic %%sh ejecuta comandos del intérprete de comandos en un subproceso en una instancia del clúster asociado. Normalmente, utilizaría uno de los kernels relacionados con Spark para ejecutar las aplicaciones de Spark en su clúster asociado. Sin embargo, si quiere usar un kernel de Python para enviar una aplicación de Spark, puede usar la siguiente magic y reemplazar el nombre del bucket por el nombre de su bucket en minúsculas.

%%sh spark-submit --master yarn --deploy-mode cluster s3://amzn-s3-demo-bucket/test.py

En este ejemplo, el clúster tiene que acceder a la ubicación de s3://amzn-s3-demo-bucket/test.py o se producirá un error en el comando.

Con la magic %%sh, puede usar cualquier comando de Linux. Si desea ejecutar algún comando de Spark o YARN, use una de las siguientes opciones para crear un usuario de Hadoop de emr-notebook y concederle permisos para ejecutar los comandos:

Usar %%display para visualizar los marcos de datos de Spark

Puede usar magic %%display para ver un marco de datos de Spark. Para usar esta magic, ejecute el siguiente comando.

%%display df

Elija ver los resultados en formato de tabla, como se muestra en la siguiente imagen.

Resultado de usar la magic %%display que muestra los resultados en formato de tabla.

También puede optar por visualizar sus datos con cinco tipos de gráficos. Las opciones son gráficos circulares, de dispersión, de líneas, de áreas y de barras.

Resultado de usar la magic %%display que muestra los resultados en formato de gráfico.

Usar la magic de Cuadernos de EMR

Amazon EMR proporciona la siguiente magic de Cuadernos de EMR que puede utilizar con los kernels basados en Python3 y Spark:

  • %mount_workspace_dir: monta el directorio del espacio de trabajo en el clúster para que pueda importar y ejecutar código desde otros archivos de su espacio de trabajo

    nota

    Con %mount_workspace_dir, solo el kernel de Python 3 puede acceder a sus sistemas de archivos locales. Los ejecutores de Spark no tendrán acceso al directorio montado con este kernel.

  • %umount_workspace_dir: desmonta el directorio del espacio de trabajo del clúster

  • %generate_s3_download_url: genera un enlace de descarga temporal en la salida del cuaderno para un objeto de Amazon S3

Requisitos previos

Antes de instalar la magic de Cuadernos de EMR, complete las siguientes tareas:

  • Asegúrese de que Función de servicio para EC2 instancias de clúster (perfil de EC2 instancia) tenga acceso de lectura a Amazon S3. EMR_EC2_DefaultRole con la política administrada AmazonElasticMapReduceforEC2Role cumple con este requisito. Si usa un rol o una política personalizados, asegúrese de que tenga los permisos de S3 necesarios.

    nota

    Los EMR magic Notebooks se ejecutan en un clúster como usuario del bloc de notas y utilizan EC2 el perfil de instancia para interactuar con Amazon S3. Al montar un directorio del espacio de trabajo en un clúster de EMR, todos los espacios de trabajo y cuadernos de EMR con permiso para asociarse a ese clúster pueden acceder al directorio montado.

    De forma predeterminada, los directorios se montan como de solo lectura. Si bien s3fs-fuse y goofys permiten los montajes de lectura y escritura, le recomendamos especialmente que no modifique los parámetros de montaje para montar directorios en modo de lectura y escritura. Si permite el acceso de escritura, todos los cambios que se realicen en el directorio se escribirán en el bucket de S3. Para evitar que se eliminen o sobrescriban accidentalmente, puede habilitar el control de versiones en su bucket de S3. Para obtener más información, consulte Uso del control de versiones en buckets de S3.

  • Ejecute uno de los siguientes scripts en su clúster para instalar las dependencias de la magic de Cuadernos de EMR. Para ejecutar un script, puede Usar acciones de arranque personalizadas o seguir las instrucciones de Ejecutar comandos y scripts en un clúster de Amazon EMR cuando ya tenga un clúster en ejecución.

    Puede elegir qué dependencia desea instalar. Tanto s3fs-fuse como goofys son herramientas FUSE (sistema de archivos en el espacio de usuario) que permiten montar un bucket de Amazon S3 como un sistema de archivos local en un clúster. La herramienta s3fs proporciona una experiencia similar a POSIX. La herramienta goofys es una buena opción si prefiere el rendimiento en lugar de un sistema de archivos compatible con POSIX.

    La serie Amazon EMR 7.x usa Amazon Linux 2023, que no es compatible con los repositorios EPEL. Si utiliza Amazon EMR 7.x, siga las instrucciones de s3fs-fuse para realizar la instalación GitHub. s3fs-fuse Si usa las series 5.x o 6.x, utilice los siguientes comandos para instalar s3fs-fuse.

    #!/bin/sh # Install the s3fs dependency for EMR Notebooks magics sudo amazon-linux-extras install epel -y sudo yum install s3fs-fuse -y

    OR

    #!/bin/sh # Install the goofys dependency for EMR Notebooks magics sudo wget https://github.com/kahing/goofys/releases/latest/download/goofys -P /usr/bin/ sudo chmod ugo+x /usr/bin/goofys

Instalar la magic de Cuadernos de EMR

nota

Con las versiones de 6.0 a 6.9.0 y de 5.0 a 5.36.0 de Amazon EMR, solo las versiones 0.2.0 y superiores del paquete emr-notebooks-magics admiten la magic %mount_workspace_dir.

Siga los pasos que se indican a continuación para instalar la magic de Cuadernos de EMR.

  1. En su cuaderno, ejecute los siguientes comandos para instalar el paquete emr-notebooks-magics.

    %pip install boto3 --upgrade %pip install botocore --upgrade %pip install emr-notebooks-magics --upgrade
  2. Reinicie el kernel para cargar la magic de Cuadernos de EMR.

  3. Verifique la instalación con el siguiente comando, que debería mostrar el texto de ayuda de la salida de %mount_workspace_dir.

    %mount_workspace_dir?

Montar un directorio del espacio de trabajo con %mount_workspace_dir

La magic %mount_workspace_dir le permite montar el directorio del espacio de trabajo en su clúster de EMR para que pueda importar y ejecutar otros archivos, módulos o paquetes almacenados en su directorio.

En el siguiente ejemplo, se monta todo el directorio del espacio de trabajo en un clúster y se especifica el argumento opcional <--fuse-type> para usar goofys para montar el directorio.

%mount_workspace_dir . <--fuse-type goofys>

Para comprobar que el directorio del espacio de trabajo esté montado, utilice el siguiente ejemplo para mostrar el directorio de trabajo actual con el comando ls. La salida debe mostrar todos los archivos del espacio de trabajo.

%%sh ls

Cuando termine de realizar cambios en su espacio de trabajo, puede desmontar el directorio del espacio de trabajo con el siguiente comando:

nota

El directorio del espacio de trabajo permanece montado en el clúster incluso cuando el espacio de trabajo está detenido o separado. Debe desmontar el directorio del espacio de trabajo de forma explícita.

%umount_workspace_dir

Descargar un objeto de Amazon S3 con %generate_s3_download_url

El comando generate_s3_download_url, crea una URL prefirmada para un objeto almacenado en Amazon S3. Puede usar la URL prefirmada para descargar el objeto a su máquina local. Por ejemplo, puede ejecutar generate_s3_download_url para descargar el resultado de una consulta SQL que su código escribe en Amazon S3.

De forma predeterminada, la URL prefirmada es válida durante 60 minutos. Puede cambiar el tiempo de caducidad especificando un número de segundos para la marca --expires-in. Por ejemplo, --expires-in 1800 crea una URL que es válida durante 30 minutos.

El siguiente ejemplo genera un enlace de descarga para un objeto especificando la ruta completa de Amazon S3: s3://EXAMPLE-DOC-BUCKET/path/to/my/object.

%generate_s3_download_url s3://EXAMPLE-DOC-BUCKET/path/to/my/object

Para obtener más información sobre el uso de generate_s3_download_url, ejecute el siguiente comando para mostrar el texto de ayuda.

%generate_s3_download_url?

Ejecución de un cuaderno en el modo sin encabezado con %execute_notebook

Con la magic %execute_notebook, puede ejecutar otro cuaderno en el modo sin encabezado y ver el resultado de cada celda que haya ejecutado. Esto magic requiere permisos adicionales para el rol de instancia que Amazon EMR y Amazon EC2 comparten. Para obtener más información sobre cómo conceder permisos adicionales, ejecute el comando %execute_notebook?.

Durante un trabajo de larga duración, es posible que el sistema entre en modo de suspensión debido a la inactividad o que pierda temporalmente la conectividad a internet. Esto podría interrumpir la conexión entre su navegador y el servidor de Jupyter. En este caso, podría perder la salida de las celdas que ha ejecutado y enviado desde el servidor de Jupyter.

Si ejecuta el cuaderno en el modo sin encabezado con la magic %execute_notebook, Cuadernos de EMR captura el resultado de las celdas que se han ejecutado, incluso si la red local sufre una interrupción. Cuadernos de EMR guarda la salida de forma incremental en un nuevo cuaderno con el mismo nombre que el cuaderno que ha utilizado. A continuación, Cuadernos de EMR coloca el cuaderno en una nueva carpeta dentro del espacio de trabajo. Las ejecuciones sin encabezado se realizan en el mismo clúster y utilizan el rol de servicio EMR_Notebook_DefaultRole, pero los argumentos adicionales pueden alterar los valores predeterminados.

Para ejecutar un cuaderno en el modo sin encabezado, utilice el siguiente comando:

%execute_notebook <relative-file-path>

Para especificar un ID de clúster y un rol de servicio para una ejecución sin encabezado, use el siguiente comando:

%execute_notebook <notebook_name>.ipynb --cluster-id <emr-cluster-id> --service-role <emr-notebook-service-role>

Cuando Amazon EMR y Amazon EC2 comparten un rol de instancia, el rol requiere los siguientes permisos adicionales:

JSON
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:StartNotebookExecution", "elasticmapreduce:DescribeNotebookExecution", "ec2:DescribeInstances" ], "Resource": [ "*" ], "Sid": "AllowELASTICMAPREDUCEStartnotebookexecution" }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::123456789012:role/EMR_Notebooks_DefaultRole" ], "Sid": "AllowIAMPassrole" } ] }
nota

Para usar magic %execute_notebook, instale la versión 0.2.3 o una superior del paquete emr-notebooks-magics.