1. Introducción: Google Dataproc
Dataproc es un servicio completamente administrado y con alto escalamiento para ejecutar Apache Spark, Apache Flink, Presto y más herramientas y frameworks de código abierto. Usa Dataproc para la modernización de data lakes, ETL / 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 Serverless te permite ejecutar trabajos de PySpark sin necesidad de configurar la infraestructura ni el ajuste de escala automático. Dataproc Serverless admite cargas de trabajo y sesiones por lotes de PySpark (notebooks).
- 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 que esté habilitada, 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 la infraestructura subyacente para ejecutar clústeres de Dataproc.

Ahora te encuentras en la página Creación de clústeres.

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. Sin embargo, Dataproc 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 Configurar nodos, confirma que la cantidad de trabajadores creados será de dos.
- En la sección Personalizar clúster, marca la casilla junto a Habilitar puerta de enlace de componentes. Esto permite 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 Notebook de Jupyter. Esto configura el clúster con un servidor de notebooks de Jupyter.
- Deja todo lo demás como está y haz clic en Crear clúster.
Se iniciará un clúster de Dataproc.
3. Inicia el clúster y conéctate a él mediante SSH
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 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 él.

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 Dataproc, haz clic en el nombre de tu clúster y, luego, en la pestaña INTERFACES WEB.

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.
5. Supervisa y observa los 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 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 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, en Enviar trabajo.

Proporciona unID 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 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:

Observa que el Tipo de trabajo está configurado como Hive y el tipo de fuente de consulta es Texto de consulta, lo que significa que escribiremos toda la instrucción de HiveQL en el cuadro de texto Texto de consulta.
Envía el trabajo y mantén el resto de los parámetros como predeterminados.

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 Dataproc proporciona un mecanismo para automatizar la administración de recursos del clúster y habilitar 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, frecuencia y agresividad para proporcionar 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 Dataproc se escriben con archivos YAML, y estos archivos YAML 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 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
Se 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 Lista de versiones de Dataproc). Puedes instalar componentes adicionales, llamados componentes opcionales , en el clúster cuando lo creas.

Mientras creamos el clúster de Dataproc desde la consola, habilitamos los 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 se detenga el clúster, 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 cualquier facturación no deseada, primero se debe 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 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.
