Importación de datos en HDFS con Sqoop
Imagine una base de datos relacional utilizado por una empresa de servicios de ficción que ha tenido (lo has adivinado) llamadas de servicio Apache Hadoop y ahora quiere mover algunos de sus información en aquel Hadoop para ejecutar consultas colmena, el apalancamiento HBase escalabilidad y el rendimiento, y ejecutar análisis de texto en descripciones de los problemas de sus clientes.
Sqoop es la herramienta que usted desea utilizar para importar datos de tablas relacionales en tablas HBase sobre Hadoop.
En la siguiente lista, se puede ver los comandos de MySQL utilizados para construir la base de datos de la orden de servicio que se ve en la figura. Instalado es un RDBMS MySQL que se podía importar y exportar a usar Sqoop.
/ * Crear la Contratación de Servicios de base de datos * / CREATE DATABASE serviceorderdb-USO serviceorderdb - / * Crear la Tabla de información de producto * / CREATE productinfo MESA (productnum CHAR (4) PRIMARY KEY, productdesc VARCHAR (100)) - / * Crear el cliente Contacto Tabla de información * / CREATE TABLE customercontactinfo (customernum INT PRIMARY KEY, CustomerName VARCHAR (100), contactinfo VARCHAR (100), productnums SET ('A100', 'A200', 'A300', 'B400', 'B500', 'C500 ',' C600 ',' D700 ')) - / * Crear la Mesa de Contratación de Servicios * / CREATE serviceorders MESA (serviceordernum INT PRIMARY KEY, INT customernum, productnum CHAR (4), estado VARCHAR (100), FOREIGN KEY (customernum) Referencias customercontactinfo (customernum), FOREIGN KEY (productnum) REFERENCIAS ProductInfo (productnum)) - / * Inserte los datos del producto en la Tabla de información de producto * / INSERT INTO VALORES productinfo ('A100', 'HBase Product Support') - INSERT INTO VALORES productinfo ('A200', 'Colmena Product Support') - INSERT INTO VALORES productinfo ('A300', 'Sqoop Product Support') - INSERT INTO VALORES productinfo ('B400', 'Ambari Soporte del producto') - INSERT INTO VALORES productinfo (' B500 ',' HDFS Product Support ') - INSERT INTO VALORES productinfo (' C500 ',' Mahout Product Support ') - INSERT INTO VALORES productinfo (' C600 ',' Zookeeper Soporte del producto ') - INSERT INTO VALORES productinfo (' D700 ' , 'Pig Product Support ") - los datos / * Inserte el cliente en el cliente Contacto Información de la tabla * / INSERT INTO customercontactinfoVALUES (10000,' John, Timothy Smith ',' 1 Hadoop Lane, NY, 11111, john.smith @ xyz.com ' , 'B500') - INSERT INTO customercontactinfoVALUES (10001, "Bill Jones ',' 2 HBase Ave, CA, 22222 ',' A100, A200, A300, B400, B500, C500, C600, D700 ') - INSERT INTO customercontactinfoVALUES ( 20000, 'Jane Ann Doe', '1 Experto HBase Ave, CA, 22222', 'A100, A200, A300') - INSERT INTO customercontactinfoVALUES (20001, 'Joe desarrollador', '1 piglatin Ave, CO, 33333', ' D700 ') - INSERT INTO customercontactinfoVALUES (30000, "Datos científico', '1 Estadísticas Lane, MA, 33333', 'A300, C500') - / * Ingrese órdenes de servicio en la Mesa de Contratación de Servicios * / INSERT INTO serviceordersVALUES (100.000, 20000, 'A200', 'Tengo algunas preguntas sobre la construcción de consultas HiveQL? Mi Hadoop para Dummies libro no ha llegado todavía! ') - INSERT INTO serviceordersVALUES (100001, 10001,' A100 ',' Necesito entender cómo configurar Zookeeper para mi HBase Cluster ') - INSERT INTO serviceordersVALUES (200000, 20001, 'D700', 'Yo escribo algunos piglatin y tengo un par de preguntas? ") - INSERT INTO serviceordersVALUES (200.001, 30.000,' A300 ',' ¿Cómo puedo combinar mis conjuntos de datos después de las importaciones incrementales Sqoop? ') -
El siguiente listado confirma que la base de datos MySQL orden de servicio ha sido creado usando los comandos mostrados anteriormente, y muestra los nombres de las tablas que se importará el uso Sqoop.
mysql> mesas de demostración - + -------------------------- + | Tables_in_serviceorderdb | + -------------------------- + | customercontactinfo || productinfo || serviceorders | + -------------------------- + 3 rows in set (0.00 sec)
Ahora que usted ha visto los registros de base de datos MySQL orden de servicio que están esperando a ser explotados, es hora de dar vuelta a su atención a Hadoop y ejecutar el primer comando Sqoop.
No tire de la confianza importación ordenar la derecha del palo. Sqoop incluye varias herramientas útiles, junto con importación y exportación, incluyendo el list-bases de datos comando, que se utiliza en el listado siguiente. El uso de ese comando, se puede confirmar que tiene conectividad y visibilidad en la base de datos MySQL.
$ Sqoop list-bases de datos --connect jdbc: mysql: // localhost / - nombre de usuario contraseña -PEnter root: 13/08/15 17:21:00 INFO manager.MySQLManager: Preparación para usar un streaming de resultset.information_schemamysqlperformance_schema MySQLserviceorderdb
los serviceorderdb se muestra a estar disponible, por lo que ahora usted puede enumerar las tablas dentro serviceorderdb mediante el uso de la Sqoop list-mesas comandos. Observe que ahora va a añadir la base de datos que desea Sqoop para acceder en el jdbc: mysql URL:
$ Sqoop lista tablas - conectar jdbc: mysql: // localhost /serviceorderdb --nombre de usuario -PEnter root contraseña: 13/08/15 17:22:01 INFO manager.MySQLManager: Preparación para usar un MySQL resultset.customercontactinfoproductinfoserviceorders de streaming
Sqoop cuenta ahora con conectividad y puede tener acceso a las tres tablas de la figura. Esto significa que puede ejecutar su primera Sqoop importación mando y dirigir el serviceorders Mesa con una conciencia limpia. Sqoop importación comandos tienen este formato:
Sqoop importación (argumentos genéricos) (argumentos de importación)
Con los argumentos genéricos, señala a su base de datos MySQL y proporciona la información de inicio de sesión es necesario, tal como lo hizo con el anterior list-mesas herramienta. En los argumentos de importación, usted (el usuario) tiene la posibilidad de especificar lo que desea importar y cómo quiere que la importación a realizar.
En el listado siguiente, se especifica la tabla serviceorders y solicitar que una tarea mapa utilizarse para la importación mediante el -m 1 CLA. (Por defecto, Sqoop usaría cuatro tareas mapa, pero eso sería una exageración para esta pequeña mesa y nuestra máquina virtual.)
También ha especificado el --nombre de clase para el código generado y especificado el --bindir donde el código compilado y .tarro archivo debe encontrarse. (Sin estos argumentos, Sqoop colocaría el archivo fuente de Java generado en el directorio de trabajo actual y el compilado .clase archivo y .archivo jar en / tmp / sqoop-
El nombre de la clase, simplemente se deriva del nombre de la tabla a menos que especifique un nombre con la ayuda del --nombre de clase argumento de la línea de comandos (CLA). los --meta-dir es la ubicación en HDFS en las que desea la tabla importada para ser colocado.
$ Sqoop importación - conectar jdbc: mysql: // localhost / serviceorderdb - nombre de usuario root -P - serviceorders mesa -m 1 - class-name serviceorders - meta-dir / usr / BiAdmin / serviceorders -import - bindir .Enter contraseña: ... 13/08/25 14:43:56 INFO mapreduce.ImportJobBase: Transferido 356 bytes en 21.0736 segundos (16.8932 bytes / seg) 13/08/25 14:43:56 INFO mapreduce.ImportJobBase: Obtenido 4 registros.