Importation de données dans HDFS avec Sqoop

Imaginez une base de données relationnelle utilisée par une société de service fictif qui a été pris (vous l'aurez deviné) les appels de service Apache Hadoop et veut maintenant déplacer certains de ses données vers Hadoop pour exécuter des requêtes ruche, l'effet de levier HBase évolutivité et les performances, et exécuter l'analyse de texte sur Les descriptions de problèmes de ses clients.

image0.jpg

Sqoop est l'outil que vous aurez envie d'utiliser pour importer des données à partir de tables en tables relationnelles Hbase sur Hadoop.

Dans la liste suivante, vous pouvez voir les commandes MySQL utilisés pour construire la base de l'ordre de service que vous voyez dans la figure. Installé est un SGBDR MySQL que vous pourriez importer et exporter à l'aide Sqoop.

/ * Créer la base de données des ordres de service * / CREATE DATABASE serviceorderdb-UTILISATION serviceorderdb - / * Créez le Tableau d'informations Produit * / CREATE TABLE productinfo (productnum CHAR (4) PRIMARY KEY, productdesc VARCHAR (100)) - / * Créez la clientèle Contactez- Informations tableau * / CREATE TABLE customercontactinfo (NumClient INT PRIMARY KEY, CustomerName VARCHAR (100), contactinfo VARCHAR (100), productnums set ('A100', 'A200', 'A300', 'B400', 'B500', 'C500 »,« C600 »,« D700 »)) - / * Créer la table des ordres de service * / Créer serviceorders de table (serviceordernum INT PRIMARY KEY, NumClient INT, productnum CHAR (4), le statut VARCHAR (100), une clé étrangère (NumClient) Références customercontactinfo (NumClient), une clé étrangère (productnum) Références ProductInfo (productnum)) - / * insérer des données de produits dans le Tableau d'informations Produit * / INSERT INTO VALEURS ProductInfo ('A100', 'HBase Product Support') - INSERT INTO VALEURS ProductInfo («A200», «Hive Product Support ') - INSERT INTO VALEURS ProductInfo (' A300 ',' Sqoop Product Support ') - INSERT INTO VALEURS ProductInfo (' B400 ',' Ambari Product Support») - INSERT INTO VALEURS ProductInfo (' B500 »,« HDFS Product Support ') - INSERT INTO VALEURS ProductInfo («C500», «Mahout Product Support') - INSERT INTO VALEURS ProductInfo (« C600 »,« Zookeeper Product Support ») - INSERT INTO VALEURS ProductInfo ('D700' «Pig Product Support») - données / * Insérez des clients dans le Client Contact Information Table * / 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 Expert HBase Ave, CA, 22222 ',' A100, A200, A300 ') - INSERT INTO customercontactinfoVALUES (20001,' Joe Developer ',' 1 Piglatin Ave, CO, 33333 ',' D700 ') - INSERT INTO customercontactinfoVALUES (30000, «Scientifique de données', '1 Statistique Lane, MA, 33333', 'A300, C500') - / * Entrez les ordres de service dans les ordres de service de table * / INSERT INTO serviceordersVALUES (100000, 20000, «A200», «Je me pose des questions sur la construction de requêtes HiveQL? Mon Hadoop pour les nuls livre n'a pas encore arrivé! ') - INSERT INTO serviceordersVALUES (100001, 10001, «A100», «Je dois comprendre comment configurer Zookeeper pour mon Cluster HBase') -? INSERT INTO serviceordersVALUES (200000, 20001, «D700», «Je vous écris quelque Piglatin et je vous poser quelques questions?") - INSERT INTO serviceordersVALUES (200001, 30000 'A300', 'Comment puis-je fusionner mes ensembles de données après Sqoop importations supplémentaires?) -

La liste suivante confirme que la base de données MySQL ordre de service a été créé en utilisant les commandes indiquées précédemment, et vous montre les noms de table que vous importez d'utiliser Sqoop.

mysql> show tables - + -------------------------- + | Tables_in_serviceorderdb | + -------------------------- + | customercontactinfo || productinfo || serviceorders | + -------------------------- + 3 rows in set (0.00 sec)



Maintenant que vous avez vu les MySQL Service Commander enregistrements de base de données qui ne demandent qu'à être exploitées, il est temps de tourner votre attention sur Hadoop et exécutez votre première commande Sqoop.

Ne tirez pas sur le fidèle importation commander dès le départ. Sqoop comprend plusieurs outils pratiques ainsi que importation et exportation, incluant le liste-bases de données commande, qui est utilisé dans la liste suivante. En utilisant cette commande, vous pouvez confirmer que vous avez la connectivité et la visibilité dans la base de données MySQL.

Sqoop $ list-bases de données --connect jdbc: mysql: // localhost / - nom d'utilisateur mot de passe -PEnter racine: 13/08/15 17:21:00 INFO manager.MySQLManager: Préparation pour utiliser un flux MySQL resultset.information_schemamysqlperformance_schemaserviceorderdb

La serviceorderdb est montré pour être disponible, alors maintenant vous pouvez lister les tables à l'intérieur serviceorderdb en utilisant le Sqoop Liste des tables commande. Notez que maintenant vous ajoutez la base de données que vous souhaitez Sqoop pour accéder au JDBC: URL mysql:

Sqoop $ liste tables - connecter jdbc: mysql: // localhost /serviceorderdb --Nom d'utilisateur Mot de passe -PEnter racine: 13/08/15 17:22:01 INFO manager.MySQLManager: Préparation à l'utilisation en streaming MySQL resultset.customercontactinfoproductinfoserviceorders

Sqoop a maintenant la connectivité et peut accéder aux trois tables de la figure. Cela signifie que vous pouvez exécuter votre première Sqoop importation de commandement et de cibler le serviceorders table avec une conscience propre. Sqoop importation commandes ont ce format:

Sqoop importation (arguments génériques) (arguments d'importation)

Avec les arguments génériques, vous pointez votre base de données MySQL et fournissez les informations de connexion nécessaires, comme vous le faisiez avec la précédente Liste des tables outil. Dans les arguments d'importation, vous (l'utilisateur) avez la possibilité de spécifier ce que vous voulez importer et comment vous voulez l'importation à effectuer.

Dans la liste suivante, vous spécifiez la table serviceorders et demander que l'on tâche de carte être utilisé pour l'importation en utilisant la -1 m CLA. (Par défaut, Sqoop utiliserait quatre tâches de carte, mais ce serait exagéré pour cette petite table et notre machine virtuelle.)

Vous avez également indiqué la --nom de la classe pour le code généré et précisé le --bindir où le code compilé et .bocal fichier doit être situé. (Sans ces arguments, Sqoop serait placer le fichier source Java généré dans votre répertoire de travail courant et compilé .classe fichier et .fichier jar dans / tmp / sqoop-/ compiler.)

Le nom de la classe découle simplement du nom de la table, sauf si vous spécifiez un nom avec l'aide de la --nom de la classe argument de ligne de commande (CLA). La --cible-dir est l'endroit où vous souhaitez HDFS la table importée pour être placé.

Sqoop $ import - connecter jdbc: mysql: // localhost / serviceorderdb - nom d'utilisateur root -P - serviceorders de table -m 1 - nom de classe serviceorders - cible-dir / usr / BiAdmin / serviceorders -import - bindir .Entrer mot de passe: ... 13/08/25 14:43:56 INFO mapreduce.ImportJobBase: Transféré 356 octets dans 21.0736 secondes (16.8932 octets / sec) 13/08/25 14:43:56 INFO mapreduce.ImportJobBase: Récupérée 4 enregistrements.

» » » » Importation de données dans HDFS avec Sqoop