Apache Iceberg is een populaire keuze geworden voor het beheren van grote datasets met flexibiliteit en schaalbaarheid. Catalogi zijn essentieel voor de functionaliteit van Iceberg, wat van vitaal belang is voor de organisatie van tabellen, consistentie en metadatabeheer. Dit artikel zal verkennen wat Iceberg-catalogi zijn, hun verschillende implementaties, use cases en configuraties, en een begrip bieden van de best passende catalogusoplossingen voor verschillende use cases.
Wat Is een Iceberg-catalogus?
In Iceberg is een catalogus verantwoordelijk voor het beheren van tabel paden, die wijzen naar de huidige metagegevensbestanden die de status van een tabel vertegenwoordigen. Deze architectuur is essentieel omdat het atomaire transacties, consistentie en efficiënt queryen mogelijk maakt door ervoor te zorgen dat alle lezers en schrijvers toegang hebben tot dezelfde status van de tabel. Verschillende catalogusimplementaties slaan deze metagegevens op verschillende manieren op, van bestandssystemen tot gespecialiseerde metastoreservices.
Kernverantwoordelijkheden van een Iceberg-catalogus
De fundamentele verantwoordelijkheden van een Iceberg-catalogus zijn:
- Koppelen van Tabel Paden: Het koppelen van een tabel pad (bijv. “db.tabel”) aan het overeenkomstige metagegevensbestand.
- Ondersteuning van Atomaire Operaties: Het waarborgen van een consistente tabelstatus tijdens gelijktijdige lees- en schrijfoperaties.
- Metagegevensbeheer: Het opslaan en beheren van de metagegevens, waarbij toegankelijkheid en consistentie worden gegarandeerd.
Iceberg-catalogi bieden verschillende implementaties om tegemoet te komen aan diverse systeemarchitecturen en opslagvereisten. Laten we deze implementaties en hun geschiktheid voor verschillende omgevingen onderzoeken.

Type Iceberg-catalogi
1. Hadoop-catalogus
De Hadoop-catalogus is doorgaans het gemakkelijkst in te stellen, aangezien het alleen een bestandssysteem vereist. Deze catalogus beheert metadata door het meest recente metadata-bestand op te zoeken in de directory van een tabel op basis van bestandstimestamps. Echter, vanwege de afhankelijkheid van atomische operaties op bestandsniveau (waar sommige opslagsystemen zoals S3 geen ondersteuning voor bieden), is de Hadoop-catalogus mogelijk niet geschikt voor productieomgevingen waar gelijktijdige schrijfbewerkingen gebruikelijk zijn.
Configuratievoorbeeld
Om de Hadoop-catalogus te configureren met Apache Spark:
spark-sql --packages org.apache.iceberg:iceberg-spark-runtime-3.3_2.12:0.14.0 \
--conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \
--conf spark.sql.catalog.my_catalog=org.apache.iceberg.spark.SparkCatalog \
--conf spark.sql.catalog.my_catalog.type=hadoop \
--conf spark.sql.catalog.my_catalog.warehouse=file:///D:/sparksetup/iceberg/spark_warehouse
Een andere manier om de catalogus in de Spark-taak zelf in te stellen:
SparkConf sparkConf = new SparkConf()
.setAppName("Example Spark App")
.setMaster("local[*]")
.set("spark.sql.extensions","org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions")
.set("spark.sql.catalog.local","org.apache.iceberg.spark.SparkCatalog")
.set("spark.sql.catalog.local.type","hadoop")
.set("spark.sql.catalog.local.warehouse", "file:///D:/sparksetup/iceberg/spark_warehouse")
In het bovenstaande voorbeeld stellen we de catalogusnaam in op “local” zoals geconfigureerd in Spark “spark.sql.catalog.local“. Dit kan een keuze zijn van jouw naam.
Voordelen:
- Eenvoudige configuratie, geen externe metastore vereist.
- Ideaal voor ontwikkelings- en testomgevingen.
Nadelen:
- Beperkt tot enkele bestandssystemen (bijv. een enkele S3-bucket).
- Niet aanbevolen voor productie
2. Hive-catalogus
De Hive Catalog maakt gebruik van de Hive Metastore om de locatie van metadata te beheren, waardoor het compatibel is met tal van big data-tools. Deze catalogus wordt veel gebruikt voor productie vanwege de integratie met bestaande op Hive gebaseerde infrastructuur en compatibiliteit met meerdere query-engines.
Configuratievoorbeeld
Om de Hive-catalogus in Spark te gebruiken:
spark-sql --packages org.apache.iceberg:iceberg-spark-runtime-3.3_2.12:0.14.0 \
--conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \
--conf spark.sql.catalog.my_catalog=org.apache.iceberg.spark.SparkCatalog \
--conf spark.sql.catalog.my_catalog.type=hive \
--conf spark.sql.catalog.my_catalog.uri=thrift://<metastore-host>:<port>
Voordelen:
- Hoge compatibiliteit met bestaande big data-tools.
- Cloud-onafhankelijk en flexibel in on-premises en cloud-omgevingen.
Nadelen:
- Vereist het onderhouden van een Hive-metastore, wat operationele complexiteit kan toevoegen.
- Ontbreekt ondersteuning voor multi-table transacties, waardoor de atomiciteit van operaties over tabellen beperkt is
3. AWS Glue Catalog
De AWS Glue Catalog is een beheerde metadata-catalogus die door AWS wordt aangeboden, waardoor het ideaal is voor organisaties die sterk geïnvesteerd zijn in het AWS-ecosysteem. Het beheert Iceberg-tabelmetadata als tabelkenmerken binnen AWS Glue, wat naadloze integratie met andere AWS-diensten mogelijk maakt.
Configuratievoorbeeld
Om AWS Glue met Iceberg in Spark in te stellen:
spark-sql --packages org.apache.iceberg:iceberg-spark-runtime-x.x_x.xx:x.x.x,software.amazon.awssdk:bundle:x.xx.xxx \
--conf spark.sql.catalog.my_catalog=org.apache.iceberg.spark.SparkCatalog \
--conf spark.sql.catalog.my_catalog.catalog-impl=org.apache.iceberg.aws.glue.GlueCatalog \
--conf spark.sql.catalog.my_catalog.io-impl=org.apache.iceberg.aws.s3.S3FileIO \
--conf spark.hadoop.fs.s3a.access.key=$AWS_ACCESS_KEY \
--conf spark.hadoop.fs.s3a.secret.key=$AWS_SECRET_ACCESS_KEY
Voordelen:
- Beheerde service, waardoor de infrastructuur- en onderhoudskosten verlaagd worden.
- Sterke integratie met AWS-diensten.
Nadelen:
- AWS-specifiek, wat de cross-cloud flexibiliteit beperkt.
- Geen ondersteuning voor multi-table transacties
4. Project Nessie Catalog
Project Nessie biedt een “data as code” benadering, waardoor dataversiebeheer mogelijk is. Met zijn Git-achtige vertakkings- en tagmogelijkheden stelt Nessie gebruikers in staat om datavertakkingen te beheren op een manier die vergelijkbaar is met broncode. Het biedt een robuust kader voor transacties met meerdere tabellen en meerdere statements.
Configuratievoorbeeld
Om Nessie te configureren als catalogus:
spark-sql --packages "org.apache.iceberg:iceberg-spark-runtime-x.x_x.xx:x.x.x" \
--conf spark.sql.catalog.my_catalog=org.apache.iceberg.spark.SparkCatalog \
--conf spark.sql.catalog.my_catalog.catalog-impl=org.apache.iceberg.nessie.NessieCatalog \
--conf spark.sql.catalog.my_catalog.uri=http://<host>:<port>
Voordelen:
- Biedt functionaliteiten voor “data as code” met versiebeheer.
- Ondersteunt transacties met meerdere tabellen.
Nadelen:
- Vereist zelfhosting, wat de infrastructuur complexer maakt.
- Beperkte toolondersteuning in vergelijking met Hive of AWS Glue
5. JDBC-catalogus
De JDBC-catalogus stelt u in staat om metagegevens op te slaan in een willekeurige JDBC-compatibele database, zoals PostgreSQL of MySQL. Deze catalogus is cloud-agnostisch en zorgt voor hoge beschikbaarheid door betrouwbare RDBMS-systemen te gebruiken.
Configuratievoorbeeld
spark-sql --packages org.apache.iceberg:iceberg-spark-runtime-x.x_x.xx:x.x.x \
--conf spark.sql.catalog.my_catalog=org.apache.iceberg.spark.SparkCatalog \
--conf spark.sql.catalog.my_catalog.catalog-impl=org.apache.iceberg.jdbc.JdbcCatalog \
--conf spark.sql.catalog.my_catalog.uri=jdbc:<protocol>://<host>:<port>/<database> \
--conf spark.sql.catalog.my_catalog.jdbc.user=<username> \
--conf spark.sql.catalog.my_catalog.jdbc.password=<password>
Voordelen:
- Gemakkelijk op te zetten met bestaande RDBMS-infrastructuur.
- Hoge beschikbaarheid en cloud-agnostisch.
Nadelen:
- Geen ondersteuning voor transacties met meerdere tabellen.
- Verhoogt de afhankelijkheden van JDBC-stuurprogramma’s voor alle toegangstools
6. Snowflake Catalog
Snowflake biedt robuuste ondersteuning voor Apache Iceberg-tabellen, waardoor gebruikers het platform van Snowflake kunnen benutten als de Iceberg-catalogus. Deze integratie combineert de prestaties en query-semantiek van Snowflake met de flexibiliteit van het open tabelformaat van Iceberg, wat efficiënt beheer van grote datasets in externe cloudopslag mogelijk maakt. Raadpleeg de Snowflake-documentatie voor verdere configuratie op de link
Voordelen:
- Naadloze Integratie: Combineert de prestaties en querymogelijkheden van Snowflake met het open tabelformaat van Iceberg, wat efficiënt databeheer vergemakkelijkt.
- Volledige Platformsupport: Biedt uitgebreide lees- en schrijftoegang, samen met functies zoals ACID-transacties, schema-evolutie en tijdreizen.
- Vereenvoudigd Onderhoud: Snowflake behandelt levenscyclustaken zoals compactie en het verminderen van operationele overhead.
Minpunten:
- Beperkingen van Cloud en Regio: Het externe volume moet zich in dezelfde cloudprovider en regio bevinden als het Snowflake-account, wat cross-cloud of cross-regio configuraties beperkt.
- Beperking van Gegevensformaat: Ondersteunt alleen het Apache Parquet-bestandsformaat, wat mogelijk niet overeenkomt met alle voorkeuren voor gegevensformaten binnen de organisatie.
- Beperkingen voor externe klanten: Voorkomt dat externe klanten gegevens kunnen wijzigen in door Snowflake beheerde Iceberg-tabellen, wat mogelijk van invloed is op workflows die afhankelijk zijn van externe tools.
7. REST-gebaseerde catalogi
Iceberg ondersteunt REST-gebaseerde catalogi om verschillende uitdagingen aan te pakken die gepaard gaan met traditionele catalogusimplementaties.
Uitdagingen met traditionele catalogi
- Complexiteit aan de clientzijde: Traditionele catalogi vereisen vaak configuraties en afhankelijkheden aan de clientzijde voor elke programmeertaal (Java, Python, Rust, Go), wat leidt tot inconsistenties tussen verschillende programmeertalen en verwerkingsengines. Lees er meer over hier.
- Beperkingen in schaalbaarheid: Het beheren van metadata en tabelbewerkingen op clientniveau kan knelpunten introduceren, wat de prestaties en schaalbaarheid in grootschalige dataomgevingen kan beïnvloeden.
Voordelen van het aannemen van de REST-catalogus
- Vereenvoudigde integratie aan de clientzijde: Klanten kunnen communiceren met de REST-catalogus via standaard HTTP-protocollen, waardoor complexe configuraties of afhankelijkheden overbodig worden.
- Schaalbaarheid: De server-side architectuur van de REST-catalogus maakt schaalbaar beheer van metadata mogelijk, waardoor groeiende datasets en gelijktijdige toegangspatronen worden ondersteund.
- Flexibiliteit: Organisaties kunnen op de serverzijde aangepaste cataloguslogica implementeren, waardoor de REST-catalogus kan worden afgestemd op specifieke vereisten zonder de clienttoepassingen te wijzigen.
Er zijn verschillende implementaties van de REST-catalogus ontstaan, die elk inspelen op specifieke organisatorische behoeften:
- Gravitino: Een open-source Iceberg REST-catalogusservice die integratie met Spark en andere verwerkingsmachines mogelijk maakt, met een eenvoudige opzet voor het beheren van Iceberg-tabellen.
- Tabular: Een beheerde service die een REST-catalogusinterface biedt, waardoor organisaties de mogelijkheden van Iceberg kunnen benutten zonder de overhead van het beheren van catalogusinfrastructuur. Lees meer op Tabular.
- Apache Polaris: Een open-source, volledig uitgeruste catalogus voor Apache Iceberg, die de REST API implementeert om naadloze multi-engine interoperabiliteit over platforms zoals Apache Doris, Apache Flink, Apache Spark, StarRocks en Trino te waarborgen. Lees meer op GitHub.
Een van mijn favoriete en eenvoudige manieren om de REST-catalogus met Iceberg-tabellen uit te proberen, is het gebruik van een eenvoudige Java REST-implementatie. Controleer de GitHub-link hier.
Conclusie
Het selecteren van de juiste Apache Iceberg-catalogus is cruciaal voor het optimaliseren van uw gegevensbeheerstrategie. Hier is een beknopt overzicht om u te begeleiden bij uw beslissing:
- Hadoop-catalogus: Het meest geschikt voor ontwikkelings- en testomgevingen vanwege de eenvoud. Echter, consistentieproblemen kunnen zich voordoen in productiescenario’s met gelijktijdige schrijfoperaties.
- Hive Metastore-catalogus: Ideaal voor organisaties met bestaande Hive-infrastructuur. Het biedt compatibiliteit met een breed scala aan big data-tools en ondersteunt complexe gegevensbewerkingen. Het onderhouden van een Hive Metastore-service kan echter operationele complexiteit toevoegen.
- AWS Glue-catalogus: Optimaal voor degenen die sterk geïnvesteerd zijn in het AWS-ecosysteem. Het biedt naadloze integratie met AWS-services en vermindert de noodzaak voor zelfbeheerde metadataservices. Het is echter AWS-specifiek, wat de flexibiliteit tussen clouds kan beperken.
- JDBC-catalogus: Geschikt voor omgevingen die de voorkeur geven aan relationele databases voor metadatagegevens, waardoor het gebruik van elke JDBC-compatibele database mogelijk is. Dit biedt flexibiliteit en maakt gebruik van bestaande RDBMS-infrastructuur, maar kan extra afhankelijkheden introduceren en zorgvuldig beheer van databaseverbindingen vereisen.
- REST-catalogus: Ideaal voor scenario’s die een gestandaardiseerde API voor catalogusoperaties vereisen, waardoor de interoperabiliteit tussen verschillende verwerkingsengines en talen wordt verbeterd. Het ontkoppelt catalogusimplementatiedetails van klanten, maar vereist het opzetten van een REST-service om catalogusoperaties af te handelen, wat de initiële installatiecomplexiteit kan verhogen.
- Project Nessie Catalog: Dit is perfect voor organisaties die versiebeheer over hun gegevens nodig hebben, vergelijkbaar met Git. Het ondersteunt branching, tagging en multi-table transacties. Het biedt robuuste gegevensbeheer mogelijkheden, maar vereist het implementeren en beheren van de Nessie-service, wat operationele overhead kan met zich meebrengen.
Door deze catalogusopties en hun configuraties te begrijpen, kun je weloverwogen keuzes maken en je datameer of lakehouse-configuratie optimaliseren om te voldoen aan de specifieke behoeften van jouw organisatie.
Source:
https://dzone.com/articles/iceberg-catalogs-a-guide-for-data-engineers