Apache Sqoop Tutorial: ArchiStruktur, Befehle & Beispiel

โšก Intelligente Zusammenfassung

Apache Sqoop verschiebt groรŸe Datenmengen zwischen relationalen Datenbanken und HDFS mithilfe einer Konnektorarchitektur und generiert MapReduce-Jobs, die Tabellen in Hive oder HBase importieren und die verarbeiteten Ergebnisse zurรผck in das Quellsystem exportieren.

  • ๐Ÿ”˜ Definition: Sqoop รผbertrรคgt groรŸe Datenmengen zwischen strukturierten Speichern und HDFS รผber eine Plugin-basierte Verbindungsschicht.
  • โ˜‘๏ธ ArchiStruktur: Jeder Job wird zu einem MapReduce-Programm kompiliert, das ausschlieรŸlich Map-Funktionen nutzt und dessen Tasks parallel separate Ausschnitte der Tabelle abrufen.
  • โœ… Anschlรผsse: Die gebรผndelten Treiber decken Folgendes ab MySQL, PostgreSQL, OracleSQL Server und DB2, plus ein generischer JDBC-Fallback.
  • ๐Ÿงช Befehle: Das Import-Tool importiert eine Tabelle in HDFS, Hive oder HBase; das Export-Tool speichert verarbeitete Dateien wieder in einer Tabelle.
  • ๏ธ Lademodi: Beim vollstรคndigen Laden wird die gesamte Tabelle kopiert, wรคhrend beim inkrementellen Laden (Anhรคngen und Letzte ร„nderung) nur neue Zeilen abgerufen werden.
  • โš ๏ธ Projektstatus: Sqoop zog sich im Juli 2021 in den Apache Attic zurรผck, Spark JDBC und NiFi unterstรผtzen jetzt neue Pipelines.

Apache Sqoop-Tutorial mit Informationen zu Architektur, Konnektoren sowie Import- und Exportbefehlen

Was ist SQOOP in Hadoop?

Apache Sqoop (SQL-to-Hadoop) ist ein Tool, das den Massenexport und -import von Daten unterstรผtzt. HDFS Es handelt sich um ein Datenmigrationstool, das auf einer Konnektorarchitektur basiert und Plugins unterstรผtzt, um die Anbindung an neue externe Systeme zu ermรถglichen. Es migriert Daten aus strukturierten Datenspeichern wie relationalen Datenbanken, Enterprise Data Warehouses und NoSQL-Systemen.

Ein Beispielanwendungsfall fรผr Hadoop Sqoop ist ein Unternehmen, das einen nรคchtlichen Sqoop-Import ausfรผhrt, um die Daten des Tages aus einem transaktionalen Produktions-RDBMS in ein zu laden Hive Data Warehouse zur weiteren Analyse.

Als nรคchstes lernen wir in diesem Apache Sqoop-Tutorial die Apache Sqoop-Architektur kennen.

Sqoop Architektur

Alle vorhandenen Datenbankmanagementsystem sind entworfen mit SQL Standard im Hinterkopf. Allerdings unterscheidet sich jedes DBMS in gewissem MaรŸe hinsichtlich des Dialekts. Dieser Unterschied stellt also eine Herausforderung dar, wenn es um die Datenรผbertragung zwischen den Systemen geht. Sqoop Connectors sind Komponenten, die dabei helfen, diese Herausforderungen zu meistern.

Die Datenรผbertragung zwischen Sqoop Hadoop und externem Speichersystem wird mithilfe der Konnektoren von Sqoop ermรถglicht.

Sqoop verfรผgt รผber Konnektoren fรผr die Arbeit mit einer Reihe beliebter relationaler Datenbanken, darunter MySQL, PostgreSQL, Oracle, SQL Server und DB2. Jeder dieser Konnektoren kann mit dem zugehรถrigen DBMS interagieren. Es gibt auch einen generischen JDBC-Konnektor fรผr die Verbindung mit jeder Datenbank, die JavaDas JDBC-Protokoll von Sqoop. Darรผber hinaus bietet Sqoop auch eine optimierte Lรถsung. MySQL und PostgreSQL Konnektoren, die datenbankspezifische APIs verwenden, um Massenรผbertragungen effizient durchzufรผhren.

Das untenstehende Diagramm platziert den Sqoop-Client zwischen dem externen Datenspeicher und dem Hadoop-Cluster, wobei sich die Verbindungsschicht auf der einen Seite und HDFS, Hive und HBase auf der anderen Seite befinden.

Sqoop-Architekturdiagramm, das die Verbindungsschicht zeigt, die ein RDBMS mit einem Hadoop-Cluster verbindet.

Unterhalb der Verbindungsschicht erzeugt Sqoop eine Java Klasse, die eine Zeile der Tabelle spiegelt und dann eine Map-only-Anfrage รผbermittelt MapReduce Jeder Mapping-Task liest seinen eigenen Ausschnitt des aufgeteilten Spaltenbereichs, sodass der Durchsatz mit der Anzahl der Mapper skaliert und nicht mit einem einzelnen JDBC-Cursor.

Darรผber hinaus verfรผgt Sqoop รผber verschiedene Drittanbieter-Konnektoren fรผr Datenspeicher, von Enterprise-Lรถsungen bis hin zu komplexen Systemen. Data Warehouse (einschlieรŸlich Netezza, Teradata und Oracle) an NoSQL-Stores (z. B. Couchbase). Allerdings sind diese Anschlรผsse nicht im Sqoop-Paket enthalten; Diese mรผssen separat heruntergeladen werden und kรถnnen problemlos zu einer vorhandenen Sqoop-Installation hinzugefรผgt werden.

Warum brauchen wir Sqoop?

Die analytische Verarbeitung mit Hadoop erfordert das Laden groรŸer Datenmengen aus unterschiedlichen Quellen in Hadoop-Cluster. Dieser Prozess des Ladens groรŸer Datenmengen aus heterogenen Quellen in Hadoop und der anschlieรŸenden Verarbeitung bringt eine Reihe von Herausforderungen mit sich. Die Aufrechterhaltung und Gewรคhrleistung der Datenkonsistenz und die Gewรคhrleistung einer effizienten Nutzung der Ressourcen sind einige Faktoren, die bei der Auswahl des richtigen Ansatzes zum Laden der Daten berรผcksichtigt werden mรผssen.

GroรŸe Probleme:

  1. Datenladen mithilfe von Skripten โ€” Der traditionelle Ansatz, Daten mithilfe von Skripten zu laden, ist fรผr das Laden groรŸer Datenmengen in Hadoop nicht geeignet; dieser Ansatz ist ineffizient und sehr zeitaufwรคndig.
  2. Direkter Zugriff auf externe Daten รผber eine MapReduce-Anwendung Der direkte Zugriff auf Daten in externen Systemen (ohne Laden in Hadoop) fรผr MapReduce-Anwendungen verkompliziert diese Anwendungen. Daher ist dieser Ansatz nicht praktikabel.

Hadoop kann nicht nur enorme Datenmengen verarbeiten, sondern auch Daten in verschiedenen Formaten. Um solche heterogenen Daten in Hadoop zu laden, wurden verschiedene Tools entwickelt. Sqoop und รœcretsiz TJ ve AG casinolarda bonus kodlarฤฑnฤฑ spin โ†’ sind zwei solcher Tools zum Laden von Daten.

Als nรคchstes lernen wir in diesem Sqoop-Tutorial mit Beispielen den Unterschied zwischen Sqoop, Flume und HDFS kennen.

Sqoop vs. Flume vs. HDFS in Hadoop

Sqoop รœcretsiz TJ ve AG casinolarda bonus kodlarฤฑnฤฑ spin โ†’ HDFS
Sqoop wird zum Importieren von Daten aus strukturierten Datenquellen wie RDBMS verwendet. Flume wird zum Verschieben groรŸer Streaming-Daten in HDFS verwendet. HDFS ist ein verteiltes Dateisystem, das vom Hadoop-ร–kosystem zum Speichern von Daten verwendet wird.
Sqoop verfรผgt รผber eine Connector-basierte Architektur. Connectoren wissen, wie sie sich mit der jeweiligen Datenquelle verbinden und die Daten abrufen. Flume hat eine agentenbasierte Architektur. Dabei wird ein Code geschrieben (der als โ€žAgentโ€œ bezeichnet wird), der sich um das Abrufen der Daten kรผmmert. HDFS verfรผgt รผber eine verteilte Architektur, bei der Daten auf mehrere Datenknoten verteilt werden.
HDFS ist ein Ziel fรผr den Datenimport mit Sqoop. Der Datenfluss zu HDFS erfolgt รผber null oder mehr Kanรคle. HDFS ist ein ultimatives Ziel fรผr die Datenspeicherung.
Das Laden von Sqoop-Daten ist nicht ereignisgesteuert. Das Laden von Flume-Daten kann durch ein Ereignis gesteuert werden. HDFS speichert lediglich Daten, die ihm auf welche Weise auch immer zur Verfรผgung gestellt werden.
Um Daten aus strukturierten Datenquellen zu importieren, mรผssen nur Sqoop-Befehle verwendet werden, da seine Konnektoren wissen, wie sie mit strukturierten Datenquellen interagieren und Daten von ihnen abrufen. Um Streaming-Daten wie auf Twitter generierte Tweets oder Logdateien eines Webservers zu laden, sollte Flume verwendet werden. Flume-Agenten sind zum Abrufen von Streaming-Daten konzipiert. HDFS verfรผgt รผber eigene, integrierte Shell-Befehle zum Speichern von Daten. HDFS kann keine Streaming-Daten importieren.

Hauptmerkmale von Sqoop

Der obige Vergleich verdeutlicht, wo Sqoop einzuordnen ist. Die unten aufgefรผhrten Funktionen entscheiden darรผber, ob es fรผr einen bestimmten Datenerfassungsauftrag geeignet ist.

  • Volle Ladung: Ein einzelner Befehl kopiert eine gesamte Tabelle, import-all-tables Kopiert alle Tabellen eines Schemas in einem einzigen Durchlauf.
  • Inkrementelle Last: append Modus tracks ist eine monoton steigende Spalte wie beispielsweise ein Ersatzschlรผssel, wรคhrend lastmodified Modus tracks ist eine Zeitstempelspalte, sodass nur neue oder geรคnderte Zeilen รผbertragen werden.
  • Parallelรผbertragung: Die Spalte โ€žSplitโ€œ teilt den Schlรผsselbereich auf mehrere Mapping-Aufgaben auf, und die Mapper-Anzahl legt fest, wie viele Aufgaben gleichzeitig ausgefรผhrt werden.
  • Import von Freiformabfragen: Das Ergebnis einer beliebigen SQL-Anweisung kann anstelle einer ganzen Tabelle importiert werden, wodurch Verknรผpfungen und Filter auf der Datenbankseite erhalten bleiben.
  • Direkte Beladung ins Lager: Ein Import kann ein Konto erstellen und fรผllen. Hive oder direkt in eine HBase-Tabelle schreiben, anstatt anzuhaltenping bei unformatierten HDFS-Dateien.
  • Komprimierung und Dateiformate: Die Ausgabe kann als durch Trennzeichen getrennter Text, SequenceFile, Avro oder Parquet geschrieben werden, optional mit Codec-Komprimierung.
  • Sicherheit: Sqoop integriert sich mit Kerberos, und die Anmeldeinformationen kรถnnen aus einer Passwortdatei gelesen oder zur Eingabe aufgefordert werden, anstatt sie in der Befehlszeile einzugeben.

Sqoop-Import- und Exportbefehle

Beide รœbertragungsrichtungen erfolgen รผber ein einziges Kommandozeilenprogramm. Das Import-Tool verschiebt Zeilen aus der Datenbank in Hadoop, und das Export-Tool verschiebt Dateien aus Hadoop zurรผck in eine Datenbanktabelle.

Ein typischer Import benennt die JDBC-Verbindung, die Quelltabelle, das Zielverzeichnis, die Split-Spalte und die Mapper-Anzahl:

sqoop import \
  --connect jdbc:mysql://localhost:3306/employees \
  --username hadoop \
  --password-file /user/hadoop/.mysql.password \
  --table employees \
  --target-dir /user/hadoop/warehouse/employees \
  --split-by emp_no \
  --num-mappers 4

Ein Export kehrt den Ablauf um. Er liest die bereits in einem HDFS-Verzeichnis vorhandenen, durch Trennzeichen getrennten Dateien und fรผgt sie in eine bestehende Tabelle ein, daher muss die Zieltabelle zuerst erstellt werden:

sqoop export \
  --connect jdbc:mysql://localhost:3306/employees \
  --username hadoop \
  --password-file /user/hadoop/.mysql.password \
  --table employee_summary \
  --export-dir /user/hadoop/warehouse/employee_summary \
  --input-fields-terminated-by ','

Ein nรคchtlicher Job benรถtigt die gesamte Tabelle selten zweimal. Ein inkrementeller Import speichert den hรถchsten bereits erfassten Wert und beginnt beim nรคchsten Durchlauf von dort aus.

sqoop import \
  --connect jdbc:mysql://localhost:3306/sales \
  --table orders \
  --incremental append \
  --check-column order_id \
  --last-value 15000 \
  --target-dir /user/hadoop/warehouse/orders

Dies sind die Argumente, die in fast jedem Job vorkommen:

Argument Was es steuert
--connect JDBC URL der Quell- oder Zieldatenbank.
--table Tabelle, aus der beim Import gelesen oder in die beim Export geschrieben wird.
--target-dir Das HDFS-Verzeichnis, das importiert werden soll, darf noch nicht existieren.
--export-dir HDFS-Verzeichnis, dessen Dateien von einem Export gelesen werden.
--split-by Spalte, deren Bereich รผber mehrere Kartenaufgaben aufgeteilt ist.
--num-mappers (-m) Anzahl der parallelen Map-Tasks. Der Standardwert ist vier.
--incremental Wรคhlt append or lastmodified รœbernehmen tracKรถnig.
--hive-import Erstellt die entsprechende Hive-Tabelle und lรคdt die importierten Daten hinein.

โš ๏ธ Achtung: Ein Exportvorgang ist keine einzelne Transaktion. Jeder Mapping-Task fรผhrt einen eigenen Batch aus, sodass ein Fehler wรคhrend des Vorgangs dazu fรผhren kann, dass ein Teil der Daten in der Zieltabelle verbleibt. Leiten Sie den Schreibvorgang รผber eine Staging-Tabelle, wenn der Ladevorgang vollstรคndig oder gar nicht erfolgen muss.

Sqoop-Projektstatus und moderne Alternativen

Bevor einer der oben genannten Befehle in einen Scheduler gelangt, ist ein Versionsdetail wichtig.

Die Sqoop-Entwickler beschlossen im Juni 2021, das Projekt einzustellen, und der Umzug zu Apache-Dachboden Fertiggestellt im Juli 2021. Die Website, Mailinglisten, das Git-Repository, das Problem tracDie .ker-Dateien und Downloads sind weiterhin verfรผgbar, jedoch nur lesbar. Weitere Versionen sind nicht geplant. Die letzte Produktionsversion ist Sqoop 1.4.7 aus dem Jahr 2017; die separate Sqoop-2-Reihe (1.99.x) erreichte nie den gleichen Funktionsumfang und wurde nie fรผr den Produktiveinsatz freigegeben.

Bestehende Sqoop-Jobs laufen weiterhin, und kommerzielle Hadoop-Distributionen liefern und unterstรผtzen das Tool weiterhin innerhalb ihrer eigenen Plattformen. Neue Datenerfassungsprozesse basieren jedoch in der Regel auf einer der folgenden Plattformen:

Alternative beste Passform
Spark mit der JDBC-Datenquelle Batch-Tabelle extracts, die sich bereits in einem befinden Spark Pipeline mit partitionierten Lesevorgรคngen anstelle von Mappern.
Apache NiFi Flussbasierte, visuell konfigurierte Weiterleitung zwischen vielen heterogenen Systemen.
Kafka Connect mit einem CDC-Connector Kontinuierliche Erfassung von ร„nderungsdaten anstelle eines nรคchtlichen Batch-Verarbeitungsfensters.
Managed ETL-Plattformen wie Talend Vorgefertigte Konnektoren, Terminplanung und Herkunftsnachverfolgung ohne manuell erstellte Auftrรคge.

Hรคufig gestellte Fragen

Sqoop 1 ist der einzige Kommandozeilen-Client, der in allen Tutorials verwendet wird. Sqoop 2 fรผgte einen Server, eine REST-API und eine Web-Oberflรคche hinzu, erreichte aber nie den gleichen Funktionsumfang und wurde nie fรผr den Produktiveinsatz freigegeben, weshalb die Version 1.4.x der Standard blieb.

Die Modelle analysieren Quelltabellen, um Typen, Schlรผssel und Split-Spalten abzuleiten, schlagen Partitionsgrenzen anhand der Zeilenverteilung vor und erkennen Schemaabweichungen, bevor ein Ladevorgang fehlschlรคgt. Sie schlagen auรŸerdem inkrementelle Prรผfspalten vor, indem sie monotones oder zeitstempelartiges Verhalten in Beispieldaten erkennen.

Copilot erstellt zwar schnell das Argumentgerรผst, vermischt dabei aber die Syntax von Sqoop 1 und Sqoop 2 und verwendet Parameter, die in keiner Version unterstรผtzt werden. รœberprรผfen Sie daher vor der Jobplanung alle Argumente anhand der Sqoop-Benutzeranleitung fรผr die installierte Version.

Sqoop kann die Trennspalte nicht selbststรคndig auswรคhlen, und der Import schlรคgt fehl. Entweder geben Sie explizit eine geeignete numerische oder Datumsspalte als Trennspalte an oder erzwingen Sie einen einzelnen Map-Task, der die รœbertragung serialisiert.

Ein in der Befehlszeile eingegebenes Passwort ist fรผr jeden sichtbar, der Prozesse auflistet. Speichern Sie es in einer HDFS-Datei, die nur vom Jobbesitzer gelesen werden kann, und verweisen Sie mit dem Argument โ€žpassword-fileโ€œ auf diese Datei oder verwenden Sie stattdessen die interaktive Eingabeaufforderung.

StandardmรครŸig wird Text mit Trennzeichen formatiert. SequenceFile, Avro und Parquet werden ebenfalls unterstรผtzt und jeweils รผber ein eigenes Argument ausgewรคhlt. Spaltenorientiertes Parquet eignet sich fรผr spรคtere analytische Abfragen, wรคhrend Text mit Trennzeichen am einfachsten zu untersuchen und zu exportieren ist.

Vier ist der Standardwert und ein guter Ausgangspunkt. Mehr Mapper bedeuten mehr gleichzeitige Verbindungen zur Datenbank, daher ist die praktische Obergrenze eher durch die Toleranz des Quellservers als durch die Kapazitรคt des Hadoop-Clusters bestimmt.

A Java Laufzeit, eine konfigurierte Hadoop Ein Client, der den Cluster erreichen kann, und die JDBC-Treiber-JAR-Datei fรผr die Zieldatenbank, die sich im Sqoop-Bibliotheksverzeichnis befindet, sind erforderlich. Fehlende Treiber-JAR-Dateien sind die hรคufigste Ursache fรผr Fehler beim ersten Start.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: