Managed Service para Apache Spark

1. Introducción: Managed Service para Apache Spark

Managed Service para Apache Spark es un servicio completamente administrado y con alto escalamiento para ejecutar Apache Spark, Apache Flink, Presto y muchas otras herramientas y frameworks de código abierto. Usa Managed Service para Apache Spark para la modernización de data lakes, ETL / ELT y ciencia de datos segura a escala mundial. Managed Service para Apache Spark también está completamente integrado en varios servicios de Google Cloud, incluidos BigQuery, Cloud Storage, Gemini Enterprise Agent Engine y Knowledge Catalog.

Managed Service para Apache Spark está disponible en dos modos de implementación:

  • Managed Apache Spark sin servidores te permite ejecutar trabajos de PySpark sin necesidad de configurar la infraestructura ni el ajuste de escala automático. Managed Apache Spark admite cargas de trabajo por lotes y sesiones o notebooks de PySpark.
  • Los clústeres administrados de Apache Spark te permiten administrar un clúster de Hadoop YARN para cargas de trabajo de Spark basadas en YARN, además de herramientas de código abierto, como Flink y Presto. Puedes personalizar tus clústeres basados en la nube con el escalamiento vertical u horizontal que desees, incluido el ajuste de escala automático.

2. Crea un clúster de Apache Spark administrado en una VPC de Google Cloud

En este paso, crearás un clúster de Apache Spark administrado en Google Cloud con la consola de Google Cloud.

Como primer paso, habilita la API del servicio de Managed Apache Spark en la consola. Una vez que esté habilitado, busca "Managed Apache Spark" en la barra de búsqueda y haz clic en Crear clúster.

Selecciona Clúster en Compute Engine para usar VMs de Google Compute Engine(GCE) como infraestructura subyacente para ejecutar clústeres administrados de Apache Spark.

a961b2e8895e88da.jpeg

Ahora te encuentras en la página Cluster Creation.

9583c91204a09c12.jpeg

En esta página, encontrarás lo siguiente:

  • Proporciona un nombre único para el clúster.
  • Selecciona la región específica. También puedes seleccionar una zona, pero Managed Apache Spark te permite elegir una automáticamente. Para este codelab, selecciona "us-central1" y "us-central1-c".
  • Selecciona el tipo de clúster "Estándar". Esto garantiza que haya un nodo principal.
  • En la pestaña Configura los nodos, confirma que la cantidad de trabajadores creados será dos.
  • En la sección Personalizar clúster, marca la casilla junto a Habilitar puerta de enlace de componentes. Esto habilita el acceso a las interfaces web en el clúster, incluidas la IU de Spark, el administrador de nodos de Yarn y los notebooks de Jupyter.
  • En Componentes opcionales, selecciona Jupyter Notebook. Esto configura el clúster con un servidor de notebook de Jupyter.
  • Deja todo lo demás como está y haz clic en Crear clúster.

Esto activará un clúster de Apache Spark administrado.

3. Inicia el clúster y establece una conexión SSH con él

Una vez que el estado del clúster cambie a En ejecución, haz clic en el nombre del clúster en la consola de Managed Apache Spark.

7332f1c2cb25807d.jpeg

Haz clic en la pestaña Instancia de VM para ver el nodo principal y los dos nodos trabajadores del clúster.

25be1578e00f669f.jpeg

Haz clic en SSH junto al nodo principal para acceder a él.

2810ffd97f315bdb.jpeg

Ejecuta comandos de hdfs para ver la estructura de directorios.

hadoop_commands_example

sudo hadoop fs -ls /
sudo hadoop version
sudo hadoop fs -mkdir /test51 
sudo hadoop fs -ls /

4. Interfaces web y puertas de enlace de componentes

En la consola del clúster de Apache Spark administrado, haz clic en el nombre de tu clúster y, luego, en la pestaña INTERFACES WEB.

6398f71d6293d6ff.jpeg

Se muestran las interfaces web disponibles, incluido Jupyter. Haz clic en Jupyter para abrir un notebook de Jupyter. Puedes usarlo para crear notebooks en PySpark almacenados en GCS. Para almacenar tu notebook en Google Cloud Storage y abrir un notebook de PySpark para usar en este codelab, haz lo siguiente:

5. Supervisa y observa trabajos de Spark

Con el clúster de Apache Spark administrado en funcionamiento, crea un trabajo por lotes de PySpark y envíalo al clúster de Apache Spark administrado.

Crea un bucket de Google Cloud Storage (GCS) para almacenar la secuencia de comandos de PySpark. Asegúrate de crear el bucket en la misma región que el clúster de Apache Spark administrado.

679fd2f76806f4e2.jpeg

Ahora que se creó el bucket de GCS, copia el siguiente archivo en él.

https://raw.githubusercontent.com/diptimanr/spark-on-gce/main/test-spark-1.py

Esta secuencia de comandos crea un DataFrame de Spark de muestra y lo escribe como una tabla de Hive.

hive_job.py

from pyspark.sql import SparkSession
from datetime import datetime, date
from pyspark.sql import Row

spark = SparkSession.builder.master("local").enableHiveSupport().getOrCreate()

df = spark.createDataFrame([ (1, 2., 'string1', date(2000, 1, 1), datetime(2000, 1, 1, 12, 0)),
        (2, 3., 'string2', date(2000, 2, 1), datetime(2000, 1, 2, 12, 0)), (3, 4., 'string3', date(2000, 3, 1), datetime(2000, 1, 3, 12, 0))
    ], schema='a long, b double, c string, d date, e timestamp')
print("..... Writing data .....")
df.write.mode("overwrite").saveAsTable("test_table_1")
print("..... Complete .....")

Envía este script como un trabajo por lotes de Spark en Managed Apache Spark. Haz clic en Trabajos en el menú de navegación de la izquierda y, luego, en Enviar trabajo.

5767fc7c50b706d3.jpeg

Proporciona unID de trabajo y una región. Selecciona tu clúster y proporciona la ubicación en GCS de la secuencia de comandos de Spark que copiaste. Este trabajo se ejecutará como un trabajo por lotes de Spark en Managed Apache Spark.

En Propiedades, agrega la clave spark.submit.deployMode y el valor client para asegurarte de que el controlador se ejecute en el nodo principal de Apache Spark administrado y no en los nodos trabajadores. Haz clic en Enviar para enviar el trabajo por lotes a Apache Spark administrado.

a7ca90f5132faa31.jpeg

La secuencia de comandos de Spark creará un DataFrame y escribirá en una tabla de Hive test_table_1.

Una vez que el trabajo se ejecute correctamente, podrás ver las instrucciones de impresión de la consola en la pestaña Monitoring.

bdec2f3ae1055f9.jpeg

Ahora que se creó la tabla de Hive, envía otro trabajo de consulta de Hive para seleccionar el contenido de la tabla y mostrarlo en la consola.

Crea otro trabajo con las siguientes propiedades:

c16f02d1b3afaa27.jpeg

Observa que el Tipo de trabajo está configurado como Hive y el tipo de fuente de la consulta es Texto de consulta, lo que significa que escribiremos toda la instrucción de HiveQL dentro del cuadro de texto Texto de consulta.

Envía el trabajo y conserva el resto de los parámetros con sus valores predeterminados.

e242e50bc2519bf4.jpeg

Observa cómo HiveQL selecciona todos los registros y los muestra en la consola.

6. Ajuste de escala automático

El ajuste de escala automático es la tarea de estimar la cantidad "adecuada" de nodos trabajadores del clúster para una carga de trabajo.

La API de AutoscalingPolicies de Managed Apache Spark proporciona un mecanismo para automatizar la administración de recursos del clúster y habilita el ajuste de escala automático de la VM de trabajador del clúster. Una política de ajuste de escala automático es una configuración reutilizable que describe cómo se deben escalar los trabajadores del clúster que usan la política de ajuste de escala automático. Define los límites de escalamiento, la frecuencia y la agresividad para otorgar un control detallado sobre los recursos de los clústeres a lo largo de su ciclo de vida.

Las políticas de ajuste de escala automático de Apache Spark administrado se escriben con archivos YAML, y estos archivos se pasan en el comando de la CLI para crear el clúster o se seleccionan desde un bucket de GCS cuando se crea un clúster desde Cloud Console.

A continuación, se muestra un ejemplo de una política de ajuste de escala automático de Apache Spark administrado :

policy.yaml

workerConfig:
  minInstances: 10
  maxInstances: 10
secondaryWorkerConfig:
  maxInstances: 50
basicAlgorithm:
  cooldownPeriod: 4m
  yarnConfig:
    scaleUpFactor: 0.05
    scaleDownFactor: 1.0
    gracefulDecommissionTimeout: 1h

7. Configura los componentes opcionales de Managed Apache Spark

Esto activará un clúster de Apache Spark administrado.

Cuando creas un clúster de Managed Apache Spark, los componentes estándar del ecosistema de Apache Hadoop se instalan automáticamente en el clúster (consulta la Lista de versiones de Managed Apache Spark). Puedes instalar componentes adicionales, llamados componentes opcionales, en el clúster cuando lo creas.

e39cc34245af3f01.jpeg

Mientras creamos el clúster de Apache Spark administrado desde la consola, habilitamos los componentes opcionales y seleccionamos Jupyter Notebook como el componente opcional.

8. Limpia los recursos

Para limpiar el clúster, haz clic en Detener después de seleccionar el clúster en la consola de Managed Apache Spark. Una vez que se detenga el clúster, haz clic en Borrar para borrarlo.

Después de borrar el clúster de Managed Apache Spark, borra los buckets de GCS en los que se copió el código.

Para limpiar los recursos y detener cualquier facturación no deseada, primero se debe detener y, luego, borrar el clúster de Apache Spark administrado.

Antes de detener y borrar el clúster, asegúrate de que todos los datos escritos en el almacenamiento de HDFS se copien en GCS para un almacenamiento duradero.

Para detener el clúster, haz clic en Detener.

52065de928ab52e7.jpeg

Una vez que se detenga el clúster, haz clic en Borrar para borrarlo.

En el diálogo de confirmación, haz clic en Borrar para borrar el clúster.

52065de928ab52e7.jpeg