Ein gängiges Muster, das viele Unternehmen zum Auffüllen eines Hadoop-basierten Data Lake verwenden, besteht darin, Daten aus bereits vorhandenen relationalen Datenbanken und Data Warehouses zu beziehen. Bei der Planung der Datenübernahme in den Data Lake ist eine der wichtigsten Überlegungen, wie eine Datenübernahme-Pipeline organisiert und der Zugriff auf die Daten ermöglicht werden soll. Hive und Impala bieten eine Dateninfrastruktur auf Hadoop - allgemein als SQL auf Hadoop bezeichnet -, die den Daten eine Struktur verleiht und die Möglichkeit bietet, die Daten mit einer SQL-ähnlichen Sprache abzufragen.
Bevor Sie damit beginnen, Daten in Hive-Datenbanken/-Schemata und -Tabellen einzupflegen, müssen Sie zwei wichtige Aspekte berücksichtigen:
- Welche Datenspeicherformate sind für die Speicherung von Daten zu verwenden? (HDFS unterstützt eine Reihe von Datenformaten für Dateien wie SequenceFile, RCFile, ORCFile, AVRO, Parquet und andere).
- Welches sind die optimalen Komprimierungsoptionen für im HDFS gespeicherte Dateien? (Beispiele sind gzip, LZO, Snappy und andere.)
Beim Entwurf der Hive-Datenbankschemata stehen Sie in der Regel vor folgenden Aufgaben:
- Erstellen Sie das Hive-Datenbankschema genauso wie das Schema der relationalen Datenbank. So können Sie Daten schnell und mit minimalem Aufwand für Mapping und Transformationen als Teil Ihrer Ingest-Datenflusspipelines in Hive einlesen.
- Erstellen Sie ein neues Datenbankschema, das sich vom Schema der relationalen Datenbank unterscheidet. Auf diese Weise können Sie das Hive-Datenbankschema neu entwerfen und einige der Unzulänglichkeiten Ihres aktuellen relationalen Datenbankschemas beseitigen. Dies erhöht auch den Aufwand für das Mapping und die Transformation von Daten als Teil Ihrer Ingest-Datenfluss-Pipelines.
In der Regel wird das Hive-Schema ähnlich wie das Schema einer relationalen Datenbank erstellt. Sobald das Hive-Schema, das Datenformat und die Komprimierungsoptionen eingerichtet sind, gibt es zusätzliche Designkonfigurationen für die Übertragung von Daten in den Data Lake über eine Dateneingabepipeline:
- Die Fähigkeit, die Metadaten einer relationalen Datenbank zu analysieren, wie z. B. Tabellen, Spalten für eine Tabelle, Datentypen für jede Spalte, Primär-/Fremdschlüssel, Indizes usw. Jede relationale Datenbank bietet einen Mechanismus zur Abfrage dieser Informationen. Diese Informationen ermöglichen die Entwicklung effizienter Datenfluss-Pipelines.
- Die verwendeten Datenformate haben in der Regel ein Schema, das mit ihnen verbunden ist. Wird beispielsweise AVRO verwendet, muss ein AVRO-Schema definiert werden. Eine wichtige Überlegung wäre die Möglichkeit, das Schema automatisch auf der Grundlage der Metadaten der relationalen Datenbank oder das AVRO-Schema für Hive-Tabellen auf der Grundlage des Tabellenschemas der relationalen Datenbank zu erstellen.
- Die Möglichkeit, automatisch Hive-Tabellen für die Tabellen der relationalen Quelldatenbank zu erstellen.
- Bei der Gestaltung Ihrer Ingest-Datenfluss-Pipelines sollten Sie Folgendes beachten:
- Die Fähigkeit, automatisch alle Mappings und Transformationen durchzuführen, die für die Übertragung von Daten aus der relationalen Quelldatenbank in die Hive-Zieltabellen erforderlich sind.
- Fähigkeit zur automatischen Freigabe von Daten, um große Datenmengen effizient zu bewegen.
- Die Möglichkeit, die Ausführung über mehrere Ausführungsknoten zu parallelisieren.
Bei den oben genannten Aufgaben handelt es sich um Data-Engineering-Muster, die bewährte Verfahren für den Umgang mit dem Volumen, der Vielfalt und der Geschwindigkeit dieser Daten enthalten.
In meinem nächsten Beitrag werde ich über einen praktischen Ansatz schreiben, wie Sie diese Muster mit der SnapLogic Big Data Integration Platform as a Service nutzen können, ohne Code schreiben zu müssen. In der Zwischenzeit können Sie hier mehr über Big Data Integration erfahren und sicher sein, dass Sie weitere Beiträge über Dateneingabe-Pipelines lesen werden.
Prasad Kona ist ein Big Data Enterprise Architect und Teil des Big Data Integrationsteams bei SnapLogic.