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