Dataproc es la versión gestionada de Spark en Google Cloud. En este tutorial vamos a cubrir como subir archivos a Cloud Storage (S3) y lanzar un trabajo de Spark para procesarlo.
Duración estimada:
Antes de continuar es necesario habilitar las APIs de Cloud Storage y Dataproc.
Habilitar APIs
La mayoría de los comandos pueden ejecutarse desde la interfaz de usuario, pero en el tutorial utilizaremos la consola de cloudshell.
Si no esta abierta ya en la parte inferior puedes abrirla mediante el icono arriba a la derecha, o utilizando el siguiente enlace:
Asegurate de que la carpeta cloudshell_open/data_processing_course
se ha creado y la terminal apunta a esa carpeta.
cd ~/cloudshell_open/data_processing_course
Sino, puedes abrir de nuevo el proyecto desde bigdata.luisbelloch.es y seleccionando Open in Cloud Shell.
Alternativamente puedes clonar el repositorio mediante git
:
git clone https://github.com/luisbelloch/data_processing_course.git && cd data_processing_course
EL bucket se puede también crear desde la UI de Google Cloud Storage.
En nuestro caso podemos usar la terminal para crearlo:
gsutil mb -c regional -l europe-west1 gs://NOMBRE_BUCKET
Recuerda que el nombre del bucket NOMBRE_BUCKET
debe ser único en internet.
Para copiar datos puede utilizarse tambien gsutil
con cp
:
gsutil cp data/compras_tiny.csv gs://NOMBRE_BUCKET
En el caso de que queramos sincronizar un directorio entero, podemos utilizar rsync
:
gsutil -m rsync data/ gs://NOMBRE_BUCKET
Lo primero que debemos hacer es crear un cluster de Spark. Para las pruebas usaremos un único nodo, pero es posible crear varios también. En nuestro caso, vamos a crear un cluster llamado dataproc1
.
gcloud dataproc clusters create dataproc1 --region europe-west1 --single-node --enable-component-gateway
Una vez esté creado, podemos ver el estado del cluster en la interfaz de usuario de Dataproc.
Es interesante ver que Dataproc ha creado distintas máquinas virtuales en Compute Engine.
Recuerda eliminar el cluster al finalizar el tutorial.
Como ejemplo, vamos a crear un script que cuente las lineas de el archivo compras_tiny.csv
, llamado prueba_dataproc.py
.
from os import path
from pyspark import SparkContext
sc = SparkContext('local', 'hello')
rdd = sc.textFile('gs://bigdataupv_data/compras_tiny.csv')
print("Count:", rdd.count())
Puedes crear el script en cualquier carpeta, pero asegurate de especificar la ruta al ejecutar el trabajo en el paso siguiente.
Para ejecutar el script prueba_dataproc.py
que acabamos de crear es necesario enviarlo al cluster:
gcloud dataproc jobs submit pyspark prueba_dataproc.py --cluster dataproc1 --region europe-west1
Esto creará un job
(trabajo) en el cluster, ejecutado por Spark.
Verás el progreso en la propia consola, en algún sitio debería haber impreso el número de filas del trabajo cuando termine:
Count: 1723
En clase hemos trabajado haciendo uso de un archivo llamado helpers.py
. Si se referencia el código de ese archivo desde cualquier script, es necesario adjuntarlo al trabajo mediante la opcion --files
:
gcloud dataproc jobs submit pyspark prueba_dataproc.py --cluster dataproc1 --region europe-west1 --files=helpers.py
Los scripts pueden también residir en un bucket de Cloud Storage, simplemente reemplaza los normbres por la ruta completa de los archivos:
gs://bigdataupv_code/prueba_dataproc.py
gs://bigdataupv_code/helpers.py
Los trabajos ejecutados también son accesibles desde la interfaz de usuario de Dataproc, desde donde pueden consultarse los resultados.
Alternativamente se pueden listar todos los trabajos de una región, en nuestro caso europe-west1
:
gcloud dataproc jobs list --region=europe-west1
Tras ejecutarlo debería mostrar una lista de trabajos:
JOB_ID: 2c5c402a995e424ca24087498d559731
TYPE: pyspark
STATUS: DONE
Utilizando ese JOB_ID
podemos también consultar el estado y los logs del trabajo, incluso antes de que finalize:
gcloud dataproc jobs wait 2c5c402a995e424ca24087498d559731 --project bigdataupv2022 --region europe-west1
Para finalizar el ejercicio eliminaremos el cluster creado, de forma que se detendrá la facturación por uso de los recursos involucrados:
gcloud dataproc clusters delete dataproc1 --region=europe-west1
También es posible eliminarlo desde la consola de Google Cloud.
Recuerda eliminar el cluster de Dataproc al completar el ejercicio.