Cómo empezar con el operador Spark para Amazon EMR en EKS - Amazon EMR

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Cómo empezar con el operador Spark para Amazon EMR en EKS

Este tema te ayuda a empezar a utilizar el operador Spark en Amazon EKS mediante la implementación de una aplicación Spark y una aplicación Schedule Spark.

Instalar el operador de Spark

Siga estos pasos para instalar el operador de Kubernetes para Apache Spark.

  1. Si aún no lo ha hecho, complete los pasos de Configuración del operador Spark para Amazon EMR en EKS.

  2. Autentica tu cliente Helm en el ECR registro de Amazon. En el siguiente comando, sustituye los region-id valores de la Cuentas de ECR registro de Amazon por región página por los que prefieras Región de AWS y por el ECR-registry-account valor correspondiente a la región.

    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. Instale el operador de Spark con el siguiente comando.

    Para el --version parámetro del gráfico Helm, usa tu etiqueta de EMR lanzamiento de Amazon sin el emr- prefijo y el sufijo de fecha. Por ejemplo, con la versión emr-6.12.0-java17-latest, especifique 6.12.0-java17. El ejemplo del siguiente comando usa la versión emr-7.3.0-latest, por lo que especifica 7.3.0 para el gráfico 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.3.0 \ --namespace spark-operator \ --create-namespace

    De forma predeterminada, el comando crea una cuenta de servicio emr-containers-sa-spark-operator para el operador de Spark. Para usar una cuenta de servicio diferente, proporcione el argumento serviceAccounts.sparkoperator.name. Por ejemplo:

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

    Si quiere usar el escalado automático vertical con el operador de Spark, agregue la siguiente línea al comando de instalación para admitir webhooks para el operador:

    --set webhook.enable=true
  4. Compruebe que haya instalado el gráfico de Helm con el comando helm list:

    helm list --namespace spark-operator -o yaml

    El comando helm list debería devolver la información de lanzamiento del gráfico de Helm recién implementado:

    app_version: v1beta2-1.3.8-3.1.1 chart: spark-operator-7.3.0 name: spark-operator-demo namespace: spark-operator revision: "1" status: deployed updated: 2023-03-14 18:20:02.721638196 +0000 UTC
  5. Complete la instalación con todas las opciones adicionales que necesite. Para obtener más información, consulta la spark-on-k8s-operatordocumentación sobre. GitHub

Ejecutar una aplicación de Spark

El operador Spark es compatible con Amazon EMR 6.10.0 o superior. Cuando instala el operador de Spark, este crea la cuenta de servicio emr-containers-sa-spark para ejecutar las aplicaciones de Spark de forma predeterminada. Sigue los siguientes pasos para ejecutar una aplicación de Spark con el operador de Spark en Amazon EMR en la versión EKS 6.10.0 o superior.

  1. Antes de poder ejecutar una aplicación de Spark con el operador de Spark, complete los pasos indicados en Configuración del operador Spark para Amazon EMR en EKS y Instalar el operador de Spark.

  2. Cree un archivo de definición de SparkApplication spark-pi.yaml con el siguiente contenido:

    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. Luego, implemente la aplicación de Spark con el siguiente comando. Esto también creará un objeto SparkApplication denominado spark-pi:

    kubectl apply -f spark-pi.yaml
  4. Compruebe los eventos del objeto SparkApplication con el siguiente comando:

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

Para obtener más información sobre cómo enviar solicitudes a Spark a través del operador de Spark, consulta Cómo usar un SparkApplication en la spark-on-k8s-operator documentación de. GitHub

Uso de Amazon S3 para almacenamiento

Para usar Amazon S3 como opción de almacenamiento de archivos, añada las siguientes configuraciones al YAML archivo.

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 utilizas las EMR versiones 7.2.0 y superiores de Amazon, las configuraciones se incluyen de forma predeterminada. En ese caso, puedes establecer la ruta del archivo en el archivo de la aplicación YAML Spark, local://<file_path> en s3://<bucket_name>/<file_path> lugar de hacerlo en ella.

A continuación, envíe la aplicación de Spark como de costumbre.