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.