2016-08-30 1 views
0

mag ich "Import-all-tables" zu Sqoop von MySQL zu einer Hive Benutzerdefinierte Datenbank (nicht Hive Standard-Datenbank)Wie können wir alle Tabellen in RDBMS in eine benutzerdefinierte Hive-Datenbank importieren?

Schritte versucht:

  1. eine benutzerdefinierte Datenbank in hive erstellen unter „/ user /hive/warehouse/Custom.db "
  2. Alle Berechtigungen für dieses Verzeichnis zugewiesen, so dass es keine Probleme beim Schreiben in dieses Verzeichnis durch sqoop geben wird.
  3. unter Befehl mit der Option "--hive-Datenbank" Option auf CDH5.7 VM:

    sqoop import-all-tables 
    --connect "jdbc:mysql://quickstart.cloudera:3306/retail_db" 
    --username retail_dba 
    --password cloudera 
    --hive-database "/user/hive/warehouse/sqoop_import_retail.db" 
    

in hive default Datenbank nur erstellt Tabellen, nicht in der benutzerdefinierten DB in diesem Fall: „sqoop_import_retail.db

Else seinen Versuch Tabellen in den vorherigen HDFS Verzeichnisse erstellt (/user/cloudera/categories) und Fehler aus Angabe Tabelle bereits vorhanden ist:

16/08/30 00:07:14 WARN security.UserGroupInformation: PriviledgedActionException as:cloudera (auth:SIMPLE) cause:org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://quickstart.cloudera:8020/user/cloudera/categories already exists 
16/08/30 00:07:14 ERROR tool.ImportAllTablesTool: Encountered IOException running import job: org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://quickstart.cloudera:8020/user/cloudera/categories already exists 
[[email protected] etc]$ 

Wie wird dieses Problem behoben?
1. Erstellen von Tabellen im benutzerdefinierten Struktur-DB
2. Vorherige Verzeichnisreferenzen mit Sqoop löschen.

Antwort

0

Sie haben in Ihrem Befehl --hive-import nicht erwähnt. Also wird es in Ihrem Fall in HDFS unter /user/cloudera/ importiert.

Sie führen die Abfrage erneut aus. Deshalb Ausnahme beim Abrufen

Output directory hdfs://quickstart.cloudera:8020/user/cloudera/categories already exists 

Ändern Importbefehl:

sqoop import-all-tables --connect "jdbc:mysql://quickstart.cloudera:3306/retail_db" --username retail_dba --password cloudera --hive-database custom --hive-import

Es werden alle Tabellen aus retail_db von MySQL holen wird und entsprechende Tabelle zu custom Datenbank in hive erstellen.

+0

Vielen Dank für den Zeiger. So funktioniert es: –

+0

Ich habe immer noch den Fehler mit der Option --hive-import. Ich hatte eine Diskussion mit anderen Mitglied Durga und verstehen, wie sqoop Daten importiert. Es kopiert zunächst Daten in einen Staging-Bereich (in diesem Fall/user/cloudera) und verschiebt es anschließend in das Zielverzeichnis (hive-warehouse/hive-database). In den Fehlerfällen existieren die Tabellen aus irgendeinem Grund auf dem/user/cloudera und sie fungieren als Waisen für den nächsten Lauf - und machen dies zu einem vorzeitigen Versagen. Entfernen der Dateien aus dem Ort/Benutzer/cloudera und ausgeführt wurde .. –

+0

Refer @ Last comand 16/08/30 03:47:47 DEBUG hive.TableDefWriter: Create-Anweisung: CREATE TABLE IF EXISTS '/ Benutzer/Hive/warehouse/sqoop_import_retail.db'.categories' ('category_id' INT,' category_department_id' INT, 'category_name' STRING) KOMMENTAR 'Importiert von sqoop am 2016/08/30 03:47:47' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\ 001' LINES TERMINIERT VON '\ 012' GESPEICHERT ALS TEXTFILE 16/08/30 03:47:47 DEBUG hive.TableDefWriter: Ladeanweisung: LOAD DATA INPATH 'hdfs: //quickstart.clouda: 8020/user/cloudera/Kategorien 'INTO TABLE '/ user/hive/warehouse/sqoop_import_retail.db''categories' –

Verwandte Themen