Al usar AWS re:Post, aceptas las AWS re:Post Términos de uso

¿Cómo uso otro servicio de AWS para enviar un trabajo de EMR sin servidor?

4 minutos de lectura
0

Quiero usar otro servicio de AWS para enviar un trabajo de Amazon EMR sin servidor.

Solución

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulte Troubleshoot AWS CLI errors. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.

Para usar otro servicio de AWS para enviar un trabajo de EMR sin servidor, utiliza los métodos siguientes:

AWS Step Functions

Para usar Step Functions para enviar un trabajo de EMR sin servidor, crea una máquina de estado de Step Functions que envíe el trabajo como un paso. El siguiente es un ejemplo de una definición de máquina de estado de Step Functions que envía un trabajo de EMR sin servidor. Además, la máquina de estado pasa a un estado de éxito o error según el estado del trabajo recibido.

{
  "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"
    }
  }
}

Nota: Sustituye example-application-id, example-execution-role-arn, example-entry-point, example-main-class y example-jar-paths con los valores necesarios.

AWS SDK

Para enviar trabajos mediante programación, utilice los AWS SDK para interactuar con la API de EMR sin servidor. El siguiente es un ejemplo de cómo usar el AWS SDK para Python (Boto3) para enviar un trabajo de EMR sin servidor:

Nota: El siguiente script de Python usa la biblioteca Boto3 para llamar al método start_job_run de la API de EMR sin servidor. A continuación, se imprime el ID de ejecución del trabajo devuelto por la API.

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}')

Nota: Sustituye example-application-id, example-execution-role-arn, example-entry-point, example-main-class y example-jar-paths con los valores necesarios.

AWS CLI

Para usar la AWS CLI para enviar un trabajo de EMR sin servidor, ejecuta el siguiente comando con start-job-run:

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"}}'

Nota: Sustituye example-application-id, example-execution-role-arn, example-entry-point, example-main-class y example-jar-paths con los valores necesarios.

AWS CloudFormation

AWS CloudFormation se puede utilizar para definir y aprovisionar recursos de EMR sin servidor. El siguiente es un ejemplo de una plantilla de CloudFormation que crea una aplicación de EMR sin servidor.

Nota: La siguiente plantilla de CloudFormation crea una aplicación de EMR sin servidor con una etiqueta de versión y una capacidad inicial especificadas.

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

Nota: Sustituye example-execution-role-arn, example-entry-point, example-main-class y example-jar-paths con los valores necesarios.

Información relacionada

Running jobs (Trabajos en ejecución)

Run an EMR Serverless job (Ejecución de un trabajo de EMR sin servidor)

Orchestrate EMR Serverless jobs with AWS Step Functions (Orquestación de trabajos de EMR sin servidor con AWS Step Functions)

Ejemplos de EMR sin servidor en el sitio web de GitHub

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 meses