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.
-
Si aún no lo ha hecho, complete los pasos de Configuración del operador de Spark para Amazon EMR en EKS.
-
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 cuentaECR-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-stdinECR-registry-account
.dkr.ecr.region-id
.amazonaws.com -
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 prefijoemr-
y sin el sufijo de fecha. Por ejemplo, con la versiónemr-6.12.0-java17-latest
, especifique6.12.0-java17
. El ejemplo del siguiente comando usa la versiónemr-7.3.0-latest
, por lo que especifica7.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
\ --version7.3.0
\ --namespace spark-operator \ --create-namespaceDe 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 argumentoserviceAccounts.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
-
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 -
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.
-
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.
-
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"
-
Luego, implemente la aplicación de Spark con el siguiente comando. Esto también creará un objeto
SparkApplication
denominadospark-pi
:kubectl apply -f spark-pi.yaml
-
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
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://
en lugar de en <bucket_name>
/<file_path>
local://
en el archivo YAML de la aplicación Spark. <file_path>
A continuación, envíe la aplicación de Spark como de costumbre.