Configuración de las propiedades de trabajos del intérprete de comandos de Python en AWS Glue - 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 de las propiedades de trabajos del intérprete de comandos de Python en AWS Glue

Un trabajo de shell de Python puede usarse para ejecutar scripts de Python como un shell en AWS Glue. Con un trabajo del intérprete de comandos de Python puede ejecutar scripts compatibles con Python 3.6 o Python 3.9.

Limitaciones

Tenga en cuenta las siguientes limitaciones de los trabajos de Python Shell:

  • No se pueden utilizar marcadores de trabajos con los trabajos de shell de Python.

  • No se puede empaquetar ninguna biblioteca de Python como archivos .egg en Python 3.9 y superiores. En su lugar, utilice .whl.

  • No se puede usar la opción --extra-files debido a una limitación en las copias temporales de los datos de S3.

Definición de las propiedades de trabajos de shell de Python

Estas secciones describen la definición de propiedades de trabajo en AWS Glue Studio, o mediante el CLI de AWS.

AWS Glue Studio

Al definir su trabajo de shell de Python en AWS Glue Studio, debe proporcionar algunas de las siguientes propiedades:

Rol de IAM

Especifique el rol de AWS Identity and Access Management (IAM) que se usa para dar una autorización a los recursos que se utilizan para ejecutar el flujo de trabajo y obtener acceso a los almacenes de datos. Para obtener más información acerca de los permisos para ejecutar trabajos en AWS Glue, consulte Gestión de identidad y acceso para AWS Glue.

Tipo

Elija Python shell (Shell de Python) para ejecutar un script de Python con el comando de trabajo llamado pythonshell.

Versión de Python

Elija la versión de Python. El valor por defecto es Python 3.9. Las versiones válidas son Python 3.6 y Python 3.9.

Cargar bibliotecas de análisis comunes (recomendado)

Elija esta opción para incluir bibliotecas comunes para Python 3.9 en el shell de Python.

Si sus bibliotecas son personalizadas o entran en conflicto con las preinstaladas, puede optar por no instalar bibliotecas comunes. Sin embargo, puede instalar bibliotecas adicionales además de las bibliotecas comunes.

Si selecciona esta opción, la opción library-set se establece en analytics. Al anular la selección de esta opción, la opción library-set se establece en none.

Nombre de archivo de script y ruta de script

El código del script define la lógica de procedimiento del trabajo. Proporcione el nombre del script y la ubicación en Amazon Simple Storage Service (Amazon S3). Compruebe que no haya un archivo con el mismo nombre que el directorio de script en la ruta. Para obtener más información acerca de cómo usar scripts, consulte Guía de programación de AWS Glue.

Script

El código del script define la lógica de procedimiento del trabajo. Puede codificar el script en Python 3.6 o Python 3.9. Puede editar scripts en AWS Glue Studio.

Unidades de procesamiento de datos

El número máximo de unidades de procesamiento de datos (DPU) de AWS Glue que se pueden asignar cuando se ejecute este trabajo. Una DPU es una medida relativa de la potencia de procesamiento que consta de 4 vCPU de capacidad de cómputo y 16 GB de memoria. Para más información, consulte Precios de AWS Glue.

Puede establecer el valor en 0.0625 o 1. El valor predeterminado es 0.0625. En cualquier caso, el disco local para la instancia será de 20 GB.

CLI

También puede crear un trabajo de shell de Python con la AWS CLI, como en el siguiente ejemplo.

aws glue create-job --name python-job-cli --role Glue_DefaultRole --command '{"Name" : "pythonshell", "PythonVersion": "3.9", "ScriptLocation" : "s3://DOC-EXAMPLE-BUCKET/scriptname.py"}' --max-capacity 0.0625
nota

No es necesario especificar la versión de AWS Glue ya que el parámetro --glue-version no se aplica a los trabajos del intérprete de comandos de AWS Glue. Se ignorará cualquier versión especificada.

Trabajos que crea con el valor AWS CLI predeterminado en Python 3. Las versiones válidas de Python son 3 (que corresponden a 3.6) y 3.9. Para especificar Python 3.6, agregue esta tupla al parámetro --command: "PythonVersion":"3"

Para especificar Python 3.9, agregue esta tupla al parámetro --command: "PythonVersion":"3.9"

Para establecer la capacidad máxima utilizada por un trabajo de shell de Python, proporcione el parámetro --max-capacity. En los trabajos de shell de Python, no se puede utilizar el parámetro --allocated-capacity.

Bibliotecas compatibles con trabajos de shell de Python

En el shell de Python con Python 3.9, puede elegir el conjunto de bibliotecas para usar los conjuntos de bibliotecas preempaquetados según sus necesidades. Puede utilizar la opción library-set para elegir el conjunto de bibliotecas. Los valores válidos son analytics y none.

El entorno para la ejecución de un trabajo de shell de Python admite las siguientes bibliotecas:

Versión de Python Python 3.6 Python 3.9
Conjunto de bibliotecas N/D análisis ninguno
avro 1.11.0
awscli 116.242 1.23.5 1.23.5
awswrangler 2.15.1
botocore 1.12.232 1.24.21 1.23.5
boto3 1.9.203 1.21.21
elasticsearch 8.2.0
numpy 1.16.2 1.22.3
pandas 0.24.2 1.4.2
psycopg2 2.9.3
pyathena 2.5.3
PyGreSQL 5.0.6
PyMySQL 1.0.2
pyodbc 4.0.32
pyorc 0.6.0
redshift-connector 2.0.907
solicitudes 2.22.0 2.27.1
scikit-learn 0.20.3 1.0.2
scipy 1.2.1 1.8.0
SQLAlchemy 1.4.36
s3fs 2.022.3.0

Puede utilizar la biblioteca NumPy en un trabajo de shell de Python para cálculos científicos. Para obtener más información, consulte NumPy. En el siguiente ejemplo se muestra un script NumPy que puede utilizarse en un trabajo de shell de Python. El script imprime "Hello world" y los resultados de varios cálculos matemáticos.

import numpy as np print("Hello world") a = np.array([20,30,40,50]) print(a) b = np.arange( 4 ) print(b) c = a-b print(c) d = b**2 print(d)

Proporcionar su propia biblioteca de Python

Uso de PIP

El shell de Python que usa Python 3.9 también le permite proporcionar módulos de Python adicionales o versiones diferentes al nivel de trabajo. Puede utilizar la opción --additional-python-modules con una lista de módulos Python separados por comas para agregar un nuevo módulo o cambiar la versión de un módulo existente. No puede proporcionar módulos de Python personalizados alojados en Amazon S3 con este parámetro al usar trabajos de intérprete de comandos de Python.

Por ejemplo, para actualizar o agregar un nuevo módulo scikit-learn, utilice la siguiente clave y valor: "--additional-python-modules", "scikit-learn==0.21.3".

AWS Glue utiliza el instalador de paquetes de Python (pip3) para instalar los módulos adicionales. Puede incluir opciones de pip3 adicionales dentro del valor --additional-python-modules. Por ejemplo, "scikit-learn==0.21.3 -i https://pypi.python.org/simple/". Se aplican incompatibilidades o limitaciones de pip3.

nota

Para evitar incompatibilidades en el futuro, recomendamos usar bibliotecas creadas para Python 3.9.

Uso de un archivo Egg o Whl

Es posible que ya tenga una o varias bibliotecas de Python empaquetadas como un archivo .egg o .whl. En caso afirmativo, puede especificarlos en su trabajo utilizando la AWS Command Line Interface (AWS CLI) bajo la marca "--extra-py-files", como en el siguiente ejemplo.

aws glue create-job --name python-redshift-test-cli --role role --command '{"Name" : "pythonshell", "ScriptLocation" : "s3://MyBucket/python/library/redshift_test.py"}' --connections Connections=connection-name --default-arguments '{"--extra-py-files" : ["s3://DOC-EXAMPLE-BUCKET/EGG-FILE", "s3://DOC-EXAMPLE-BUCKET/WHEEL-FILE"]}'

Si no está seguro de cómo crear un archivo .egg o .whl desde una biblioteca de Python, siga estos pasos. Este ejemplo es aplicable en macOS, Linux y Windows Subsystem for Linux (WSL).

Para crear un archivo .egg o.whl de Python
  1. Cree un clúster de Amazon Redshift en una nube virtual privada (VPC) y agregue algunos datos a una tabla.

  2. Cree una conexión de AWS Glue para la combinación VPC-GrupoDeSeguridad-Subred que utilizó para crear el clúster. Compruebe que la conexión se realiza correctamente.

  3. Cree un directorio llamado redshift_example y cree un archivo denominado setup.py. Pegue el siguiente código en setup.py.

    from setuptools import setup setup( name="redshift_module", version="0.1", packages=['redshift_module'] )
  4. En el directorio redshift_example, cree un directorio redshift_module. En el directorio redshift_module, cree los archivos __init__.py y pygresql_redshift_common.py.

  5. Deje vacío el archivo __init__.py. En pygresql_redshift_common.py, pegue el siguiente código: Sustituya port, db_name, user, y password_for_user con los detalles específicos de su clúster de Amazon Redshift. Sustituya table_name por el nombre de la tabla en Amazon Redshift.

    import pg def get_connection(host): rs_conn_string = "host=%s port=%s dbname=%s user=%s password=%s" % ( host, port, db_name, user, password_for_user) rs_conn = pg.connect(dbname=rs_conn_string) rs_conn.query("set statement_timeout = 1200000") return rs_conn def query(con): statement = "Select * from table_name;" res = con.query(statement) return res
  6. Si no está ya en él, cambie al directorio redshift_example.

  7. Realice una de las siguientes acciones siguientes:

    • Ejecute el siguiente comando para crear un archivo .egg.

      python setup.py bdist_egg
    • Ejecute el siguiente comando para crear un archivo .whl.

      python setup.py bdist_wheel
  8. Instale las dependencias necesarias para el comando anterior.

  9. El comando crea un archivo en el directorio dist:

    • Si ha creado un archivo egg, se llamará redshift_module-0.1-py2.7.egg.

    • Si ha creado un archivo wheel, se llamará redshift_module-0.1-py2.7-none-any.whl.

    Cargue este archivo en Amazon S3.

    En este ejemplo, la ruta del archivo cargado es s3://DOC-EXAMPLE-BUCKET/EGG-FILE o s3://DOC-EXAMPLE-BUCKET/WHEEL-FILE.

  10. Cree un archivo de Python que se debe usar como script para el trabajo de AWS Glue y añada el siguiente código al archivo.

    from redshift_module import pygresql_redshift_common as rs_common con1 = rs_common.get_connection(redshift_endpoint) res = rs_common.query(con1) print "Rows in the table cities are: " print res
  11. Cargue el archivo anterior en Amazon S3. En este ejemplo, la ruta del archivo cargado es s3://DOC-EXAMPLE-BUCKET/scriptname.py.

  12. Cree un trabajo de shell de Python con este script. En la consola de AWS Glue, en la página Job properties (Propiedades del trabajo), especifique la ruta del archivo .egg/.whl en el cuadro Python library path (Ruta de la biblioteca Python). Si tiene varios archivos .egg/.whl y archivos de Python, proporcione una lista separada por comas en este cuadro.

    Al modificar o cambiar el nombre de los archivos .egg, los nombres de archivo deben usar los nombres predeterminados generados por el comando "python setup.py bdist_egg" o deben cumplir con las convenciones de nomenclatura del módulo Python. Para obtener más información, consulte Style Guide for Python Code.

    Con la AWS CLI, cree un trabajo con un comando, como en el siguiente ejemplo.

    aws glue create-job --name python-redshift-test-cli --role Role --command '{"Name" : "pythonshell", "ScriptLocation" : "s3://DOC-EXAMPLE-BUCKET/scriptname.py"}' --connections Connections="connection-name" --default-arguments '{"--extra-py-files" : ["s3://DOC-EXAMPLE-BUCKET/EGG-FILE", "s3://DOC-EXAMPLE-BUCKET/WHEEL-FILE"]}'

    Cuando se ejecuta el trabajo, el script imprime las filas creadas en la tabla table_name en el clúster de Amazon Redshift.

Use AWS CloudFormation con los trabajos del intérprete de comandos de Python en AWS Glue

Puede usar AWS CloudFormation con los trabajos del intérprete de comandos de Python en AWS Glue. A continuación, se muestra un ejemplo:

AWSTemplateFormatVersion: 2010-09-09 Resources: Python39Job: Type: 'AWS::Glue::Job' Properties: Command: Name: pythonshell PythonVersion: '3.9' ScriptLocation: 's3://bucket/location' MaxRetries: 0 Name: python-39-job Role: RoleName

El grupo de Amazon CloudWatch Logs para la salida de los trabajos de shell de Python es /aws-glue/python-jobs/output. En el caso de los errores, consulte el grupo de registros /aws-glue/python-jobs/error.