GDC proporciona un contenedor de Dataproc para Spark. Se trata de un entorno de Apache Spark para el tratamiento de datos. Para obtener más información sobre Apache Spark, consulta https://spark.apache.org/
. Usa contenedores de Dataproc Container for Spark para ejecutar aplicaciones de Spark nuevas o ya creadas en un clúster de Kubernetes de GDC con las mínimas modificaciones. Si conoces las herramientas de Spark, puedes seguir usándolas.
Define tu aplicación de Spark en un archivo YAML y GDC asignará los recursos por ti. El contenedor de Dataproc para Spark se inicia en cuestión de segundos. Los ejecutores de Spark se amplían o se cierran en función de tus necesidades.
Configura los contenedores de Dataproc Container for Spark en GDC para que usen hardware especializado, como nodos de hardware especializado o GPUs.
Requisitos previos para ejecutar aplicaciones de Spark
Antes de ejecutar una aplicación de Spark, pide a tu administrador de la plataforma que te conceda acceso al rol de operador de Spark (mkt-spark-operator
) en el espacio de nombres mkt-system
.
Ejecutar aplicaciones de ejemplo de Spark 3
La creación de contenedores de aplicaciones Spark simplifica la ejecución de aplicaciones de big data en tus instalaciones con GDC. Como operador de aplicaciones, ejecuta aplicaciones de Spark especificadas en objetos de GKE del tipo de recurso personalizado SparkApplication
.
Para ejecutar y usar una aplicación Apache Spark 3 en GDC, sigue estos pasos:
Examina la imagen
spark-operator
de tu proyecto para encontrar el$DATAPROC_IMAGE
al que hacer referencia en tu aplicación Spark:export DATAPROC_IMAGE=$(kubectl get pod --kubeconfig INFRA_CLUSTER_KUBECONFIG \ --selector app.kubernetes.io/name=spark-operator -n mkt-system \ -o=jsonpath='{.items[*].spec.containers[0].image}' \ | sed 's/spark-operator/dataproc/')
Por ejemplo:
export DATAPROC_IMAGE=10.200.8.2:10443/dataproc-service/private-cloud-devel/dataproc:3.1-dataproc-17
Escribe una especificación
SparkApplication
y guárdala en un archivo YAML. Para obtener más información, consulta la sección Escribir una especificación de aplicación de Spark.Envía, ejecuta y monitoriza tu aplicación Spark tal como se ha configurado en una
SparkApplication
especificación del clúster de GKE con el comandokubectl
. Para obtener más información, consulta la sección Ejemplos de aplicaciones.Revisa el estado de la solicitud.
Opcional: Revisa los registros de la aplicación. Para obtener más información, consulta la sección Ver los registros de una aplicación Spark 3.
Usa la aplicación Spark para recoger y mostrar el estado del controlador y los ejecutores al usuario.
Escribir una especificación de aplicación de Spark
Una especificación SparkApplication
incluye los siguientes componentes:
- El campo
apiVersion
. - El campo
kind
. - El campo
metadata
. - La sección
spec
.
Para obtener más información, consulta el artículo Writing a SparkApplication Spec (Escribir una especificación de SparkApplication) en GitHub: https://github.com/kubeflow/spark-operator/blob/gh-pages/docs/user-guide.md#writing-a-sparkapplication-spec
Ejemplos de aplicaciones
En esta sección se incluyen los siguientes ejemplos con sus correspondientes
SparkApplication
especificaciones para ejecutar aplicaciones Spark:
Spark Pi
En esta sección se incluye un ejemplo para ejecutar una aplicación de Spark Pi que requiere muchos recursos de computación y que estima 𝛑 (pi) lanzando dardos a un círculo.
Sigue estos pasos para ejecutar Spark Pi:
Aplica la siguiente especificación
SparkApplication
en el clúster de infraestructura de la organización:apiVersion: "sparkoperator.k8s.io/v1beta2" kind: SparkApplication metadata: name: spark-pi namespace: mkt-system spec: type: Python pythonVersion: "3" mode: cluster image: "${DATAPROC_IMAGE?}" imagePullPolicy: IfNotPresent mainApplicationFile: "local:///usr/lib/spark/examples/src/main/python/pi.py" sparkVersion: "3.1.3" restartPolicy: type: Never driver: cores: 1 coreLimit: "1000m" memory: "512m" serviceAccount: dataproc-addon-spark executor: cores: 1 instances: 1 memory: "512m"
Verifica que el ejemplo de especificación
SparkApplication
se ejecuta y se completa en 1 o 2 minutos con el siguiente comando:kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get SparkApplication spark-pi -n mkt-system
Consulta los registros del controlador para ver el resultado:
kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG logs spark-pi-driver -n mkt-system | grep "Pi is roughly"
La salida es similar a la siguiente:
Pi is roughly 3.1407357036785184
Para obtener más información, consulta los siguientes recursos:
- Para ver el código de la aplicación, consulta el artículo Estimación de Pi de la documentación de Apache Spark:
https://spark.apache.org/examples.html
. - Para ver un archivo YAML de ejemplo de Spark Pi, consulta Escribir una especificación de aplicación de Spark.
Spark SQL
Sigue estos pasos para ejecutar Spark SQL:
Para ejecutar una aplicación Spark SQL que seleccione el valor
1
, usa la siguiente consulta:select 1;
Aplica el siguiente ejemplo de especificación de
SparkApplication
en el clúster de infraestructura de la organización:apiVersion: "sparkoperator.k8s.io/v1beta2" kind: SparkApplication metadata: name: pyspark-sql-arrow namespace: mkt-system spec: type: Python mode: cluster image: "${DATAPROC_IMAGE?}" imagePullPolicy: IfNotPresent mainApplicationFile: "local:///usr/lib/spark/examples/src/main/python/sql/arrow.py" sparkVersion: "3.1.3" restartPolicy: type: Never driver: cores: 1 coreLimit: "1000m" memory: "512m" serviceAccount: dataproc-addon-spark executor: cores: 1 instances: 1 memory: "512m"
Verifica que el ejemplo de especificación
SparkApplication
se ejecuta y se completa en menos de un minuto con el siguiente comando:kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get SparkApplication pyspark-sql-arrow -n mkt-system
Spark MLlib
Sigue estos pasos para ejecutar Spark MLlib:
Usa el siguiente ejemplo de Scala para ejecutar una instancia de Spark MLlib que realice un análisis estadístico e imprima un resultado en la consola:
import org.apache.spark.ml.linalg.{Matrix, Vectors} import org.apache.spark.ml.stat.Correlation import org.apache.spark.sql.Row val data = Seq( Vectors.sparse(4, Seq((0, 1.0), (3, -2.0))), Vectors.dense(4.0, 5.0, 0.0, 3.0), Vectors.dense(6.0, 7.0, 0.0, 8.0), Vectors.sparse(4, Seq((0, 9.0), (3, 1.0))) ) val df = data.map(Tuple1.apply).toDF("features") val Row(coeff1: Matrix) = Correlation.corr(df, "features").head println(s"Pearson correlation matrix:\n $coeff1") val Row(coeff2: Matrix) = Correlation.corr(df, "features", "spearman").head println(s"Spearman correlation matrix:\n $coeff2")
Aplica la siguiente especificación
SparkApplication
en el clúster de infraestructura de la organización:apiVersion: "sparkoperator.k8s.io/v1beta2" kind: SparkApplication metadata: name: spark-ml namespace: mkt-system spec: type: Scala mode: cluster image: "${DATAPROC_IMAGE?}" imagePullPolicy: IfNotPresent mainClass: org.apache.spark.examples.ml.SummarizerExample mainApplicationFile: "local:///usr/lib/spark/examples/jars/spark-examples_2.12-3.1.3.jar" sparkVersion: "3.1.3" restartPolicy: type: Never driver: cores: 1 coreLimit: "1000m" memory: "512m" serviceAccount: dataproc-addon-spark executor: cores: 1 instances: 1 memory: "512m"
Verifica que el ejemplo de especificación
SparkApplication
se ejecuta y se completa en menos de un minuto con el siguiente comando:kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get SparkApplication spark-ml -n mkt-system
SparkR
Sigue estos pasos para ejecutar SparkR:
Usa el siguiente código de ejemplo para ejecutar una instancia de SparkR que cargue un conjunto de datos incluido e imprima la primera línea:
library(SparkR) sparkR.session() df <- as.DataFrame(faithful) head(df)
Aplica el siguiente ejemplo de especificación de
SparkApplication
en el clúster de infraestructura de la organización:apiVersion: "sparkoperator.k8s.io/v1beta2" kind: SparkApplication metadata: name: spark-r-dataframe namespace: mkt-system spec: type: R mode: cluster image: "${DATAPROC_IMAGE?}" imagePullPolicy: Always mainApplicationFile: "local:///usr/lib/spark/examples/src/main/r/dataframe.R" sparkVersion: "3.1.3" restartPolicy: type: Never driver: cores: 1 coreLimit: "1000m" memory: "512m" serviceAccount: dataproc-addon-spark executor: cores: 1 instances: 1 memory: "512m"
Verifica que el ejemplo de especificación
SparkApplication
se ejecuta y se completa en menos de un minuto con el siguiente comando:kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get SparkApplication spark-r-dataframe -n mkt-system
Ver los registros de una aplicación de Spark 3
Spark tiene los dos tipos de registros siguientes que puedes visualizar:
Usa la terminal para ejecutar comandos.
Registros del controlador
Sigue estos pasos para ver los registros de controladores de tu aplicación Spark:
Busca tu pod de controlador de Spark:
kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get pods -n mkt-system
Abre los registros del pod del controlador de Spark:
kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG logs DRIVER_POD -n mkt-system
Sustituye
DRIVER_POD
por el nombre del pod del controlador de Spark que has encontrado en el paso anterior.
Registros de eventos
Puedes encontrar los registros de eventos en la ruta especificada en el archivo YAML de la especificación SparkApplication
.
Sigue estos pasos para ver los registros de eventos de tu aplicación Spark:
- Abre el archivo YAML de la especificación
SparkApplication
. - Busca el campo
spec
en el archivo. - Busca el campo
sparkConf
anidado en el campospec
. - Busca el valor del campo
spark.eventLog.dir
anidado en la secciónsparkConf
. - Abre la ruta para ver los registros de eventos.
Para ver un archivo YAML de ejemplo de la especificación SparkApplication
, consulta Escribir una especificación de aplicación de Spark.
Ponte en contacto con tu gestor de cuentas para obtener más información.