En utilisant AWS re:Post, vous acceptez les AWS re:Post Conditions d’utilisation

Comment puis-je utiliser un autre service AWS pour soumettre une tâche EMR sans serveur ?

Lecture de 4 minute(s)
0

Je souhaite utiliser un autre service AWS pour soumettre une tâche Amazon EMR sans serveur.

Résolution

Remarque : si des erreurs surviennent lorsque vous exécutez des commandes de l’interface de la ligne de commande AWS (AWS CLI), consultez la page Résoudre les erreurs liées à AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l’AWS CLI.

Pour utiliser un autre service AWS afin de soumettre une tâche EMR sans serveur, utilisez les méthodes suivantes :

AWS Step Functions

Pour utiliser Step Functions afin de soumettre une tâche EMR sans serveur, créez une machine d'état Step Functions qui soumet la tâche en tant qu'étape. Un exemple de définition de machine d’état Step Functions qui soumet une tâche EMR sans serveur est fourni ci-dessous. De plus, la machine d’état passe à un état de réussite ou d'échec en fonction du statut de tâche reçu.

{
  "Comment": "Submit an EMR Serverless job",
  "StartAt": "Submit EMR Serverless Job",
  "States": {
    "Submit EMR Serverless Job": {
      "Type": "Task",
      "Resource": "arn:aws:states:::aws-sdk:emr-serverless:startJobRun",
      "Parameters": {
        "ApplicationId": "example-application-id",
        "ExecutionRoleArn": "example-execution-role-arn",
        "JobDriver": {
          "SparkSubmitJobDriver": {
            "EntryPoint": "example-entry-point",
            "SparkSubmitParameters": "--class example-main-class --jars example-jar-paths"
          }
        },
        "ConfigurationOverrides": {
          "MonitoringConfiguration": {
            "PersistentAppUI": "ENABLED"
          }
        }
      },
      "Next": "Get Job Run Status"
    },
    "Get Job Run Status": {
      "Type": "Task",
      "Resource": "arn:aws:states:::aws-sdk:emr-serverless:getJobRun",
      "Parameters": {
        "JobRunId.$": "$$.Task.Submit EMR Serverless Job.Output.JobRunId"
      },
      "Next": "Job Run Succeeded?"
    },
    "Job Run Succeeded?": {
      "Type": "Choice",
      "Choices": [
        {
          "Variable": "$$.Task.Get Job Run Status.Output.JobRun.State",
          "StringEquals": "SUCCEEDED",
          "Next": "Success"
        }
      ],
      "Default": "Failure"
    },
    "Success": {
      "Type": "Succeed"
    },
    "Failure": {
      "Type": "Fail"
    }
  }
}

Remarque : Remplacez example-application-id, example-execution-role-arn, example-entry-point, example-main-class et example-jar-paths par les valeurs souhaitées.

Kits SDK AWS

Pour soumettre des tâches par programmation, utilisez les kits SDK AWS pour interagir avec l'API EMR sans serveur. Un exemple d'utilisation du kit SDK AWS for Python (Boto3) pour soumettre une tâche EMR sans serveur est fourni ci-dessous :

Remarque : Le script Python suivant utilise la bibliothèque Boto3 pour appeler la méthode start_job_run de l'API EMR sans serveur. Puis, l'ID d'exécution de la tâche renvoyé par l'API est imprimé.

import boto3

emr_serverless = boto3.client('emr-serverless')

response = emr_serverless.start_job_run(
    ApplicationId='example-application-id',
    ExecutionRoleArn='example-execution-role-arn',
    JobDriver={
        'SparkSubmitJobDriver': {
            'EntryPoint': 'example-entry-point',
            'SparkSubmitParameters': '--class example-main-class --jars example-jar-paths'
        }
    },
    ConfigurationOverrides={
        'MonitoringConfiguration': {
            'PersistentAppUI': 'ENABLED'
        }
    }
)

job_run_id = response['JobRunId']
print(f'Submitted EMR Serverless job with ID: {job_run_id}')

Remarque : Remplacez example-application-id, example-execution-role-arn, example-entry-point, example-main-class et example-jar-paths par les valeurs souhaitées.

AWS CLI

Pour utiliser l'AWS CLI afin de soumettre une tâche EMR sans serveur, exécutez la commande start-job-run suivante :

aws emr-serverless start-job-run \
    --application-id example-application-id \
    --execution-role-arn example-execution-role-arn \
    --job-driver '{"SparkSubmitJobDriver": {"EntryPoint": "example-entry-point", "SparkSubmitParameters": "--class example-main-class --jars example-jar-paths"}}' \
    --configuration-overrides '{"MonitoringConfiguration": {"PersistentAppUI": "ENABLED"}}'

Remarque : Remplacez example-application-id, example-execution-role-arn, example-entry-point, example-main-class et example-jar-paths par les valeurs souhaitées.

AWS CloudFormation

AWS CloudFormation peut être utilisé pour définir et provisionner des ressources EMR sans serveur. Un exemple de modèle CloudFormation qui crée une application EMR sans serveur est fourni ci-dessous.

Remarque : Le modèle CloudFormation suivant crée une application EMR sans serveur avec une étiquette de version et une capacité initiale spécifiées.

Resources:
  EMRServerlessApplication:
    Type: AWS::EMRServerless::Application
    Properties:
      ReleaseLabel: emr-6.3.0
      Type: SPARK
      InitialCapacity:
        WorkerCount: 2
        WorkerConfiguration:
          CPU: '2vCPU'
          Memory: '8GB'

  EMRServerlessJobRun:
    Type: AWS::EMRServerless::JobRun
    Properties:
      ApplicationId: !Ref EMRServerlessApplication
      ExecutionRoleArn: example-execution-role-arn
      JobDriver:
        SparkSubmitJobDriver:
          EntryPoint: example-entry-point
          SparkSubmitParameters: '--class example-main-class --jars example-jar-paths'
      ConfigurationOverrides:
        MonitoringConfiguration:
          PersistentAppUI: ENABLED

Remarque : Remplacez example-execution-role-arn, example-entry-point, example-main-class et example-jar-paths par les valeurs souhaitées.

Informations connexes

Exécution de tâches

Exécuter une tâche EMR sans serveur

Orchestrer des tâches EMR sans serveur avec AWS Step Functions

Exemples EMR sans serveur sur le site web GitHub

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 2 mois