>_ DevTrendspl

Język

Strona główna

Języki

Sekcje

Frontend Backend Mobilne DevOps AI / ML GameDev Blockchain Systemy wbudowane Bezpieczeństwo
Rust

Apache Iceberg na Rust bez ciężkiej Javy

Jeśli pracujesz z big data, prawdopodobnie spotkałeś się z Apache Iceberg. To w zasadzie standard budowania architektury Lakehouse na bazie plików Parquet lub ORC. Przez długi czas Java pozostawała głównym domem Iceberga. Prawie wszystkie oficjalne biblioteki i integracje ze Spark czy Trino były napisane dla JVM.

Jednak stack narzędzi do przetwarzania danych przesuwa się teraz w kierunku Rust. Projekty takie jak Apache DataFusion, Polars i inne potrzebują dostępu do tabel Iceberg bez uruchamiania ciężkiego środowiska Java czy bawienia się z JNI. W ten sposób powstało oficjalne repozytorium apache/iceberg-rust w ramach Apache Foundation.

Dlaczego przenieść do Rust

Natywna implementacja zapewnia wydajność i niskie zużycie pamięci. Gdy piszesz mikroserwis do przetwarzania strumieniowego, narzędzie lub niestandardowy Foreign Data Wrapper dla PostgreSQL, ciągnięcie za sobą JVM jest bolesne. JVM wymaga setek megabajtów pamięci przy starcie i okresowo zamraża się z powodu garbage collection.

Biblioteka Rust może bezpośrednio odczytywać metadane i dane Iceberg z lekkich plików binarnych. Projekt rozwija się w ramach samej Apache Foundation, więc to nie jest prywatny fork, ale oficjalny komponent infrastruktury.

Struktura repozytorium

Twórcy nie spakowali wszystkiego w masywny monolit. Projekt jest podzielony na zestaw niezależnych modułów. Bierzesz tylko te zależności, które są faktycznie potrzebne w Twoim serwisie.

Sercem biblioteki jest moduł iceberg. Obsługuje parsowanie metadanych, operacje na manifestach i operacje na schemacie tabel zgodnie ze specyfikacjami Iceberg v1 i v2.

Utworzono osobne crate'y do pracy z katalogami metadanych:

  • iceberg-catalog-rest dla operacji REST API
  • iceberg-catalog-glue dla integracji z AWS Glue Data Catalog
  • iceberg-catalog-hms do łączenia się z Hive Metastore
  • iceberg-catalog-sql do przechowywania metadanych w PostgreSQL lub SQLite
  • iceberg-catalog-s3tables do pracy z Amazon S3 Tables

Moduł iceberg-storage-opendal obsługuje fizyczne przechowywanie jak S3, GCS czy dysk lokalny. Korzysta z biblioteki Apache OpenDAL, która natychmiast otwiera dostęp do wszystkich popularnych object stores.

Jeśli potrzebujesz silnika wykonywania zapytań, przydaje się moduł iceberg-datafusion. Ten moduł wiąże Iceberg z silnikiem SQL Apache DataFusion, umożliwiając wykonywanie zapytań SQL wobec tabel bezpośrednio z Rust.

Gdzie to już działa

Prace deweloperskie są aktywne, ale poważne produkty już używają biblioteki w produkcji:

  • Databend używa jej w swojej chmurowej hurtowni danych.
  • RisingWave wykorzystuje bibliotekę do pracy z Iceberg z ich bazą danych czasu rzeczywistego.
  • Supabase używa komponentów Rust Iceberg w rozszerzeniach dla Postgres i w usługach streaming ETL.
  • Moonlink używa biblioteki do zadania replikacji danych CDC z Postgres do formatu Iceberg w ułamkach sekundy.
  • Apache DataFusion Comet używa jej do przyspieszania wydajności Spark.

Wsparcie i wersjonowanie

Zespół projektu stosuje politykę MSRV (minimalna wspierana wersja Rust). Kod jest budowany i testowany względem stabilnych wydań Rust. Minimalna wspierana wersja kompilatora jest ustalona z buforem około trzech miesięcy względem niedawnych wydań języka.

Prace deweloperskie są w pełni otwarte. Wszystkie dyskusje odbywają się na liście mailingowej [email protected] i w kanale #rust oficjalnej społeczności Apache Iceberg na Slacku.

Czy warto wypróbować

Jeśli budujesz serwisy wokół hurtowni danych, piszesz konektory w Rust lub rozwijasz własne narzędzia do przetwarzania danych, iceberg-rust wygląda na najbardziej logiczny wybór.

Biblioteka jest nadal dopracowywana pod kątem pokrycia całej specyfikacji Iceberg, ale podstawowe odczytywanie, zapisywanie i wsparcie dla kluczowych katalogów działają stabilnie. Dla projektów opartych na DataFusion to już gotowy do użycia blok konstrukcyjny.

Powiązane projekty