Commencer à utiliser l'opérateur Spark pour Amazon EMR sur EKS - Amazon EMR

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.

Commencer à utiliser l'opérateur Spark pour Amazon EMR sur EKS

Cette rubrique vous aide à commencer à utiliser l'opérateur Spark sur Amazon EKS en déployant une application Spark et une application Schedule Spark.

Installation de l'opérateur Spark

Procédez comme suit pour installer l'opérateur Kubernetes pour Apache Spark.

  1. Si vous ne l'avez pas déjà fait, suivez les étapes de Configuration de l'opérateur Spark pour Amazon EMR sur EKS.

  2. Authentifiez votre client Helm auprès du ECR registre Amazon. Dans la commande suivante, remplacez region-id valeurs avec vos préférences Région AWS, et les valeurs correspondantes ECR-registry-account valeur de la région indiquée Comptes ECR de registre Amazon par région sur la page.

    aws ecr get-login-password \ --region region-id | helm registry login \ --username AWS \ --password-stdin ECR-registry-account.dkr.ecr.region-id.amazonaws.com
  3. Installez l'opérateur Spark à l'aide de la commande suivante.

    Pour le --version paramètre du graphique Helm, utilisez votre étiquette de EMR version Amazon avec le emr- préfixe et le suffixe de date supprimés. Par exemple, pour la version emr-6.12.0-java17-latest, spécifiez 6.12.0-java17. L'exemple de la commande ci-dessous utilise la version emr-7.2.0-latest, elle spécifie donc 7.2.0 pour les Charts de Helm --version.

    helm install spark-operator-demo \ oci://895885662937.dkr.ecr.region-id.amazonaws.com/spark-operator \ --set emrContainers.awsRegion=region-id \ --version 7.2.0 \ --namespace spark-operator \ --create-namespace

    Par défaut, la commande crée un compte de service emr-containers-sa-spark-operator pour l'opérateur Spark. Pour utiliser un autre compte de service, saisissez l'argument serviceAccounts.sparkoperator.name. Par exemple :

    --set serviceAccounts.sparkoperator.name my-service-account-for-spark-operator

    Si vous souhaitez utiliser l'autoscaling vertical avec l'opérateur Spark, ajoutez la ligne suivante à la commande d'installation pour autoriser les webhooks pour l'opérateur :

    --set webhook.enable=true
  4. Vérifiez que vous avez installé les Charts de Helm à l'aide de la commande helm list :

    helm list --namespace spark-operator -o yaml

    La commande helm list doit vous renvoyer les informations relatives à la version des Charts de Helm qui vient d'être déployée :

    app_version: v1beta2-1.3.8-3.1.1 chart: spark-operator-7.2.0 name: spark-operator-demo namespace: spark-operator revision: "1" status: deployed updated: 2023-03-14 18:20:02.721638196 +0000 UTC
  5. Terminez l'installation avec toutes les options supplémentaires dont vous avez besoin. Pour plus d'informations, consultez la spark-on-k8s-operatordocumentation sur GitHub.

Exécution d'une application Spark

L'opérateur Spark est pris en charge par Amazon EMR 6.10.0 ou version ultérieure. Lorsque vous installez l'opérateur Spark, il crée le compte de service emr-containers-sa-spark pour exécuter les applications Spark par défaut. Suivez les étapes ci-dessous pour exécuter une application Spark avec l'opérateur Spark EMR sur Amazon EKS 6.10.0 ou version ultérieure.

  1. Pour pouvoir exécuter une application Spark à l'aide de l'opérateur Spark, suivez les étapes indiquées dans Configuration de l'opérateur Spark pour Amazon EMR sur EKS et Installation de l'opérateur Spark.

  2. Créez un fichier de définition SparkApplication spark-pi.yaml avec le contenu suivant :

    apiVersion: "sparkoperator.k8s.io/v1beta2" kind: SparkApplication metadata: name: spark-pi namespace: spark-operator spec: type: Scala mode: cluster image: "895885662937.dkr.ecr.us-west-2.amazonaws.com/spark/emr-6.10.0:latest" imagePullPolicy: Always mainClass: org.apache.spark.examples.SparkPi mainApplicationFile: "local:///usr/lib/spark/examples/jars/spark-examples.jar" sparkVersion: "3.3.1" restartPolicy: type: Never volumes: - name: "test-volume" hostPath: path: "/tmp" type: Directory driver: cores: 1 coreLimit: "1200m" memory: "512m" labels: version: 3.3.1 serviceAccount: emr-containers-sa-spark volumeMounts: - name: "test-volume" mountPath: "/tmp" executor: cores: 1 instances: 1 memory: "512m" labels: version: 3.3.1 volumeMounts: - name: "test-volume" mountPath: "/tmp"
  3. Maintenant, soumettez l'application Spark à l'aide de la commande suivante. Cela créera également un objet SparkApplication nommé spark-pi :

    kubectl apply -f spark-pi.yaml
  4. Vérifiez les événements de l'objet SparkApplication à l'aide de la commande suivante :

    kubectl describe sparkapplication spark-pi --namespace spark-operator

Pour plus d'informations sur l'envoi d'applications à Spark via l'opérateur Spark, consultez la section Utiliser un SparkApplication dans la spark-on-k8s-operator documentation sur GitHub.

Utiliser Amazon S3 pour le stockage

Pour utiliser Amazon S3 comme option de stockage de fichiers, ajoutez les configurations suivantes à votre YAML fichier.

hadoopConf: # EMRFS filesystem fs.s3.customAWSCredentialsProvider: com.amazonaws.auth.WebIdentityTokenCredentialsProvider fs.s3.impl: com.amazon.ws.emr.hadoop.fs.EmrFileSystem fs.AbstractFileSystem.s3.impl: org.apache.hadoop.fs.s3.EMRFSDelegate fs.s3.buffer.dir: /mnt/s3 fs.s3.getObject.initialSocketTimeoutMilliseconds: "2000" mapreduce.fileoutputcommitter.algorithm.version.emr_internal_use_only.EmrFileSystem: "2" mapreduce.fileoutputcommitter.cleanup-failures.ignored.emr_internal_use_only.EmrFileSystem: "true" sparkConf: # Required for EMR Runtime spark.driver.extraClassPath: /usr/lib/hadoop-lzo/lib/*:/usr/lib/hadoop/hadoop-aws.jar:/usr/share/aws/aws-java-sdk/*:/usr/share/aws/emr/emrfs/conf:/usr/share/aws/emr/emrfs/lib/*:/usr/share/aws/emr/emrfs/auxlib/*:/usr/share/aws/emr/security/conf:/usr/share/aws/emr/security/lib/*:/usr/share/aws/hmclient/lib/aws-glue-datacatalog-spark-client.jar:/usr/share/java/Hive-JSON-Serde/hive-openx-serde.jar:/usr/share/aws/sagemaker-spark-sdk/lib/sagemaker-spark-sdk.jar:/home/hadoop/extrajars/* spark.driver.extraLibraryPath: /usr/lib/hadoop/lib/native:/usr/lib/hadoop-lzo/lib/native:/docker/usr/lib/hadoop/lib/native:/docker/usr/lib/hadoop-lzo/lib/native spark.executor.extraClassPath: /usr/lib/hadoop-lzo/lib/*:/usr/lib/hadoop/hadoop-aws.jar:/usr/share/aws/aws-java-sdk/*:/usr/share/aws/emr/emrfs/conf:/usr/share/aws/emr/emrfs/lib/*:/usr/share/aws/emr/emrfs/auxlib/*:/usr/share/aws/emr/security/conf:/usr/share/aws/emr/security/lib/*:/usr/share/aws/hmclient/lib/aws-glue-datacatalog-spark-client.jar:/usr/share/java/Hive-JSON-Serde/hive-openx-serde.jar:/usr/share/aws/sagemaker-spark-sdk/lib/sagemaker-spark-sdk.jar:/home/hadoop/extrajars/* spark.executor.extraLibraryPath: /usr/lib/hadoop/lib/native:/usr/lib/hadoop-lzo/lib/native:/docker/usr/lib/hadoop/lib/native:/docker/usr/lib/hadoop-lzo/lib/native

Si vous utilisez les EMR versions 7.2.0 et supérieures d'Amazon, les configurations sont incluses par défaut. Dans ce cas, vous pouvez définir le chemin du fichier sur le fichier d'application Spark au s3://<bucket_name>/<file_path> lieu de le définir local://<file_path> dans le YAML fichier d'application Spark.

Soumettez ensuite l'application Spark comme d'habitude.