Data Pipeline: Módulo 7

Image for post
Image for post

Durante la séptima sesión del curso de Data Analytics en AWS, se continuo con el módulo de procesamiento de datos. Seguimos estudiando lo que es Data Pipeline y EMR.

Data Pipeline

Es un servicio de procesamiento de datos y trasferencia de los mismos ofreciendo fiabilidad, intervalos definidos, entre otras.

Se puede obtener acceso con regularidad a las ubicaciones donde se encuentran almacenados los datos, se los puede transformar y procesar a escala y trasnferirlos con eficacia a otros servicios de AWS como Amazon S3, Amazon RDS, Amazon Dynamo DB y Amazon EMR.

EMR

es una plataforma de Big Data nativa en la nube que permite procesar grandes volúmenes de datos de manera rápida y rentable a escala. Utiliza herramientas de código abierto como Apache Spark, Apache Hive, Apache HBase, Apache Flink y Apache Hudi, las cuales se combinan con la escalabilidad dinámica de Amazon EC2 y el almacenamiento escalable de Amazon S3.

Image for post
Image for post

Laboratorio EMR, Hadoop, HDFS, Hive y Spark:

En este laboratorio se realizó la importación de datos a Hive, consultas mediante Hue, CLI y Spark.

Image for post
Image for post

Para la aplicación de laboratorio de procesamiento de datos se realizó lo siguiente:

  1. Ingresar a la consola de AWS y acceder al servicio de S3, creando un nuevo bucket. Una vez creado el bucket se debe crear una carpeta dentro denominada data, dentro de esta carpeta, crear una carpeta llamada videogames. En esta carpeta se debe subir el archivo videogames.csv
  2. Ingresar al servicio de EMR y creamos un cluster , al momento de crear el cluster se debe elegir en opciones avanzadas lo siguiente:
Image for post
Image for post

3. Dentro de las opciones avanzadas se debe seleccionar Hadoop 2.8.5, Hive 2.3.6 Hue 4.4.0 Spark 2.4.4 y se selecciona la opción Usar para metadatos de la tabla de Hive y Spark como se muestra a continuación:

Image for post
Image for post

4. Se debe seleccionar las zonas de disponibilidad que se encuentren dentro de los límites de AWS como us-east-1a, us-east-1b, us.east.1c. La familia a usar será m5.xlarge que ofrece 4v core y 16 GB de memoria y se da click en next.

Image for post
Image for post

5. Se le otorga el nombre al cluster como ClusterBigData en el paso de configuración general del cluster. Como último paso en el de seguridad se debe poner la clave que se creada y guardada en la segunda sesión ya que nos vamos a loguear mediante SSH al nodo maestro. Finalmente se crea el cluster.

Image for post
Image for post

6. Se agregan dos reglas de entrada para el SG del nodo maestro del cluster, en el puerto 8888 para el acceso a Hue (Hadoop User Experience) y el puerto 22 para acceder mediante SSH.Se selecciona el SG se da clic en la pestaña Inbound y clic en Edit.

Image for post
Image for post
Image for post
Image for post

Se deberá esperar entre 8 a 10 minutos para que el cluster esté listo para usarlo.

7. Se debe acceder a Hue para lo cual se debe obtener el DNS público del cluster EMR, copiando la url y la pegamos en una pestaña de navegador.

Image for post
Image for post

8. Se debe agregar el puerto 8888 y aparecerá la siguiente interfaz donde se debe ingresar un usuario y una clave.

Image for post
Image for post

9. Dentro de Hue se debe seleccionar la opción S3 para ver los buckets creados, se selecciona el bucket creado y nos dirigimos hacia el archivo de videogames.csv , damos clic en la opción Open in Importer

Image for post
Image for post

10. Hacemos clic en next, después en submit y se creara una tabla en Hue.

11. Damos clic en Query para explorar la tabla creada.

12. Se puede probar el siguiente Query SELECT name,platform,year_of_release,user_score,user_count FROM `default`.`videogames`

WHERE isnotnull(user_score) AND user_score < 10 and user_count > 5000;

Image for post
Image for post

13. Accedemos mediante SSH al nodo maestro del cluster, en MobaXTerm creando un nuevo inicio de sesión Remote Host: La url que corresponde al DNS público del clúster y la clave es que la tenemos desde la segunda sesión. Una vez abierto la sesión se debe subir el archivo WorldCupMatches.csv a la raíz /home/hadoop del clúster

Image for post
Image for post

14. Con el comando hdfs dfs -ls / lo que permite listar las carpetas dentro de HDFS.

15. Se debe copiar en una carpeta en hdfs el archivo WorldCupMatches.csv con los siguientes comandos:

Image for post
Image for post

16. Se ejecuta el comando hive donde se creará un nuevo schema: create schema mundial;

Image for post
Image for post

17. Se crea la siguiente tabla en Hive

CREATE TABLE mundial.match (

`Year` string,

`Date_time` string,

`Stage` string,

`Stadium` string,

`City` string,

`HomeTeamName` string,

`HomeTeamGoals` int,

`AwayTeamGoals` int,

`AwayTeamName` string,

`Winconditions` string,

`Attendance` int,

`HalftimeHomeGoals` string,

`HalftimeAwayGoals` string,

`Referee` string,

`Assistant1` string,

`Assistant2` string,

`RoundID` int,

`MatchID` int,

`HomeTeamInitials` string,

`AwayTeamInitials` string

)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY ‘,’

LINES TERMINATED BY ‘\n’

STORED AS TEXTFILE

LOCATION ‘/hive/schema/mundial/tables/match’

TBLPROPERTIES(“skip.header.line.count” = “1”);

19. Ahora se accede a Spark ejecutando en el terminal en el terminal: spark-shell y realizando consultas con consultas con SparkSQL a Hive.

val df = sql(“select * from mundial.match”)

df.show(10)

df.printSchema()

df.count()

df.show(5)

df.filter(“City like ‘Mont%’”).show()

#Guardando resultados en formato parquet

val dataDir = “/tmp/parquet_data”

df.repartition(1).write.parquet(dataDir)

#Leyendo los archivos parquet

val parquetDF = spark.read.parquet(“/tmp/parquet_data”)

parquetDF.show(10)

Image for post
Image for post

19. Se verifica que los archivos se hayan subido al parquet de S3

Image for post
Image for post

20. Se debe finalizar el cluster para que no se siga cobrando.

Autores:

  • Michelle Herrera
  • Cristian Moyano
  • Lui Moyano
  • Edwin Rodríguez

Conoce más: bootcampai.org/aws-big-data

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store