1. Introducción: Google Dataproc
Dataproc es un servicio completamente administrado y altamente escalable para ejecutar Apache Spark, Apache Flink, Presto y muchas otras herramientas y frameworks de código abierto. Usa Dataproc para modernizar los data lakes, ETL y ELT, y ciencia de datos segura a escala mundial. Dataproc también está completamente integrado en varios servicios de Google Cloud, incluidos BigQuery, Cloud Storage, Vertex AI y Dataplex.
Dataproc está disponible en tres variantes:
- Dataproc sin servidores te permite ejecutar trabajos de PySpark sin necesidad de configurar infraestructura ni ajuste de escala automático. Dataproc Serverless admite cargas de trabajo por lotes, sesiones y notebooks de PySpark.
- Dataproc en Google Compute Engine te permite 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 adaptar tus clústeres basados en la nube con el escalamiento vertical u horizontal que desees, incluido el ajuste de escala automático.
- Dataproc en Google Kubernetes Engine te permite configurar clústeres virtuales de Dataproc en tu infraestructura de GKE para enviar trabajos de Spark, PySpark, SparkR o Spark SQL.
2. Crea un clúster de Dataproc en una VPC de Google Cloud
En este paso, crearás un clúster de Dataproc en Google Cloud con la consola de Google Cloud.
Como primer paso, habilita la API del servicio de Dataproc en la consola. Una vez habilitado, busca “Dataproc”. 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 de Dataproc.
Ahora te encuentras en la página de creación de clústeres.
En esta página:
- Proporciona un nombre único para el clúster.
- Selecciona la región específica. También puedes seleccionar una zona; sin embargo, Dataproc ofrece la capacidad de elegir una automáticamente por ti. Para este codelab, selecciona "us-central1" y “us-central1-c”..
- Selecciona la opción "Estándar" el tipo de clúster. Esto garantiza que haya un nodo principal.
- En la pestaña Configurar nodos, confirma que sea dos la cantidad de trabajadores creados.
- 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 del clúster, incluidas la IU de Spark, Yarn Node Manager 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 iniciará un clúster de Dataproc.
3. Inicia el clúster y establece una conexión SSH
Cuando el estado del clúster cambie a Running, haz clic en el nombre del clúster en la consola de Dataproc.
Haz clic en la pestaña Instancia de VM para ver el nodo principal y los dos nodos trabajadores del clúster.
Haz clic en SSH junto al nodo principal para acceder a este.
Ejecuta los comandos de hdfs para ver la estructura del directorio.
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 Dataproc, haz clic en el nombre de tu clúster y, luego, en la pestaña INTERFAZES WEB.
De esta manera, se mostrarán las interfaces web disponibles, incluido Jupyter. Haz clic en Jupyter para abrir un notebook de Jupyter. Puedes usar esto para crear notebooks en PySpark almacenados en GCS. para almacenar tu notebook en Google Cloud Storage y abrir un notebook de PySpark para usarlo en este codelab.
5. Supervisar y observar trabajos de Spark
Con el clúster de Dataproc en funcionamiento, crea un trabajo por lotes de PySpark y envíalo al clúster de Dataproc.
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 Dataproc.
Ahora que creaste 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 esta secuencia de comandos como un trabajo por lotes de Spark en Dataproc. Haz clic en Trabajos en el menú de navegación de la izquierda y, luego, haz clic en Enviar trabajo.
Proporciona un ID de trabajo y una región. Selecciona tu clúster y proporciona la ubicación de GCS de la secuencia de comandos de Spark que copiaste. Este trabajo se ejecutará como un trabajo por lotes de Spark en Dataproc.
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 Dataproc y no en los nodos trabajadores. Haz clic en Enviar para enviar el trabajo por lotes a Dataproc.
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 Supervisión.
Ahora que creaste 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:
Observa que Job Type está configurado en Hive y el tipo de fuente de consulta es Query Text, lo que significa que escribiremos toda la sentencia de HiveQL dentro del cuadro de texto Query Text.
Envía el trabajo y mantén el resto de los parámetros como predeterminados.
Observa cómo HiveQL selecciona todos los registros y se muestra en la consola.
6. Ajuste de escala automático
El ajuste de escala automático es la tarea de estimar la cantidad de nodos trabajadores del clúster para una carga de trabajo.
La API de Ajuste de escala automático de Dataproc proporciona un mecanismo para automatizar la administración de recursos del clúster y habilita el ajuste de escala automático de las VM de los trabajadores del clúster. Una política de ajuste de escala automático es una configuración reutilizable que describe cómo deben escalar los trabajadores del clúster que usan esta política. Define los límites, la frecuencia y la agresividad del escalamiento para proporcionar un control detallado sobre los recursos de los clústeres a lo largo de su vida útil.
Las políticas de ajuste de escala automático de Dataproc se escriben con archivos YAML. 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 en la consola de Cloud.
Este es un ejemplo de una política de ajuste de escala automático de Dataproc :
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 Dataproc
Esto iniciará un clúster de Dataproc.
Cuando creas un clúster de Dataproc, los componentes estándar del ecosistema de Apache Hadoop se instalan automáticamente en el clúster (consulta la lista de versiones de Dataproc). Puedes instalar componentes adicionales, llamados componentes opcionales, en el clúster cuando lo crees.
Mientras creamos el clúster de Dataproc desde la consola, habilitamos componentes opcionales y seleccionamos Notebook de Jupyter 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 Dataproc. Una vez que el clúster se detenga, haz clic en Borrar para borrarlo.
Después de borrar el clúster de Dataproc, borra los buckets de GCS en los que se copió el código.
Para limpiar los recursos y detener la facturación no deseada, primero debes detener el clúster de Dataproc y, luego, borrarlo.
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.
Una vez que el clúster se detenga, haz clic en Borrar para borrarlo.
En el diálogo de confirmación, haz clic en Borrar para borrar el clúster.