4.3 MySQL und Sqoop verstehen

Was ist MySQL?

  • MySQL ist eine oft eingesetzte, kostenlose und offene relationale Datenbank.
  • MySQL-Datenbanken sind monolithisch, d. h. es wird oft nur auf einem Server installiert und ist nicht auf mehreren Servern verteilt.
  • MySQL kann für OLTP (Echtzeit-Transaktions-Verarbeitung bzw. Online-Transaction-Processing) verwendet werden.

Es kann sein, dass wir Daten in einer MySQL-Datenbank haben, welche wir gerne in Hadoop importieren möchten, um dort beispielsweise komplexere Abfragen als mit SQL machen zu können. Dazu haben wir das Tool „Sqoop“. 

Wie funktioniert „Sqoop“?

Ablauf des Datenimports von einer Datenbank zu Hadoop, genauer gesagt in das Dateisystem HDFS
  • Sqoop startet MapReduce-Jobs zum Importieren und Exportieren von Daten.
  • Die Art der Datenbank ist für Sqoop egal, es gibt für nahezu alle populären Datenbanken entsprechende Treiber, z. B. Postgres, Oracle oder MySQL.
  • Die zu importierenden Daten werden an einen sog. „Mapper“ gesendet, welcher die Daten einfach verschiebt. Das läuft zwar über einen Reduce-Vorgang, jedoch findet nicht wirklich die Änderung des Datensatzes statt durch Reduce() statt.
  • Die Mapper sind mit HDFS verbunden und können die Daten in HDFS ablegen.
  • Von dort stehen dann die Daten im gesamten Hadoop-Cluster zur Verfügung.

Wann sollte ich Sqoop nicht verwenden?

Sqoop wurde für große Datensätze konzipiert. Bei kleinen Datensätzen braucht man Sqoop nicht einsetzen. Hier reicht beispielsweise Hive View oder Files View mit Zugriff per Weboberfläche aus bzw. kann man die Daten auch mittels Kommandozeile in HDFS einpflegen.

Wie verwende ich Sqoop?

Sqoop wird vorwiegend über die Kommandozeile verwendet. Nachfolgend dazu ein Beispielcode zum Import von Daten von MySQL nach HDFS:

sqoop import --connect jdbc:mysql://localhost/movielens --driver com.mysql.jdbc.Driver --table movies -m 1

Mehr Code wird nicht benötigt. Wir spezifizieren hier den verwendeten Treiber zur Datenbank, welche Tabelle verschoben werden soll und wo die MySQL-Datenbank liegt. Das „m“ kann als Parameter mitgegeben werden, um die Anzahl der Mapper festzulegen. 

Bei Sqoop ist es unter anderem auch möglich, Dateien direkt in Hive zu importieren. Nachfolgend dazu ein Beispielcode:

sqoop import --connect jdbc:mysql://localhost/movielens --driver com.mysql.jdbc.Driver --table movies -m 1 --hive-import

Außerdem lässt sich Sqoop zum Synchronisieren der MySQL-Datenbank und der Hivetabelle oder der HDFS-Daten verwenden.

Genauso kann Sqoop auch den Export von Daten aus HDFS in MySQL oder eine andere relationale Datenbank verwendet werden. Dazu sieht der Code folgendermaßen aus:

sqoop export --connect jdbc:mysql://localhost/movielens -m 1 --driver com.mysql.jdbc.Driver --table exported_movies --export-dir /apps/hive/warehouse/movies --input-fields-terminated-by \0001'

Hier werden ähnliche Werte wie beim Import definiert. Es kommen nun noch der Exportpfad sowie das Zeichen zum Trennen der Zeichen dazu. Es ist jedoch wichtig zu wissen, dass die Tabelle bereits in MySQL vorhanden ist, da Sqoop diese nicht anlegt.


Weiter geht es mit: 4.4 Mit Sqoop Daten importieren