LINUX

Cómo importar datos de MySQL a HDFS usando Sqoop

Apache Sqoop es una herramienta en el ecosistema de Hadoop que se utiliza para importar / exportar datos entre RDBMS y HDFS. Estos datos están en formato estructurado y tienen un esquema. Hay varios casos en los que desea analizar algunos datos en su RDBMS, pero debido al gran tamaño de los datos, su RDBMS no es lo suficientemente capaz de procesar esos grandes datos. Por lo tanto, puede usar Sqoop en tales situaciones y enviar estos datos en HDFS donde almacenar y procesar big data no es un problema. En este blog, le mostraré cómo enviar datos desde MySQL a HDFS usando Sqoop Import.

MySql a HDFS usando Sqoop

Para mostrar este ejemplo, permítame crear una tabla en mysql que está en mi máquina con Windows y poner algunos datos en ella.

Cree una base de datos llamada ‘linóxido’, luego cree una tabla llamada ‘empleado’ ejecutando el siguiente comando:

Command: create table employee ( id int, name varchar(20), dept varchar(20) );

Inserte valores en la tabla empleado y verifique las filas presentes en la tabla empleado ejecutando el siguiente comando:

Command: select * from employee;

Ahora, abra el símbolo del sistema (CMD) en Windows y verifique la dirección IPv4 de su conexión LAN (en la mayoría de los casos vmnet1) ejecutando el siguiente comando:

Descubra la dirección IPv4 de su sistema mediante el paso anterior. En mi caso es 192.168.1.33

Otorgue todos los privilegios a root @ your_ipv4_address ejecutando el siguiente comando.

Command: grant all privileges on *.* to root@192.168.1.33 IDENTIFIED BY ‘root’ WITH GRANT OPTION; 

Descargue el conector de MySQL en su máquina donde está instalado sqoop usando los enlaces a continuación. Este conector es necesario para realizar la conexión entre Sqoop y Mysql db.

Conector MySQL: Descargar

Mueva el conector mysql a la carpeta lib de sqoop ejecutando el siguiente comando:

Command: sudo mv Downloads/mysql-connector-java-5.1.26-bin.jar /home/hadoop/sqoop/lib

Ahora estamos listos para ejecutar el comando sqoop import.

Elementos necesarios para el comando:

Dirección IPv4 – Su dirección IPv4. En mi caso es 192.168.1.33

Nombre de la base de datos – linóxido

Nombre de la tabla – empleado

Nombre de usuario – raíz

Directorio de salida – Podría ser cualquiera, he usado sqoop_out

Mando: bin / sqoop import –connect jdbc: mysql: //192.168.1.33/linoxide –table employee –username root -P –target-dir / sqoop_out -m 1

Ingrese la contraseña de su mysql cuando se le solicite.

Importe el empleado de la tabla presente en la base de datos MySQL a hdfs ejecutando el siguiente comando.

hadoop@hadoop-VirtualBox:~/sqoop$ bin/sqoop import --connect jdbc:mysql://192.168.
1.33/linoxide --table employee --username root -P --target-dir /sqoop_out  -m 1

16/12/25 03:03:04 INFO sqoop.Sqoop: Running Sqoop version: 1.4.5

Enter password:

16/12/25 03:03:09 INFO manager.MySQLManager: Preparing to use a MySQL streaming 
resultset.

16/12/25 03:03:09 INFO tool.CodeGenTool: Beginning code generation

Sun Dec 25 03:03:10 IST 2016 WARN: Establishing SSL connection without server's
 identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 
5.7.6+ requirements SSL connection must be established by default if explicit 
option isn't set. For compliance with existing applications not using SSL the 
verifyServerCertificate property is set to 'false'. You need either to explicitly 
disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for 
server certificate verification.

16/12/25 03:03:11 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM
 `employee` AS t LIMIT 1

16/12/25 03:03:11 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM
 `employee` AS t LIMIT 1

16/12/25 03:03:11 INFO orm.CompilationManager: HADOOP_MAPRED_HOME is /home/hadoop/
hadoop-2.7.3

16/12/25 03:03:21 INFO orm.CompilationManager: Writing jar file: /tmp/sqoop-hadoop/
compile/33bf897949f7b40e3cc1f5b5afae7cb3/employee.jar

16/12/25 03:03:21 INFO manager.MySQLManager: Setting zero DATETIME behavior to 
convertToNull (mysql)

16/12/25 03:03:21 INFO mapreduce.ImportJobBase: Beginning import of employee

16/12/25 03:03:23 INFO Configuration.deprecation: mapred.jar is deprecated. 
Instead, use mapreduce.job.jar

16/12/25 03:03:28 INFO Configuration.deprecation: mapred.map.tasks is deprecated. 
Instead, use mapreduce.job.maps

16/12/25 03:03:28 INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:
8032

Sun Dec 25 03:03:37 IST 2016 WARN: Establishing SSL connection without server's 
identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 
5.7.6+ requirements SSL connection must be established by default if explicit 
option isn't set. For compliance with existing applications not using SSL the 
verifyServerCertificate property is set to 'false'. You need either to explicitly 
disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for 
server certificate verification.

16/12/25 03:03:37 INFO db.DBInputFormat: Using read commited transaction isolation

16/12/25 03:03:38 INFO mapreduce.JobSubmitter: number of splits:1

16/12/25 03:03:39 INFO mapreduce.JobSubmitter: Submitting tokens for job: 
job_1482614949106_0001

16/12/25 03:03:42 INFO impl.YarnClientImpl: Submitted application 
application_1482614949106_0001

16/12/25 03:03:43 INFO mapreduce.Job: The url to track the job: 
http://hadoop-VirtualBox:8088/proxy/application_1482614949106_0001/

16/12/25 03:03:43 INFO mapreduce.Job: Running job: job_1482614949106_0001

16/12/25 03:04:25 INFO mapreduce.Job: Job job_1482614949106_0001 running in
 uber mode : false

16/12/25 03:04:25 INFO mapreduce.Job:  map 0% reduce 0%

16/12/25 03:04:51 INFO mapreduce.Job:  map 100% reduce 0%

16/12/25 03:04:52 INFO mapreduce.Job: Job job_1482614949106_0001 completed 
successfully

16/12/25 03:04:53 INFO mapreduce.Job: Counters: 30

File System Counters

FILE: Number of bytes read=0

FILE: Number of bytes written=127675

FILE: Number of read operations=0

FILE: Number of large read operations=0

FILE: Number of write operations=0

HDFS: Number of bytes read=87

HDFS: Number of bytes written=86

HDFS: Number of read operations=4

HDFS: Number of large read operations=0

HDFS: Number of write operations=2

Job Counters

Launched map tasks=1

Other local map tasks=1

Total time spent by all maps in occupied slots (ms)=20382

Total time spent by all reduces in occupied slots (ms)=0

Total time spent by all map tasks (ms)=20382

Total vcore-milliseconds taken by all map tasks=20382

Total megabyte-milliseconds taken by all map tasks=20871168

Map-Reduce Framework

Map input records=5

Map output records=5

Input split bytes=87

Spilled Records=0

Failed Shuffles=0

Merged Map outputs=0

GC time elapsed (ms)=210

CPU time spent (ms)=2780

Physical memory (bytes) snapshot=118214656

Virtual memory (bytes) snapshot=1904357376

Total committed heap usage (bytes)=54853632

File Input Format Counters

Bytes Read=0

File Output Format Counters

Bytes Written=86

16/12/25 03:04:53 INFO mapreduce.ImportJobBase: Transferred 86 bytes in 85.6488
seconds (1.0041 bytes/sec)

16/12/25 03:04:53 INFO mapreduce.ImportJobBase: Retrieved 5 records.

Una vez que se completa el trabajo, verifique la salida almacenada en HDFS

hadoop@hadoop-VirtualBox:~/sqoop$ hdfs dfs -cat /sqoop_out/part-m-00000

1,John,sales

2,Alex,Development

3,Jessica,Marketing

4,Luke,Operation

5,Lisa,Marketing

hadoop@hadoop-VirtualBox:~/sqoop$

Oracle a HDFS

De manera similar, para enviar los datos de la base de datos de Oracle a HDFS, deberá colocar el conector de Oracle en el directorio lib de sqoop.

Conector de Oracle: Descargar

A continuación se muestran los elementos necesarios para que el comando importe datos de Oracle a HDFS:

Dirección IPv4 – Su dirección IPv4. En mi caso es 192.168.1.33

Nombre de la base de datos – linóxido

Nombre de la tabla – empleado

Nombre de usuario – raíz

Directorio de salida – sqoop_out

Mando – sudo bin / sqoop import –connect jdbc: oracle: thin: system/system@192.168.1.33: 1521: xe –nombre de usuario system -P –table system.emp –columnas “ID” –target-dir / sqoop_out-m 1

Conclusión

¡Felicidades! Ha transferido con éxito datos de MySQL a HDFS usando Apache Sqoop. De manera similar, puede transferir datos estructurados desde cualquier RDBMS a HDFS que desee procesar, asegúrese de colocar los conectores en el directorio lib de sqoop antes de ejecutar el comando de importación / exportación.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar