Importieren von Daten in HDFS mit Sqoop

Stellen Sie sich eine relationale Datenbank, die von einem fiktiven Dienstleistungsunternehmen verwendet, die genommen hat (Sie ahnen es) Apache Hadoop Service-Anrufe und will nun einige seiner Daten auf Hadoop zu bewegen, auf Hive Abfragen, Leverage HBase Skalierbarkeit und Leistung zu laufen, und führen Sie die Textanalyse seine Kunden Problembeschreibungen.

bild0.jpg

Sqoop ist das Werkzeug, das Sie verwenden möchten werden Daten aus relationalen Tabellen in HBase Tabellen auf Hadoop zu importieren.

In der folgenden Liste können Sie die MySQL-Befehle finden Sie im Service Order-Datenbank Sie in der Abbildung sehen, zu bauen. Installiert ist eine MySQL-RDBMS, die Sie aus und Export zur Verwendung von Sqoop importieren könnte.

/ * Erstellen der Serviceaufträge Datenbank * / DATABASE serviceorderdb-USE serviceorderdb STELLEN - / * Erstellen Sie die Produktinformationstabelle * / CREATE TABLE produktinformation (productnum CHAR (4) PRIMARY KEY, productdesc VARCHAR (100)) - / * Erstellen der Kundenkontakt Information Table * / CREATE TABLE customercontactinfo (customernum INT PRIMARY KEY, Kundenname VARCHAR (100), Kontaktinfo VARCHAR (100), productnums SET ( "A100", "A200", "A300", "B400", "B500", "C500 ',' C600 ',' D700 ')) - / * erstellen der Serviceaufträge Tabelle * / TABLE serviceorders CREATE (serviceordernum INT PRIMARY KEY, customernum INT, productnum CHAR (4), Status VARCHAR (100), FOREIGN KEY (customernum) LITERATUR customercontactinfo (customernum), FOREIGN KEY (productnum) LITERATUR produktinfo (productnum)) - / * Produktdaten in den Produktinformationstabelle * / INSERT INTO produktinformation VALUES ( 'A100', 'HBase Support Artikel') einfügen - INTO produktinformation VALUES INSERT ( 'A200', 'Hive Support Produkt') - INSERT INTO produktinformation VALUES ( 'A300', 'Sqoop Support Produkt') - INSERT INTO produktinformation VALUES ( 'B400', 'Ambari Support Produkt') - INSERT INTO produktinformation VALUES ( ' B500 ',' HDFS Support Produkt ') - INSERT INTO produktinformation VALUES (' C500 ',' Mahout Support Produkt ') - INSERT INTO produktinformation VALUES (' C600 ',' Der Zoowärter Support Produkt ') - INSERT INTO produktinformation VALUES (' D700 ' 'Pig Support Produkt "), - / * Legen Sie die Kundendaten in den Kontaktinformationen des Kunden Tabelle * / iN customercontactinfoVALUES INSERT (10000," John Timothy Smith', '1 Hadoop Lane, NY, 11111, John.Smith @ xyz.com' "B500") - IN customercontactinfoVALUES INSERT (10001, "Bill Jones ',' 2 HBase Ave, CA, 22222 ',' A100, A200, A300, B400, B500, C500, C600, D700 ') - INTO customercontactinfoVALUES INSERT ( 20000, 'Jane Ann Doe "," 1 Expert HBase Ave, CA, 22222', 'A100, A200, A300') - INSERT INTO customercontactinfoVALUES (20001, 'Joe Entwickler', '1 piglatin Ave, CO, 33333', ' D700 ') - INSERT INTO customercontactinfoVALUES (30000,' Data Scientist ',' 1 Statistik Lane, MA, 33333 ',' A300, C500 ') - / * Geben Sie Serviceaufträge in den Serviceaufträge Tabelle * / iN serviceordersVALUES INSERT (100000, 20000, "A200", "ich habe einige Fragen auf den Aufbau von HiveQL Abfragen? Mein Hadoop für Dummies-Buch ist noch nicht angekommen! ") - IN serviceordersVALUES INSERT (100001, 10001," A100 "," Ich muss verstehen, wie Zookeeper für meine HBase Cluster konfigurieren ') - INTO serviceordersVALUES INSERT (200000, 20001, "D700", "ich einige piglatin schreibe, und ich habe ein paar Fragen?") - IN serviceordersVALUES INSERT (200001, 30000, "A300", "Wie kann ich meine fusionieren Datensätze nach Sqoop inkrementelle Importe? ') -

Die folgende Auflistung bestätigt, dass der MySQL-Service Order-Datenbank zuvor die Befehle erstellt wurde unter Verwendung gezeigt, und zeigt Ihnen die Tabellennamen, die eine Verwendung Sqoop importieren wollen.

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

Nun, da Sie die MySQL-Service Order-Datenbank Datensätze gesehen haben, die nur darauf warten, zu genutzt werden, ist es Zeit, Ihre Aufmerksamkeit auf Hadoop zu drehen und den ersten Sqoop Befehl ausführen.

Ziehen Sie nicht die treuen Import Befehl direkt von der Fledermaus. Sqoop enthält mehrere praktische Funktionen zusammen mit Import und Export, einschließlich der Liste-Datenbanken Befehl, der in der folgenden Auflistung verwendet wird. Mit Hilfe dieses Befehls können Sie bestätigen, dass Sie haben Konnektivität und Sichtbarkeit in die MySQL-Datenbank.

$ Sqoop list-Datenbanken --connect jdbc: mysql: // localhost / - Benutzername root -PEnter Passwort: 13/08/15 17.21.00 INFO manager.MySQLManager: Vorbereiten einer MySQL-Streaming resultset.information_schemamysqlperformance_schema zu verwendenserviceorderdb

Das serviceorderdb verfügbar sein wird gezeigt, jetzt können Sie die Tabellen innerhalb serviceorderdb durch die Sqoop mit list-Tabellen Befehl. Beachten Sie, dass jetzt Sie hinzufügen die Datenbank, die Sie Sqoop wollen in der für den Zugriff auf jdbc: mysql URL:

$ Sqoop list-Tabellen - verbinden jdbc: mysql: // localhost /serviceorderdb --Benutzernamen root -PEnter Passwort: 13/08/15 17.22.01 INFO manager.MySQLManager: Vorbereiten eines MySQL-Streaming resultset.customercontactinfoproductinfoserviceorders zu verwenden

Sqoop hat jetzt Konnektivität und können die drei Tabellen aus der Figur zugreifen. Das bedeutet, dass Sie Ihre erste Sqoop ausführen kann Import Befehl und Ziel der serviceorders Tisch mit gutem Gewissen. Sqoop Import Befehle haben folgendes Format:

Sqoop Import (generische Argumente) (Import Argumente)

Mit den generischen Argumente verweisen Sie auf Ihre MySQL-Datenbank und die erforderlichen Informationen Login, genau wie bei der vorhergehenden tat list-Tabellen Werkzeug. In den Einfuhr Argumente, Sie (der Nutzer) haben die Möglichkeit, zu bestimmen, was Sie importieren möchten und wie Sie die Import ausgeführt werden sollen.

In der folgenden Auflistung geben Sie die serviceorders Tabelle und verlangen, dass eine Karte Aufgabe für die die Verwendung von Import verwendet werden -m 1 CLA. (Standardmäßig würde Sqoop vier Karten Aufgaben verwenden, aber das wäre für diesen kleinen Tisch und unsere virtuelle Maschine zu viel des Guten.)

Sie haben angegeben, auch die --Klassenname für den erzeugten Code und spezifiziert die --bindir wobei der kompilierte Code und .Glas Datei befinden sollte. (Ohne diese Argumente, Sqoop würde platzieren die generierten Java-Quelldatei in Ihrem aktuellen Arbeitsverzeichnis und die kompilierte .Klasse Datei und .jAR-Datei im / Tmp / sqoop-/kompilieren.)

Der Klassenname leitet sich einfach aus dem Tabellennamen, wenn Sie einen Namen mit Hilfe der angeben --Klassenname Kommandozeilenargument (CLA). Das --Zielverzeichnis in HDFS ist der Ort, an dem Sie die importierte Tabelle platziert werden soll.

$ Sqoop import - verbinden jdbc: mysql: // localhost / serviceorderdb - Benutzername root -P - Tabelle serviceorders -m 1 - Klassenname serviceorders - Zielverzeichnis / usr / BiAdmin / serviceorders -import - bindir .Enter Passwort: ... 13/08/25 14.43.56 INFO mapreduce.ImportJobBase: Übertragene 356 Bytes in 21,0736 Sekunden (16,8932 Byte / s) 13/08/25 14.43.56 INFO mapreduce.ImportJobBase: 4 Datensätze abgerufen werden.

Menü