

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Soumission de tâches EMR sans serveur depuis Airflow
<a name="using-airflow"></a>

Le fournisseur Amazon d'Apache Airflow fournit des opérateurs EMR sans serveur. Pour plus d'informations sur les opérateurs, consultez la section [Amazon EMR Serverless Operators dans la documentation Apache](https://airflow.apache.org/docs/apache-airflow-providers-amazon/stable/operators/emr_serverless.html) Airflow.

Vous pouvez l'utiliser `EmrServerlessCreateApplicationOperator` pour créer une application Spark ou Hive. Vous pouvez également l'utiliser `EmrServerlessStartJobOperator` pour démarrer une ou plusieurs tâches avec votre nouvelle application. 

Pour utiliser l'opérateur avec Amazon Managed Workflows for Apache Airflow (MWAA) avec Airflow 2.2.2, ajoutez la ligne suivante à votre `requirements.txt` fichier et mettez à jour votre environnement MWAA pour utiliser le nouveau fichier. 

```
apache-airflow-providers-amazon==6.0.0
boto3>=1.23.9
```

Notez que le support EMR Serverless a été ajouté à la version 5.0.0 du fournisseur Amazon. La version 6.0.0 est la dernière version compatible avec Airflow 2.2.2. Vous pouvez utiliser les versions ultérieures avec Airflow 2.4.3 sur MWAA.

L'exemple abrégé suivant montre comment créer une application, exécuter plusieurs tâches Spark, puis arrêter l'application. Un exemple complet est disponible dans le référentiel [EMR Serverless](https://github.com/aws-samples/emr-serverless-samples/tree/main/airflow) Samples. GitHub Pour plus de détails sur `sparkSubmit` la configuration, reportez-vous à[Utilisation des configurations Spark lorsque vous exécutez des tâches EMR sans serveur](jobs-spark.md).

```
from datetime import datetime

from airflow import DAG
from airflow.providers.amazon.aws.operators.emr import (
    EmrServerlessCreateApplicationOperator,
    EmrServerlessStartJobOperator,
    EmrServerlessDeleteApplicationOperator,
)

# Replace these with your correct values
JOB_ROLE_ARN = "arn:aws:iam::account-id:role/emr_serverless_default_role"
S3_LOGS_BUCKET = "amzn-s3-demo-bucket"

DEFAULT_MONITORING_CONFIG = {
    "monitoringConfiguration": {
        "s3MonitoringConfiguration": {"logUri": f"s3://amzn-s3-demo-bucket/logs/"}
    },
}

with DAG(
    dag_id="example_endtoend_emr_serverless_job",
    schedule_interval=None,
    start_date=datetime(2021, 1, 1),
    tags=["example"],
    catchup=False,
) as dag:
    create_app = EmrServerlessCreateApplicationOperator(
        task_id="create_spark_app",
        job_type="SPARK",
        release_label="emr-6.7.0",
        config={"name": "airflow-test"},
    )

    application_id = create_app.output

    job1 = EmrServerlessStartJobOperator(
        task_id="start_job_1",
        application_id=application_id,
        execution_role_arn=JOB_ROLE_ARN,
        job_driver={
            "sparkSubmit": {
                "entryPoint": "local:///usr/lib/spark/examples/src/main/python/pi_fail.py",
            }
        },
        configuration_overrides=DEFAULT_MONITORING_CONFIG,
    )

    job2 = EmrServerlessStartJobOperator(
        task_id="start_job_2",
        application_id=application_id,
        execution_role_arn=JOB_ROLE_ARN,
        job_driver={
            "sparkSubmit": {
                "entryPoint": "local:///usr/lib/spark/examples/src/main/python/pi.py",
                "entryPointArguments": ["1000"]
            }
        },
        configuration_overrides=DEFAULT_MONITORING_CONFIG,
    )

    delete_app = EmrServerlessDeleteApplicationOperator(
        task_id="delete_app",
        application_id=application_id,
        trigger_rule="all_done",
    )

    (create_app >> [job1, job2] >> delete_app)
```