Iceberg REST Catalog Service
Overview
The Apache Gravitino Iceberg REST server implements the Apache Iceberg REST API specification.
Access the Iceberg REST endpoint at http://$ip:$port/iceberg/.
The Iceberg REST server and the main Gravitino server expose different interfaces and manage different table types:
| Item | Gravitino Iceberg REST server | Gravitino server |
|---|---|---|
| Interfaces | Iceberg REST API spec | Gravitino unified interfaces |
| Managed table type | Iceberg table only | JDBC, Hive, Iceberg, Hudi, Paimon, etc |
Capabilities
The Iceberg REST server provides:
- Apache Iceberg 1.11 REST API support for most namespace, table, and view operations.
- Hierarchical namespaces.
- Hive, JDBC, and REST catalog backends.
- Credential vending for S3, GCS, OSS, and ADLS.
- S3, HDFS, OSS, GCS, ADLS, and custom storage support.
- Event listeners and audit logging.
- OAuth2 and HTTPS.
- Access control in auxiliary mode.
- Pluggable metrics storage.
- Table metadata and scan plan caches.
The following Iceberg REST API features are not implemented:
- Multi-table transactions.
- View registration.
Deployment
Deployment Modes
Choose one of these deployment modes:
| Mode | Package | Classpath | Access control |
|---|---|---|---|
| Standalone server | Gravitino Iceberg REST server package | libs | No |
| Standalone server | Gravitino server package | iceberg-rest-server/libs | No |
| Auxiliary service | Gravitino server package | iceberg-rest-server/libs | Yes |
Package Build
For instructions on building and installing the Gravitino server package, see Build Gravitino and Install Gravitino.
Build the standalone Iceberg REST server package:
./gradlew compileIcebergRESTServer -x test
Create the compressed package in the distribution directory:
./gradlew assembleIcebergRESTServer -x test
Package Layout
The standalone Iceberg REST server package has the following layout:
|── ...
└── distribution/gravitino-iceberg-rest-server
|── bin/
| └── gravitino-iceberg-rest-server.sh # Gravitino Iceberg REST server Launching scripts.
|── conf/ # All configurations for Gravitino Iceberg REST server.
| ├── gravitino-iceberg-rest-server.conf # Gravitino Iceberg REST server configuration.
| ├── gravitino-env.sh # Environment variables, etc., JAVA_HOME, GRAVITINO_HOME, and more.
| └── log4j2.properties # log4j configuration for the Gravitino Iceberg REST server.
| └── hdfs-site.xml & core-site.xml # HDFS configuration files.
|── libs/ # Gravitino Iceberg REST server dependencies libraries.
|── logs/ # Gravitino Iceberg REST server logs. Automatically created after the server starts.
Configuration
Standalone and auxiliary deployments use different configuration files:
- Standalone server:
gravitino-iceberg-rest-server.conf. - Auxiliary service:
gravitino.conf.
Both files use the same Iceberg REST configuration items.
The gravitino.auxService.iceberg-rest. prefix has been deprecated since 0.6.0-incubating.
If both gravitino.auxService.iceberg-rest.key and gravitino.iceberg-rest.key are present, gravitino.iceberg-rest.key takes precedence.
The following sections use the gravitino.iceberg-rest. prefix.
The server-level gravitino.fetchFile.blockUnsafeRemoteUri configuration controls whether remote files such as Kerberos keytabs may resolve to unsafe addresses. It defaults to true. Configure it in gravitino-iceberg-rest-server.conf for standalone mode or gravitino.conf for auxiliary mode.