Está en la página 1de 13

Laboratorio # 1 GCP

Laren Osorio Toribio


losoriot@uni.pe

CASO TELCO

Objetivo
Explorar la base Telco llamada cellsegmentacion.csv, almacenar en un directorio distribuido
HDFS, crear base de metadatos en HIVE y realizar consultas mediante HiveQL

Procedimiento
1. Análisis Exploratorio de los datos:
Se utiliza Facets:
a. https://pair-code.github.io/facets/
b. Data: cellsegmentacion.csv
c. Objetivo: Cargar los datos y explorar mediante gráficas.
ENTORNO LOCAL (LINUX)

Configuración del espacio de trabajo


1. Crear el cluster Hadoop en Cloud Dataproc.
a. Ir a la consola de GCP
b. Hacer click en las 3 líneas horizontales y buscar el servicio de Cloud
Dataproc, o también se puede utilizar el buscador de productos y
recursos(lupa)
c. Habilitar el API de Cloud Dataproc. En caso se encuentre habilitada obviar
este paso.
2. Seleccionar la opción CREAR CLUSTER

3. En la configuración del clúster. Como sugerencia utilizar el siguiente nombre:


cluster-dp-<nombre_grupo>

En componentes seleccionar: Hive, Jupyter Notebook, ZooKeeper


4. Configurar los nodos (Master node, Worker nodes)

5. En administrar seguridad, se debe ingresar la opción: Permitir el acceso a la API a


todos los servicios de Google Cloud en el mismo proyecto
Observación: Como alternativa de creación de un cluster dataproc la línea de comando
gcloud. Su ejecución puede ser a través del Cloud Shell (Virtual Machine) o entorno local a
través del SDK de Google Cloud.

Comando de ejecución:

gcloud beta dataproc clusters create cluster-a2c3 --enable-component-gateway


--region us-central1 --zone us-central1-a --master-machine-type
n1-standard-2 --master-boot-disk-size 100 --num-workers 2
--worker-machine-type n1-standard-2 --worker-boot-disk-size 100
--image-version 2.0-debian10 --optional-components
ANACONDA,HIVE_WEBHCAT,JUPYTER,ZOOKEEPER --scopes
'https://www.googleapis.com/auth/cloud-platform' --project ft-bd-gcp-p1-g1

6. Visualizar las instancias creadas VM Instances en Compute Engine

7. Ingresar al cluster mediante SSH


Observación:
El entorno local se encuentra en Linux por lo que se utilizará los comandos definidos por
defecto. Por ejemplo, para listar el contenido de un directorio:

$ ls

Para ubicarnos en el entorno Hadoop es necesario utilizar el comando de entrada hdfs dfs,
seguido de los comandos Linux. Por ejemplo, para listar el contenido de un directorio en el
entorno Hadoop:

$ hdfs dfs -ls /

(*) Como se puede ver el contenido de cada entorno es diferente


ENTORNO HADOOP

Comandos básicos
1. Listar el nombre del directorio de trabajo actual
$ pwd

2. Listar el contenido del entorno local:


$ ls -l

3. Listar el contenido del directorio raíz en el entorno Hadoop (HDFS)


$ hdfs dfs -ls /

4. Listar el contenido en el entorno Hadoop:


$ hdfs dfs -ls /user/

5. Crear tres carpetas en HDFS. Ingresar los comandos uno seguido de otro
$ hdfs dfs -mkdir /user/user_<nap>/

$ hdfs dfs -mkdir /user/user_<nap>/test/

$ hdfs dfs -mkdir /user/user_<nap>/hadoop/

Observación:
El campo: user_<nap> es la inicial de tu nombre y apellido, por ejemplo: Laren
Osorio→ user_lo
(*) Esta será usada a la lo largo de la sesión

$ hdfs dfs -mkdir /user/user_lo/


$ hdfs dfs -mkdir /user/user_lo/test/
$ hdfs dfs -mkdir /user/user_lo/hadoop/

6. Listar ahora el contenido de mi directorio en Hadoop:


$ hdfs dfs -ls /user/user_<nap>/

$ hdfs dfs -ls /user/user/user_lo/

7. Eliminar la carpeta test


$ hdfs dfs -rm -r /user/user_<nap>/test
$ hdfs dfs -rm -r /user/user_lo/test

8. Nuevamente, listar el contenido del directorio


$ hdfs dfs -ls /user/user_<nap>/

$ hdfs dfs -ls /user/user_lo/

9. Crear una carpeta dentro de: /user_<nap>/hadoop/ denominada data


$ hdfs dfs -mkdir /user/user_<nap>/hadoop/data

$ hdfs dfs -mkdir /user/user_lo/hadoop/data

10. Nuevamente listamos el contenido del directorio /user_<nap>/hadoop/


$ hdfs dfs -ls /user/user_<nap>/hadoop/

$ hdfs dfs -ls /user/user_lo/hadoop/

11. Subir un archivo al entorno Hadoop (HDFS)


$ hdfs dfs -put /home/<local>/cellsegmentacion.csv/ /user/user_<nap>/hadoop/data/

$ hdfs dfs -put /home/bda/cellsegmentacion.csv/ /user/user_lo/hadoop/data/

Observación:
Para conocer el valor de <local> se debe de introducir el comando pwd en el entorno
Linux

12. Ver todo el contenido de un archivo en el entorno Hadoop


$ hdfs dfs -cat /user/user_<nap>/hadoop/data/cellsegmentacion.csv

$ hdfs dfs -cat /user/user_lo/hadoop/data/cellsegmentacion.csv

13. Ver una parte del contenido del archivo


$ hdfs dfs -tail -f /user/user_<nap>/hadoop/data/cellsegmentacion.csv

$ hdfs dfs -tail -f /user/user_lo/hadoop/data/cellsegmentacion.csv

14. Verificar el tamaño de los archivos subidos


$ hdfs dfs -du -h /user/user_<nap>/hadoop*
$ hdfs dfs -du -h /user/user_lo/hadoop*

15. Ver el peso de las carpetas


$ hdfs dfs -du -s -h '/user/user_<nap>/*'

$ hdfs dfs -du -s -h '/user/user_lo/*'


ENTORNO HIVE

1. Para ingresar al entorno Hive podemos utilizar cualquier de los dos comandos:
$ hive

$ beeline -u jdbc:hive2://

(*) Esta última te ofrece una interfaz más amigable

2. Crear la base de datos


$ create database bd_user_<nap> location '/user/user_<nap>/hadoop/';

$ create database bd_user_lo location '/user/user_lo/hadoop/';

3. Mostrar la base de datos


$ show databases;

4. En la base de datos se deben crear dos tablas


tabla 1: tb_cs_user_<nap>_def
tabla 2: tb_cs_user_<nap>_loc

Tabla 1

CREATE EXTERNAL TABLE IF NOT EXISTS bd_user_<nap>.tb_cs_user_<nap>_def


(
region String,
Edad int,
casado String,
jubilado String,
genero int,
minutos_preferido int,
adicionales int,
equipo_dolares int,
minutos_no_preferido int,
internet_gigas int,
fijo int,
largadistancia int,
internetcasa int,
numoculto int,
facturaelect int,
ingreso_miles int
)
COMMENT 'tabla gestionada sin location y serde CSV'
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
"separatorChar" = ",",
"quoteChar"= "\"")
STORED AS TEXTFILE
;
CREATE EXTERNAL TABLE IF NOT EXISTS bd_user_lo.tb_cs_user_lo_def
(
region String,
Edad int,
casado String,
jubilado String,
genero int,
minutos_preferido int,
adicionales int,
equipo_dolares int,
minutos_no_preferido int,
internet_gigas int,
fijo int,
largadistancia int,
internetcasa int,
numoculto int,
facturaelect int,
ingreso_miles int
)
COMMENT 'tabla gestionada sin location y serde CSV'
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
"separatorChar" = ",",
"quoteChar"= "\"")
STORED AS TEXTFILE
;

Tabla 2

CREATE EXTERNAL TABLE IF NOT EXISTS bd_user_<nap>.tb_cs_user_<nap>_loc


(
region String,
Edad int,
casado String,
jubilado String,
genero int,
minutos_preferido int,
adicionales int,
equipo_dolares int,
minutos_no_preferido int,
internet_gigas int,
fijo int,
largadistancia int,
internetcasa int,
numoculto int,
facturaelect int,
ingreso_miles int
)
COMMENT 'tabla gestionada con location y serde CSV'
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
"separatorChar" = ",",
"quoteChar"= "\"")
STORED AS TEXTFILE
LOCATION '/user/user_<nap>/hadoop/data/'
;
CREATE EXTERNAL TABLE IF NOT EXISTS bd_user_lo.tb_cs_user_lo_loc
(
region String,
Edad int,
casado String,
jubilado String,
genero int,
minutos_preferido int,
adicionales int,
equipo_dolares int,
minutos_no_preferido int,
internet_gigas int,
fijo int,
largadistancia int,
internetcasa int,
numoculto int,
facturaelect int,
ingreso_miles int
)
COMMENT 'tabla gestionada con location y serde CSV'
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
"separatorChar" = ",",
"quoteChar"= "\"")
STORED AS TEXTFILE
LOCATION '/user/user_lo/hadoop/data/'
;

5. Mostrar la ubicación de la metadata


$ DESCRIBE [FORMATTED|EXTENDED] bd_user_<nap>.tb_cs_user_<nap>_def;

$ DESCRIBE [FORMATTED|EXTENDED] bd_user_<nap>.tb_cs_user_<nap>_loc;

$ DESCRIBE FORMATTED bd_user_lo.tb_cs_user_lo_def;

$ DESCRIBE FORMATTED bd_user_lo.tb_cs_user_lo_loc;

6. Mostrar los 10 primeros registros de las tablas creadas:


$ select*from bd_user_<nap>.tb_cs_user_<nap>_def limit 10;

$ select*from bd_user_<nap>.tb_cs_user_<nap>_loc limit 10;

$ select*from bd_user_lo.tb_cs_user_lo_def limit 10;

$ select*from bd_user_lo.tb_cs_user_lo_loc limit 10;


7. Realizar la siguiente consulta sobre la Tabla 2
select
r.casado as casado,
r.genero as genero,
CASE
WHEN r.region = 'Zona 1' THEN 'Lima'
WHEN r.region = 'Zona 2' THEN 'Callao'
ELSE 'Otras Regiones'
END AS region_zona,
avg(r.minutos_preferido) as prom_minutos_preferidos,
avg(r.adicionales) as prom_min_adicionales,
avg(r.ingreso_miles) as prom_ingreso_miles
from bd_user_<nap>.tb_cs_user_<nap>_loc as r
where r.Edad < 60
group by
r.casado,
r.genero,
r.region;

select
r.casado as casado,
r.genero as genero,
CASE
WHEN r.region = 'Zona 1' THEN 'Lima'
WHEN r.region = 'Zona 2' THEN 'Callao'
ELSE 'Otras Regiones'
END AS region_zona,
avg(r.minutos_preferido) as prom_minutos_preferidos,
avg(r.adicionales) as prom_min_adicionales,
avg(r.ingreso_miles) as prom_ingreso_miles
from bd_user_lo.tb_cs_user_lo_loc as r
where r.Edad < 60
group by
r.casado,
r.genero,
r.region;

Referencias:
● https://cwiki.apache.org/confluence/display/Hive/CSV+Serde
● https://cwiki.apache.org/confluence/display/Hive/DeveloperGuide#DeveloperGuide-H
iveSerDe
● https://datacadamia.com/db/hive/csv_serde
● https://docs.aws.amazon.com/athena/latest/ug/csv-serde.html

También podría gustarte