paint-brush
Erstellen effektiver moderner Datenarchitekturen mit Iceberg, Tabular und MinIOvon@minio
7,617 Lesungen
7,617 Lesungen

Erstellen effektiver moderner Datenarchitekturen mit Iceberg, Tabular und MinIO

von MinIO7m2024/04/17
Read on Terminal Reader
Read this story w/o Javascript

Zu lang; Lesen

Moderne Data Lakes stellen einen zentralen Knotenpunkt für alle Ihre Datenanforderungen dar. Allerdings kann das Erstellen und Verwalten eines effektiven Data Lakes komplex sein.
featured image - Erstellen effektiver moderner Datenarchitekturen mit Iceberg, Tabular und MinIO
MinIO HackerNoon profile picture
0-item
1-item


Die moderne Datenlandschaft erfordert eine neue Art von Infrastruktur – eine, die strukturierte und unstrukturierte Daten nahtlos integriert, mühelos skaliert und effiziente KI/ML-Workloads ermöglicht. Hier moderne Data Lakes Hier kommt ein zentraler Hub für alle Ihre Datenanforderungen ins Spiel. Allerdings kann der Aufbau und die Verwaltung eines effektiven Datensees komplex sein.


In diesem Blogbeitrag werden drei leistungsstarke Tools ausführlich beschrieben, mit denen Sie Ihren aktuellen Ansatz optimieren können: Apache-Eisberg , Tabellarisch, und MinIO. Die folgenden Schritte zeigen Ihnen, wie diese Dienste nahtlos kombiniert werden, um eine robuste, Cloud-native Data Lake-Architektur zu erstellen, die speziell für KI/ML-Workloads optimiert ist.

Was ist tabellarisch?

Tabular ist eine Datenplattform, die von den ursprünglichen Entwicklern von Apache Iceberg entwickelt wurde. Sie wurde entwickelt, um eine unabhängige, universelle Speicherplattform bereitzustellen, die sich mit jeder Computerschicht verbinden lässt und so die Abhängigkeit von einem Datenanbieter eliminiert. Diese Funktion ist für den modernen Datenstapel von entscheidender Bedeutung. Sie ermöglicht es Benutzern, erstklassige Computer- und Speichertools auszuwählen, ohne auf den veralteten und/oder nicht passenden Toolsatz eines bestimmten Anbieters angewiesen zu sein.


In einem (n die Architektur von MinIO und Iceberg und kann durch Tabular erweitert werden. Tabular kann zum Verwalten und Abfragen von in MinIO gespeicherten Iceberg-Daten verwendet werden, wodurch strukturierte Daten auf skalierbare, leistungsstarke und Cloud-native Weise gespeichert und verwaltet werden können. Diese nativen Kubernetes-Komponenten arbeiten reibungslos und ohne große Reibung zusammen und bauen auf den Fähigkeiten der anderen auf, um eine skalierbare Leistung zu erzielen.

Warum S3FileIO statt Hadoops File-IO?

Diese Implementierung nutzt Icebergs S3FileIO. S3FileIO wird aus mehreren Gründen als besser angesehen als Hadoops File-IO. Einige davon haben wir bereits besprochen. anderswo :


  1. Optimiert für Cloud-Speicher : S3FileIO von Iceberg ist für die Verwendung mit Cloud-nativem Speicher konzipiert.


  2. Verbesserter Durchsatz und minimierte Drosselung: Iceberg verwendet eine ObjectStoreLocationProvider um Dateien auf mehrere Präfixe in einem MinIO-Bucket zu verteilen. Dies trägt dazu bei, die Drosselung zu minimieren und den Durchsatz für S3-bezogene IO-Operationen zu maximieren.


  3. Strikte Konsistenz: Iceberg wurde Aktualisiert um die strikte Konsistenz voll auszunutzen, indem redundante Konsistenzprüfungen, die die Leistung beeinträchtigen könnten, eliminiert werden.


  4. Progressiver Multipart Upload: Icebergs S3FileIO implementiert einen progressiver mehrteiliger Upload Algorithmus, der Datendateiteile parallel hochlädt, sobald jeder Teil fertig ist. Dadurch wird die lokale Festplattennutzung reduziert und die Upload-Geschwindigkeit erhöht.


  5. Prüfsummenüberprüfung: Iceberg ermöglicht Prüfsummenvalidierungen für S3-API-Schreibvorgänge, um die Integrität hochgeladener Objekte sicherzustellen, was durch Festlegen der entsprechenden Katalogeigenschaft aktiviert werden kann.


  6. Benutzerdefinierte Tags: Iceberg unterstützt das Hinzufügen benutzerdefinierte Tags auf Objekte während Schreib- und Löschvorgängen mit der S3-API, was für die Kostenverfolgung und -verwaltung nützlich sein kann.


  7. Vermeidung von negativem Caching: Die FileIO-Schnittstelle in Iceberg erfordert keine so strengen Garantien wie ein Hadoop-kompatibles Dateisystem, was es ermöglicht, Vermeiden Sie negatives Caching die sonst die Leistung beeinträchtigen könnten.


Im Gegensatz dazu bietet das S3A-Dateisystem von Hadoop, das vor S3FileIO verwendet wurde, nicht das gleiche Maß an Optimierung für Cloud-Speicher. All dies, um zu sagen: Belasten Sie Ihre zukunftsorientierte Data-Lake-Infrastruktur nicht mit den Fallen der Vergangenheit.

Voraussetzungen

Stellen Sie zunächst sicher, dass Ihr System die folgenden Anforderungen erfüllt:

Wenn Sie von Grund auf neu beginnen, können Sie beides mit dem Docker-Desktop Installationsprogramm für Ihre spezifische Plattform. Dies ist oft einfacher, als Docker und Docker Compose separat herunterzuladen. Überprüfen Sie, ob Docker installiert ist, indem Sie den folgenden Befehl ausführen:


 docker-compose --version


Erste Schritte

Um zu beginnen, klonen oder kopieren Sie die YAML-Datei in Tabular's Git-Repository . Sie benötigen für dieses Tutorial nur das YAML. Den Rest des Repository können Sie zu einem späteren Zeitpunkt erkunden.


Brechen sie ab

Die bereitgestellte YAML-Datei ist eine Docker Compose-Konfigurationsdatei. Sie definiert eine Reihe von Diensten und deren Konfigurationen für eine Docker-Anwendung mit mehreren Containern. In diesem Fall gibt es zwei Dienste: Spark-Iceberg und MinIO. Lassen Sie uns jeden Abschnitt aufschlüsseln:


1. Spark-Iceberg-Dienst:


 spark-iceberg: image: tabulario/spark-iceberg container_name: spark-iceberg build: spark/ networks: iceberg_net: depends_on: - rest - minio volumes: - ./warehouse:/home/iceberg/warehouse - ./notebooks:/home/iceberg/notebooks/notebooks environment: - AWS_ACCESS_KEY_ID=admin - AWS_SECRET_ACCESS_KEY=password - AWS_REGION=us-east-1 ports: - 8888:8888 - 8080:8080 - 10000:10000 - 10001:10001 rest: image: tabulario/iceberg-rest container_name: iceberg-rest networks: iceberg_net: ports: - 8181:8181 environment: - AWS_ACCESS_KEY_ID=admin - AWS_SECRET_ACCESS_KEY=password - AWS_REGION=us-east-1 - CATALOG_WAREHOUSE=s3://warehouse/ - CATALOG_IO__IMPL=org.apache.iceberg.aws.s3.S3FileIO - CATALOG_S3_ENDPOINT=http://minio:9000



image: Gibt das für den Spark-Iceberg-Dienst zu verwendende Docker-Image an. In diesem Fall wird das Image tabulario/spark-iceberg:latest verwendet.

depends_on: Gibt an, dass der Spark-Iceberg-Dienst von den Rest- und Minio-Diensten abhängig ist.

container_name: Weist dem Container einen bestimmten Namen (Spark-Iceberg) zu.

Umgebung: Legt Umgebungsvariablen für den Container fest, einschließlich Spark- und AWS-Anmeldeinformationen.

Volumes: Mountet lokale Verzeichnisse (./warehouse und ./notebooks) als Volumes innerhalb des Containers.

Ports: Ordnet Container-Ports Host-Ports zu, um auf die Spark-Benutzeroberfläche und andere Dienste zuzugreifen.


2. Minio-Dienst:


 minio: image: minio/minio container_name: minio environment: - MINIO_ROOT_USER=admin - MINIO_ROOT_PASSWORD=password - MINIO_DOMAIN=minio networks: iceberg_net: aliases: - warehouse.minio ports: - 9001:9001 - 9000:9000 command: ["server", "/data", "--console-address", ":9001"]


image: Gibt das Docker-Image für den MinIO-Dienst an.

container_name: Weist dem Container einen bestimmten Namen (MinIO) zu.

Umgebung: Legt Umgebungsvariablen zum Konfigurieren von MinIO fest, einschließlich der Anmeldeinformationen des Root-Benutzers.

Ports: Ordnet Container-Ports Host-Ports zu, um auf die MinIO-Benutzeroberfläche zuzugreifen.

Befehl: Gibt den Befehl zum Starten des MinIO-Servers mit bestimmten Parametern an.


Ein weiterer Aspekt des MinIO-Dienstes ist mc , das Befehlszeilentool von MinIO.


 mc: depends_on: - minio image: minio/mc container_name: mc networks: iceberg_net: environment: - AWS_ACCESS_KEY_ID=admin - AWS_SECRET_ACCESS_KEY=password - AWS_REGION=us-east-1 entrypoint: > /bin/sh -c " until (/usr/bin/mc config host add minio http://minio:9000 admin password) do echo '...waiting...' && sleep 1; done; /usr/bin/mc rm -r --force minio/warehouse; /usr/bin/mc mb minio/warehouse; /usr/bin/mc policy set public minio/warehouse; tail -f /dev/null "


depends_on: Gibt an, dass der MC-Dienst vom MinIO-Dienst abhängig ist.

image: Gibt das Docker-Image für den MC-Dienst an.

container_name: Weist dem Container einen bestimmten Namen (mc) zu.

Umgebung: Legt Umgebungsvariablen zum Konfigurieren des MinIO-Clients fest.

Einstiegspunkt: Definiert den Einstiegspunktbefehl für den Container, einschließlich der Einrichtungsschritte für den MinIO-Client.


 /usr/bin/mc rm -r --force minio/warehouse; /usr/bin/mc mb minio/warehouse; /usr/bin/mc policy set public minio/warehouse; tail -f /dev/null "



Diese Befehlsfolge führt im Wesentlichen die folgenden Aufgaben aus:


  • Entfernt das vorhandene Warehouse-Verzeichnis und seinen Inhalt vom MinIO-Server.

  • Erstellt einen neuen Bucket mit dem Namen „Warehouse“.

  • Legt die Zugriffsrichtlinie des Warehouse-Buckets auf „öffentlich“ fest.


Diese Docker Compose-Datei orchestriert eine Multi-Container-Umgebung mit Diensten für Spark, PostgreSQL und MinIO. Sie richtet Abhängigkeiten, Umgebungsvariablen und Befehle ein, die zum gemeinsamen Ausführen der Dienste erforderlich sind. Die Dienste arbeiten zusammen, um eine Entwicklungsumgebung für die Datenverarbeitung mit Spark und Iceberg mit MinIO als Objektspeicher-Backend zu erstellen.

Inbetriebnahme

Wechseln Sie in einem Terminalfenster mit cd in das Verzeichnis tabular-spark-setup im Repository und führen Sie den folgenden Befehl aus:


 docker-compose up


Melden Sie sich bei MinIO unter http://127.0.0.1:9001 mit den Anmeldeinformationen admin:password an, um zu sehen, dass der Warehouse-Bucket erstellt wurde.



Sobald alle Container einsatzbereit sind, können Sie auf Ihren Jupyter Notebook-Server zugreifen, indem Sie zu http://localhost:8888 navigieren.



Führen Sie eines der Beispiel-Notebooks aus und kehren Sie zu MinIO unter http://127.0.0.1:9001 zurück, um Ihr mit Daten gefülltes Lager zu sehen.


Aufbau Ihres modernen Datalake

Dieses Tutorial zum Erstellen eines modernen Datalakes mit Iceberg, Tabular und MinIO ist nur der Anfang. Dieses leistungsstarke Trio öffnet Türen zu einer Welt voller Möglichkeiten. Mit diesen Tools können Sie alle Ihre strukturierten und unstrukturierten Daten nahtlos integrieren und analysieren, um verborgene Muster aufzudecken und datengesteuerte Entscheidungen zu treffen, die Innovationen vorantreiben. Nutzen Sie die Effizienz und Flexibilität dieser Architektur in der Produktion, um Ihre KI/ML-Initiativen zu beschleunigen und das wahre Potenzial Ihrer Modelle für maschinelles Lernen freizusetzen und so Ihren Weg zu bahnbrechenden Entdeckungen zu beschleunigen. Kontaktieren Sie uns unter [email protected] oder auf unserer Locker Kanal, wenn Sie während des Baus Fragen haben.