Cómo comenzar a utilizar el operador de Spark para Amazon EMR en EKS - Amazon EMR

Cómo comenzar a utilizar el operador de Spark para Amazon EMR en EKS

Este tema le ayuda a comenzar a utilizar el operador de Spark en Amazon EKS mediante la implementación de una aplicación de Spark y una aplicación de 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 de Spark para Amazon EMR en EKS.

  2. Autentique su cliente de Helm en el registro de Amazon ECR. En el siguiente comando, sustituya los valores de region-id por la Región de AWS que prefiera y el valor correspondiente de la cuenta ECR-Registry-Account para la región de la página Cuentas de registro de Amazon ECR por 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 parámetro --version del gráfico de Helm, use su etiqueta de lanzamiento de Amazon EMR sin el prefijo emr- y sin 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, consulte la documentación de spark-on-k8s-operator en GitHub.

Ejecutar una aplicación de Spark

El operador de Spark es compatible con Amazon EMR 6.10.0 o una versión posterior. 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. Siga estos pasos para ejecutar una aplicación de Spark con el operador de Spark en Amazon EMR en EKS 6.10.0 o una versión posterior.

  1. Antes de poder ejecutar una aplicación de Spark con el operador de Spark, complete los pasos indicados en Configuración del operador de 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, consulte Cómo usar una SparkApplication en la documentación de spark-on-k8s-operator en GitHub.

Uso de Amazon S3 para almacenamiento

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

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

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