Taller Formativo Evaluación Sqoop

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 18

Taller de Sqoop formartivo y evaluativo

Este taller de evaluación tiene como propósito que el estudiante ponga a prueba el uso de un
Clúster de Big data haciendo ingestión de una base de datos relacional a HDFS y Hive (Apache
Software Fundation)

Use Apache Sqoop para importar y exportar datos entre


Apache Hadoop en HDInsight y Azure SQL Database o desde
y hacia AWS EMR y MySQL.

Aprenda a usar Apache Sqoop para realizar importaciones y exportaciones entre un clúster
de Apache Hadoop en AWS EMR (Azure HDInsight) y Mysql (Azure SQL Database) o
Microsoft SQL Server . En los pasos descritos en este documento se usa el
comando sqoop directamente desde el nodo principal del clúster de Hadoop. Usaremos
SSH para conectarnos al nodo principal y ejecutar los comandos de este documento. Si
desea más información de sqoop puede ingresar a la Sqoop User Guide (v1.4.7) (apache.org)

Uso de Apache Sqoop con Hadoop en HDInsight o AWS EMR

A pesar de que Apache Hadoop es una opción natural para procesar datos no
estructurados y datos semiestructurados, como registros y archivos, es posible que
también sea necesario procesar datos estructurados almacenados en bases de
datos relacionales.

Apache Sqoop es una herramienta diseñada para transferir datos entre clústeres de
Hadoop y bases de datos relacionales. Puede usarla para importar datos desde un
sistema de administración de bases de datos relacionales (RDBMS) como SQL
Server, MySQL u Oracle en el sistema de archivos distribuidos Hadoop (HDFS),
transformar los datos de Hadoop con MapReduce o Apache Hive y, a continuación,
exportar los datos en un RDBMS. En este artículo, usará MySQl como base de
datos relacional.
Importante

En este taller evaluativo se configura un entorno de prueba en AWS EMR para


realizar la transferencia de datos. Debes hacerlo con la configuración de
opciones avanzada para seleccionar sqoop. (Si tiene algún error en el inicio
recuerde que en algunos ejercicios hemos abierto puerto públicos (0.0.0.0).
Revise primero y póngalas en MyIp. Recuerde que configurar el release: emr-
6.5.0.
Configuración del entorno de prueba

En el clúster EMR , está preinstalado MySQl que usaremos en el nodo Máster.


1. Configure un entorno EMR, que tenga instalado Hive. Capture la pantalla
cuando el entorno EMR haya iniciado aquí, es decir capture la pantalla de AWS
donde muestra la configuración del entorno, es decir una parecida a esta:

Pegue aquí la pantalla capturada.

2. Copie el DNS asignado al nodo Master


_________________________________

3. Ingrese a nodo master usando el Ssh


Digite el comando completo usado para conectar:
Ssh -o xxxxxxxxxxxxxxxxxxx_____________

4. Descarguemos la base de datos de trabajo (recuerde usar wget)


https://raw.githubusercontent.com/dgadiraju/code/master/hadoop/edw/database/
retail_db.sql

Liste la carpeta y pegue la evidencia (pantallazo de la descarga)

Pegue la imagen

5. Ejecute ingrese con a Mysql


> sudo mysql

6. Creamos un usuario y password (por favor pegue aquí el script usado para crear su propio
usuario

CREATE USER 'adiaz'@'%' IDENTIFIED BY 'Dclaros1';


GRANT ALL PRIVILEGES ON *.* TO 'adiaz'@'%';
FLUSH PRIVILEGES;
7. Verifique que el usuario fue creado correctamente, antes de salir de
mysql con root.

 SELECT user FROM mysql.user;


 SELECT user,host FROM mysql.user;

Pegue aquí el resultado del comando donde se ve el usuario creado.

8. Ahora ingrese con su propio usuario, pegue aquí la captura de pantalla


que se veri que que ingreso a Mysql y creó la base de datos retail_db.

mysql -u adiaz -p
create database retail_db;

Pegue aquí captura de pantalla.

9. Salga de Mysql una vez verificado que el usuario y el password están correctamente creados.
>exit;

10. Ahora vamos a crear una base de datos y las tablas correspondientes a retail (punto de
venta). Recuerde que debe estar en Linux y en la carpeta donde está el archivo retail_db.
Este archivo es un backup de una base de datos, la cual vamos a recuperarlas en Mysql.

mysql -u adiaz -p retail_db < retail_db.sql

11. Hora ingresa nuevamente a Mysql,


 mysql -u adiaz -p
Vamos a configura a HUE para ver por http las bases de datos y el hdfs

1. Cd /etc/hue/conf/
2. Sudo nano hue.ini
3. CTRL W interpreters, busque MySQL [[[mysql]]] y remplace la configuración por
la siguiente: recuerde que debe poner su usuario y password

4. [[[mysql]]]
5. #name = MySQL
6. #interface = rdbms
7. name=MySQL
8. interface=sqlalchemy
9. options='{"url": "mysql://adiaz:Dclaros1@localhost:3306/"}'

10. CTRL W y busque el texto: webhdfs


11. Y cambie al puerto 9870 el puerto 14000 (solo cambie el puerto no toque la ip)
12. webhdfs_url = http://ip-172-31-31-193.ec2.internal:9870/webhdfs/v1
13. CTRL X
14. Yes
15. Enter
16. sudo service hue restart
17. cd~
18. Cree una carpeta en hadoop con el usuario que va a usar HUE.

Por ejemplo: hdfs dfs -mkdir /user/adiaz

Abra un navegador, ingrese a su servidor por el puerto 8888, digite un usuario (el que creó la
carpeta) y una clave y debe entrar a:
Ahora hga clicen </> y selecciones MySql

Luego haga clic en < y selecciona retail_db


Pruebe hacer consultas

Ve a HDFS y revisemos el

Vamos a hacer algunas prácticas de sentencias DDL en MySql en el


Shell.

1. Verifiquemos la versión de MySql instalada


> SELECT @@version;

2. Use la base de datos retail_db


>use retail_db;

3. Muestre las tablas creadas al importar el dump a Mysql


>show tables;

Pegue aquí la captura de pantalla

4. Qué categorías de productos hay. Complete:


select * ____ _____________

5. Utilice el comando describe para ver los campos de las tablas.

MariaDB [retail_db]>
select category_name, count(product_id) from categories join products on
products.product_category_id=categories.ca
tegory_id group by category_name;

Pegue aquí la evidencia

1. Ahora vamos a hacer una exportación de parte de los registros de una tabla con la condición
Where.

2. Liste las columnas de la tabla customers

Respuesta: ___________________ (cópiela de la imagen, ya está hecha)

3. Haga un Query en Mysql para listar nombre y la ciudad de los que viven en Austin
Respuesta: ___________________ (cópiela de la imagen, ya está hecha)

Revise las otras tablas por su cuenta para conocer bien la base de datos del punto de
venta.

Vamos a importar a HDFS desde MySql

4. Abra otro terminal y verifiquemos la instalación y la versión de Sqoop, solo escriba sqoop y
allí aparece un texto: “running Sqoop version: XXXX (Escriba su repuesta)

5. Debemos instalar el driver para que sqoop se conecte a Mysql por Jdbc.
Vaya a la carpeta mysql-connector-java-5.1.41-bin.jar
6. Vamos a importar la base de datos así, recuerde que debe cambiar el DNS servidor y el
usuario de MySql:

sqoop import --driver org.mariadb.jdbc.Driver --connect jdbc:mysql://ec2-3-94-7-239.compute-


1.amazonaws.com/retail_db --username=adiaz -P --table categories --target-dir=/user/hadoop/categoria

(la carpeta destino no debe existir, si desea repetir el comando debe ingresar a hadoop a
ver si la carpeta ya fue creada y debe borrarla.
Hdfs dfs -rm categoría)
(Revise bien que no queden espacios adicionales o caracteres cuando copie y pegue el
cmando completo.
sqoop import : es el programa.
connect jdbc:mysql://ec2-3-91-87-62.compute-1.amazonaws.com/retail_db: es el string
de conexión a la base de datos.
--driver org.mariadb.jdbc.Driver: es la indicación que vamos a usar el driver de mariadb
como mysql.
--username=adiaz -P : es el usuario de Mysql
--table categories \: es la tabla que queremos copiar
--target-dir /user/hadoop/categoria : es la carpeta de hadoop donde vamos a llevar la
tabla de Mysql.

Haga este comado y observe que cargo la carpeta categoria.

hdfs dfs -ls /user/hadoop y hdfs dfs -ls /user/hadoop/categoria

Capture pantalla

Haga un cat al primer archivo

hdfs dfs -ls /user/hadoop/part-m-00000

7. En HUE, revise en la carpeta en HDFS llamada categorias.


6. Por comandos HDFS
hdfs dfs -ls /user/hadoop/categoria

Pegue aquí la pantalla de salida


hdfs dfs -cat /user/hadoop/categoria/part-m-00000

Pegue aquí

Pegue aquí la pantalla de salida

Vamos a exportar de HDFS desde MySql


En este punto vamos a traer la tabla de categorías que está en el HDFS, como si
fuera a importar de allí a MySql, por esta razón debemos crear una nueva base de
datos.

1. Ingrese a mysql
mysql -u adiaz -p

2. Revisemos en Mysql que bases de datos hay creadas


show databases;

3. Creemos una base de datos llamada ventas


4. Usemos la base de datos y revisemos si tiene tablas

5. Creemos una tabla -para importar la lista de categorías que llevamos a DHFS.
Debe tener los mismos campos.
Use ventas;
create table categorias (id INT NOT NULL PRIMARY KEY, id_categoria INT, nomnre
VARCHAR(30));
show tables;
show columns from categorías; es lo mismo que escribir >describe categorias

Pegue aquí la pantalla de salida del último comando

6. Salir de Mysql
>exit;
7. Exportemos de los archivos de HDFS en Sqoop (qué son los de categorías) hacia la nueva
base de datos y la tabla. Verifique que no haya carpetas u otros archivos en la carpeta
Sqoop.

sqoop export --driver org.mariadb.jdbc.Driver --connect jdbc:mysql://ec2-3-94-7-


239.compute-1.amazonaws.com/ventas --username=adiaz -P --table categorias --
export-dir=/user/hadoop/categoria

8. Revisemos en la tabla ventas de Mysql si los registros fueron transferidos.


mysql -u adiaz -p;
use ventas;
select * from categorias;

Pegue aquí la ultima pantalla de salida


9. Nota:
Si desea importar los resultados de una consulta en paralelo, cada tarea de mapeo deberá
ejecutar una copia de la consulta, con los resultados divididos por las condiciones límite
inferidas por Sqoop. Su consulta debe incluir el token $CONDITIONS que cada proceso
Sqoop reemplazará con una expresión de condición única. También debe seleccionar una
columna de división con --split-by.

Alternativamente, la consulta puede ejecutarse una vez e importarse en


serie, especificando una única tarea de mapa con -m 1:

Finalmente vamos a exportar desde MySql a Hive


En este punto vamos a traer la base de datos que está en mysql a hive resultado de
una consulta.

sqoop import --driver org.mariadb.jdbc.Driver --connect


jdbc:mysql://ec2-3-94-7-239.compute-1.amazonaws.com/retail_db --username=adiaz -P --table products --
create-hive-table --hive-table productos --hive-import -m 1

sqoop export --connect jdbc:mariadb://$HOSTNAME:3306/mydb --table mysqoopexport --export-


dir s3://mybucket/myinputfiles/ --driver org.mariadb.jdbc.Driver --username master --password
Mymasterpass1

Verifiquemos que quedó creada


Vamos a la tabla productos de Hive
Limitaciones

 Exportación masiva: con HDInsight o EMR (Hadoop) basado en Linux,


el conector Sqoop que se usa para exportar datos a SQL no admite
inserciones masivas, para esto usamos Kafka.

 Procesamiento por lotes: con HDInsight o AWS basado en Linux,


cuando se usa -batch al realizar inserciones, Sqoop realiza varias
inserciones en lugar de procesar por lotes las operaciones de inserción.

Consideraciones importantes

 Tanto HDInsight o AWS y como SQL Server o MySQl deben estar en la


misma red.

 SQL Server o MySQL estar configurado para permitir la autenticación


SQL..

 Es posible que tenga que configurar SQL Server o MySQL para aceptar
conexiones remotas.

Pasos futuros

Ahora ya ha aprendido a usar Sqoop. Para obtener más información, consulte:

 Uso de Apache Oozie con HDInsight: use la acción Sqoop en un flujo de


trabajo de Oozie.
 Análisis de la información de retraso de vuelos con HDInsight: use Interactive
Query para analizar los datos de retraso de vuelos y luego use Sqoop para
exportar los datos a una base de datos en Azure.
 Carga de datos en HDInsight: busque otros métodos para cargar datos en
HDInsight o Azure Blob Storage.

También podría gustarte