|
| 1 | +# Tutorial Dataproc (Spark) |
| 2 | + |
| 3 | +Datapro 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. |
| 4 | + |
| 5 | +Duración estimada: <walkthrough-tutorial-duration duration="45"></walkthrough-tutorial-duration> |
| 6 | + |
| 7 | +## Preparación |
| 8 | + |
| 9 | +### 1. Habilita las APIs necesarias |
| 10 | + |
| 11 | +Antes de continuar es necesario habilitar las APIs de Cloud Storage y Dataproc. |
| 12 | + |
| 13 | +<walkthrough-enable-apis apis="dataproc.googleapis.com,storage.googleapis.com ">Habilitar APIs</walkthrough-enable-apis> |
| 14 | + |
| 15 | +### 2. Selecciona un proyecto |
| 16 | + |
| 17 | +<walkthrough-project-setup></walkthrough-project-setup> |
| 18 | + |
| 19 | +### 3. Abre una terminal |
| 20 | + |
| 21 | +La mayoría de los comandos pueden ejecutarse desde la interfaz de usuario, pero en el tutorial utilizaremos la consola de cloudshell. |
| 22 | + |
| 23 | +Si no esta abierta ya en la parte inferior puedes abrirla mediante el icono <walkthrough-cloud-shell-icon></walkthrough-cloud-shell-icon> |
| 24 | +arriba a la derecha, o utilizando el siguiente enlace: |
| 25 | + |
| 26 | +<walkthrough-open-cloud-shell-button></walkthrough-open-cloud-shell-button> |
| 27 | + |
| 28 | +### 3. Materiales de clase |
| 29 | + |
| 30 | +Asegurate de que la carpeta `cloudshell_open/data_processing_course` se ha creado. Sino, puedes abrir de nuevo el proyecto desde [bigdata.luisbelloch.es](http://bigdata.luisbelloch.es) y seleccionando [Open in Cloud Shell](https://console.cloud.google.com/cloudshell/editor?cloudshell_git_repo=https://github.com/luisbelloch/data_processing_course.git). |
| 31 | + |
| 32 | +Alternativamente puedes clonar el repositorio mediante `git`: |
| 33 | + |
| 34 | +```sh |
| 35 | +git clone https://github.com/luisbelloch/data_processing_course.git && cd data_processing_course |
| 36 | +``` |
| 37 | + |
| 38 | +## Paso 1: Crear un bucket en cloud storage |
| 39 | + |
| 40 | +EL bucket se puede también crear desde [la UI de Google Cloud Storage](https://cloud.google.com/storage/docs/creating-buckets). |
| 41 | + |
| 42 | +En nuestro caso podemos usar la terminal para crearlo: |
| 43 | + |
| 44 | +```sh |
| 45 | +gsutil mb -c regional -l europe-west1 gs://NOMBRE_BUCKET |
| 46 | +``` |
| 47 | + |
| 48 | +Para copiar datos puede utilizarse tambien `gsutil` con `cp`: |
| 49 | + |
| 50 | +```sh |
| 51 | +gsutil cp data/compras_tiny.csv gs://NOMBRE_BUCKET |
| 52 | +``` |
| 53 | + |
| 54 | +En el caso de que queramos sincronizar un directorio entero, podemos utilizar `rsync`: |
| 55 | + |
| 56 | +```sh |
| 57 | +gsutil -m rsync data/ gs://NOMBRE_BUCKET |
| 58 | +``` |
| 59 | + |
| 60 | +## Paso 2: Crear un cluster en Dataproc |
| 61 | + |
| 62 | +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`. |
| 63 | + |
| 64 | +```sh |
| 65 | +gcloud dataproc clusters create dataproc1 --region europe-west1 --single-node --enable-component-gateway |
| 66 | +``` |
| 67 | + |
| 68 | +Una vez esté creado, podemos ver el estado del cluster en la [interfaz de usuario de Dataproc](https://console.cloud.google.com/dataproc/clusters). |
| 69 | + |
| 70 | +Es interesante ver que Dataproc ha creado distintas máquinas virtuales [en Compute Engine](https://console.cloud.google.com/compute/instances). |
| 71 | + |
| 72 | +<walkthrough-footnote>Recuerda eliminar el cluster al finalizar el tutorial.</walkthrough-footnote> |
| 73 | + |
| 74 | +## Paso 3: Crear un trabajo de ejemplo de Spark |
| 75 | + |
| 76 | +Como ejemplo, vamos a crear un script que cuente las lineas de el archivo `compras_tiny.csv`, llamado `prueba_dataproc.py`. |
| 77 | + |
| 78 | +```python |
| 79 | +from os import path |
| 80 | +from pyspark import SparkContext |
| 81 | + |
| 82 | +sc = SparkContext('local', 'hello') |
| 83 | +rdd = sc.textFile('gs://bigdataupv_data/compras_tiny.csv') |
| 84 | + |
| 85 | +print("Count:", rdd.count()) |
| 86 | +``` |
| 87 | + |
| 88 | +Puedes crear el script en cualquier carpeta, pero asegurate de especificar la ruta al ejecutar el trabajo en el paso siguiente. |
| 89 | + |
| 90 | +## Paso 4: Ejecutar el trabajo de Spark |
| 91 | + |
| 92 | +Para ejecutar el script `prueba_dataproc.py` que acabamos de crear es necesario enviarlo al cluster: |
| 93 | + |
| 94 | +```sh |
| 95 | +gcloud dataproc jobs submit pyspark prueba_dataproc.py --cluster dataproc1 --region europe-west1 |
| 96 | +``` |
| 97 | + |
| 98 | +Esto creará un `job` (trabajo) en el cluster, ejecutado por Spark. |
| 99 | + |
| 100 | +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: |
| 101 | + |
| 102 | +```terminal |
| 103 | +Count: 1723 |
| 104 | +``` |
| 105 | + |
| 106 | +### Adjuntar archivos adicionales |
| 107 | + |
| 108 | +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`: |
| 109 | + |
| 110 | +```sh |
| 111 | +gcloud dataproc jobs submit pyspark prueba_dataproc.py --cluster dataproc1 --region europe-west1 --files=helpers.py |
| 112 | +``` |
| 113 | + |
| 114 | +Los scripts pueden también residir en un bucket de Cloud Storage, simplemente reemplaza los normbres por la ruta completa de los archivos: |
| 115 | + |
| 116 | +```terminal |
| 117 | +gs://bigdataupv_code/prueba_dataproc.py |
| 118 | +gs://bigdataupv_code/helpers.py |
| 119 | +``` |
| 120 | + |
| 121 | +## Paso 5: Determinar el estado de los trabajos lanzados |
| 122 | + |
| 123 | +Los trabajos ejecutados también son accesibles desde [la interfaz de usuario de Dataproc](https://console.cloud.google.com/dataproc/clusters/dataproc1/jobs), desde donde pueden consultarse los resultados. |
| 124 | + |
| 125 | +Alternativamente se pueden listar todos los trabajos de una región, en nuestro caso `europe-west1`: |
| 126 | + |
| 127 | +```sh |
| 128 | +gcloud dataproc jobs list --region=europe-west1 |
| 129 | +``` |
| 130 | + |
| 131 | +Tras ejecutarlo debería mostrar una lista de trabajos: |
| 132 | + |
| 133 | +```terminal |
| 134 | +JOB_ID: 2c5c402a995e424ca24087498d559731 |
| 135 | +TYPE: pyspark |
| 136 | +STATUS: DONE |
| 137 | +``` |
| 138 | + |
| 139 | +### Consultar un determinado trabajo |
| 140 | + |
| 141 | +Utilizando ese `JOB_ID` podemos también consultar el estado y los logs del trabajo, incluso antes de que finalize: |
| 142 | + |
| 143 | +```sh |
| 144 | +gcloud dataproc jobs wait 2c5c402a995e424ca24087498d559731 --project bigdataupv2021 --region europe-west1 |
| 145 | +``` |
| 146 | + |
| 147 | +## Paso 6: Eliminar el cluster |
| 148 | + |
| 149 | +Para finalizar el ejercicio eliminaremos el cluster creado, de forma que se detendrá la facturación por uso de los recursos involucrados: |
| 150 | + |
| 151 | +```sh |
| 152 | +gcloud dataproc clusters delete dataproc1 --region=europe-west1 |
| 153 | +``` |
| 154 | + |
| 155 | +También es posible eliminarlo desde la consola de Google Cloud. |
| 156 | + |
| 157 | + |
| 158 | + |
| 159 | +## Completado! |
| 160 | + |
| 161 | +Recuerda eliminar el cluster de Dataproc al completar el ejercicio. |
| 162 | + |
| 163 | +<walkthrough-conclusion-trophy></walkthrough-conclusion-trophy> |
0 commit comments