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.
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.
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:
- 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.
- 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-tablesKopiert alle Tabellen eines Schemas in einem einzigen Durchlauf. - Inkrementelle Last:
appendModus tracks ist eine monoton steigende Spalte wie beispielsweise ein Ersatzschlรผssel, wรคhrendlastmodifiedModus 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. |

