Was ist SQOOP in Hadoop?
Apache SQOOP (SQL-to-Hadoop) ist ein Tool, das den Massenexport und -import von Daten aus strukturierten Datenspeichern wie relationalen Datenbanken, Enterprise Data Warehouses und NoSQL-Systemen in HDFS unterstützt. Es ist ein Datenmigrationstool, das auf einer Connector-Architektur basiert und Plugins unterstützt, um die Konnektivität zu neuen externen Systemen bereitzustellen.
Ein Beispiel für einen Anwendungsfall von Hadoop Sqoop ist ein Unternehmen, das einen nächtlichen Sqoop-Import ausführt, um die Tagesdaten aus einem produktionsbezogenen Transaktions-RDBMS zur weiteren Analyse in ein Hive-Data-Warehouse zu laden.
Als nächstes lernen wir in diesem Apache Sqoop-Tutorial die Apache Sqoop-Architektur kennen.
Sqoop Architektur
Alle vorhandenen Datenbankverwaltungssysteme wurden unter Berücksichtigung des SQL-Standards entwickelt. Jedes DBMS unterscheidet sich jedoch in Bezug auf den Dialekt in gewissem Maße. Dieser Unterschied stellt die Datenübertragung zwischen den Systemen vor Herausforderungen. Sqoop Connectors sind Komponenten, die zur Bewältigung dieser Herausforderungen beitragen.
Die Datenübertragung zwischen Sqoop Hadoop und einem externen Speichersystem wird mithilfe der Sqoop-Konnektoren ermöglicht.
Sqoop verfügt über Konnektoren für die Arbeit mit einer Reihe gängiger relationaler Datenbanken, darunter MySQL, PostgreSQL, Oracle, SQL Server und DB2. Jeder dieser Konnektoren weiß, wie er mit dem zugehörigen DBMS interagiert. Es gibt auch einen generischen JDBC-Connector für die Verbindung zu jeder Datenbank, die das JDBC-Protokoll von Java unterstützt. Darüber hinaus bietet Sqoop Big Data optimierte MySQL- und PostgreSQL-Konnektoren, die datenbankspezifische APIs verwenden, um Massenübertragungen effizient durchzuführen.
Darüber hinaus verfügt Sqoop in Big Data über verschiedene Konnektoren von Drittanbietern für Datenspeicher, die von Enterprise Data Warehouses (einschließlich Netezza, Teradata und Oracle) bis zu NoSQL-Speichern (wie Couchbase) reichen. Diese Anschlüsse werden jedoch nicht mit dem Sqoop-Bundle geliefert. 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 verschiedenen Quellen in Hadoop-Cluster. Dieser Prozess des Ladens von Massendaten aus heterogenen Quellen in Hadoop und der anschließenden Verarbeitung bringt eine Reihe von Herausforderungen mit sich. Die Aufrechterhaltung und Sicherstellung der Datenkonsistenz sowie die Sicherstellung einer effizienten Ressourcennutzung sind einige Faktoren, die berücksichtigt werden müssen, bevor der richtige Ansatz für das Laden von Daten ausgewählt wird.
Große Probleme:
1. Laden von Daten mithilfe von Skripten
Der herkömmliche Ansatz der Verwendung von Skripten zum Laden von Daten eignet sich nicht zum Laden von Massendaten in Hadoop. Dieser Ansatz ist ineffizient und sehr zeitaufwändig.
2. Direkter Zugriff auf externe Daten über die Map-Reduce-Anwendung
Das Bereitstellen eines direkten Zugriffs auf die Daten auf externen Systemen (ohne Laden in Hadoop) für Anwendungen mit Kartenreduzierung erschwert diese Anwendungen. Dieser Ansatz ist also nicht realisierbar.
3. Hadoop ist nicht nur in der Lage, mit enormen Daten zu arbeiten, sondern kann auch mit Daten in verschiedenen Formen arbeiten. Um solche heterogenen Daten in Hadoop zu laden, wurden verschiedene Tools entwickelt. Sqoop und Flume sind zwei solche 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 gegen Flume gegen HDFS in Hadoop
Sqoop | Gerinne | HDFS |
---|---|---|
Sqoop wird zum Importieren von Daten aus strukturierten Datenquellen wie RDBMS verwendet. | Flume wird zum Verschieben von Bulk-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. Konnektoren wissen, wie sie eine Verbindung zur jeweiligen Datenquelle herstellen und die Daten abrufen können. | Flume verfügt über eine agentenbasierte Architektur. Hier wird ein Code geschrieben (der als "Agent" bezeichnet wird), der sich um das Abrufen von Daten kümmert. | HDFS verfügt über eine verteilte Architektur, in der Daten auf mehrere Datenknoten verteilt werden. |
HDFS ist ein Ziel für den Datenimport mit Sqoop. | Daten fließen über null oder mehr Kanäle zu HDFS. | 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 nur Daten, die ihm auf irgendeine Weise zur Verfügung gestellt werden. |
Um Daten aus strukturierten Datenquellen zu importieren, müssen nur Sqoop-Befehle verwendet werden, da die Konnektoren wissen, wie sie mit strukturierten Datenquellen interagieren und Daten von diesen abrufen können. | Um Streaming-Daten wie auf Twitter generierte Tweets oder Protokolldateien eines Webservers zu laden, sollte Flume verwendet werden. Flume-Agenten dienen zum Abrufen von Streaming-Daten. | HDFS verfügt über eigene integrierte Shell-Befehle zum Speichern von Daten. HDFS kann keine Streaming-Daten importieren |