Este tópico descreve como acessar o DLF Iceberg REST Catalog usando a Java API open-source do Apache Iceberg, Spark e Flink. Gerencie metadados de tabelas e leia e grave tabelas Iceberg pelo protocolo padrão Iceberg REST com assinatura AWS SigV4. O plano de dados usa o S3FileIO padrão da comunidade para se conectar diretamente aos endpoints compatíveis com S3 do OSS.
Pré-requisitos
O ambiente de runtime deve usar JDK 17 ou superior (exigido pelo Iceberg 1.11.0).
Adicione as seguintes dependências da comunidade Apache Iceberg (versão 1.11.0) ao seu projeto Maven. Todas as dependências estão disponíveis no Maven Central:
<dependencies>
<dependency>
<groupId>org.apache.iceberg</groupId>
<artifactId>iceberg-core</artifactId>
<version>1.11.0</version>
</dependency>
<dependency>
<groupId>org.apache.iceberg</groupId>
<artifactId>iceberg-aws</artifactId>
<version>1.11.0</version>
</dependency>
<dependency>
<groupId>org.apache.iceberg</groupId>
<artifactId>iceberg-aws-bundle</artifactId>
<version>1.11.0</version>
</dependency>
</dependencies>
Para ler e gravar dados Parquet diretamente pela Java API (sem um mecanismo de computação), adicione também as dependências iceberg-data, iceberg-parquet, iceberg-orc, parquet-hadoop e hadoop-common.
Conecte-se usando a Java API
Use a classe padrão da comunidade RESTCatalog para se conectar ao DLF Iceberg REST Catalog. Passe os seguintes parâmetros de configuração durante a inicialização:
Map<String, String> props = new HashMap<>();
props.put("uri", "http://cn-hangzhou-vpc.dlf.aliyuncs.com/iceberg");
props.put("warehouse", "iceberg_table_test");
props.put("rest.auth.type", "sigv4");
props.put("rest.auth.sigv4.delegate-auth-type", "none");
props.put("rest.signing-region", "cn-hangzhou");
props.put("rest.signing-name", "DlfNext");
props.put("rest.access-key-id", "xxx");
props.put("rest.secret-access-key", "yyy");
props.put("io-impl", "org.apache.iceberg.aws.s3.S3FileIO");
RESTCatalog icebergCatalog = new RESTCatalog();
icebergCatalog.initialize(catalogName, props);
Parâmetros de configuração
|
Parâmetro |
Descrição |
Exemplo |
|
|
Endpoint do DLF Iceberg REST Catalog (acessível dentro da VPC). O formato é |
|
|
|
Nome do catálogo DLF. |
|
|
|
Tipo de autenticação. Defina como |
|
|
|
Tipo de autenticação delegada. Defina como |
|
|
|
ID da região da instância DLF. |
|
|
|
Nome do service de assinatura. Defina como |
|
|
|
AccessKey ID para acessar o DLF. |
|
|
|
AccessKey Secret para acessar o DLF. |
|
|
|
Classe de implementação de IO de arquivo. Usa o S3FileIO padrão da comunidade. Defina como |
|
Acesse com Apache Spark
O Apache Spark open-source lê e grava tabelas DLF Iceberg diretamente usando o runtime da comunidade Iceberg. O catálogo se comunica pelo protocolo padrão Iceberg REST com assinatura AWS SigV4, enquanto o plano de dados usa o S3FileIO da comunidade para se conectar aos endpoints compatíveis com S3 do OSS pela API compatível com S3. Todas as dependências são provenientes do Maven Central.
Inicie o Spark SQL
spark-sql \
--packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.11.0,org.apache.iceberg:iceberg-aws-bundle:1.11.0 \
--conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \
--conf spark.sql.catalog.dlf=org.apache.iceberg.spark.SparkCatalog \
--conf spark.sql.catalog.dlf.type=rest \
--conf spark.sql.catalog.dlf.uri=http://cn-hangzhou-vpc.dlf.aliyuncs.com/iceberg \
--conf spark.sql.catalog.dlf.warehouse=iceberg_table_test \
--conf spark.sql.catalog.dlf.rest.auth.type=sigv4 \
--conf spark.sql.catalog.dlf.rest.auth.sigv4.delegate-auth-type=none \
--conf spark.sql.catalog.dlf.rest.signing-region=cn-hangzhou \
--conf spark.sql.catalog.dlf.rest.signing-name=DlfNext \
--conf spark.sql.catalog.dlf.rest.access-key-id=xxx \
--conf spark.sql.catalog.dlf.rest.secret-access-key=yyy \
--conf spark.sql.catalog.dlf.io-impl=org.apache.iceberg.aws.s3.S3FileIO
Leia e grave com Spark SQL
Após configurar, use o Spark SQL padrão para ler e gravar tabelas Iceberg:
CREATE DATABASE IF NOT EXISTS dlf.demo_db;
CREATE TABLE dlf.demo_db.demo_tbl (id BIGINT, name STRING) USING iceberg;
INSERT INTO dlf.demo_db.demo_tbl VALUES (1, 'hello'), (2, 'world');
SELECT * FROM dlf.demo_db.demo_tbl;
Acesse com Apache Flink
O Apache Flink open-source usa o runtime da comunidade Iceberg para acessar tabelas DLF Iceberg. Coloque os arquivos iceberg-flink-runtime-1.20-1.11.0.jar e iceberg-aws-bundle-1.11.0.jar (ambos artefatos da comunidade disponíveis no Maven Central) no diretório lib/ da sua instalação do Flink e, em seguida, registre o catálogo no SQL Client.
Registre o catálogo
CREATE CATALOG dlf WITH (
'type' = 'iceberg',
'catalog-type' = 'rest',
'uri' = 'http://cn-hangzhou-vpc.dlf.aliyuncs.com/iceberg',
'warehouse' = 'iceberg_table_test',
'rest.auth.type' = 'sigv4',
'rest.auth.sigv4.delegate-auth-type' = 'none',
'rest.signing-region' = 'cn-hangzhou',
'rest.signing-name' = 'DlfNext',
'rest.access-key-id' = 'xxx',
'rest.secret-access-key' = 'yyy',
'io-impl' = 'org.apache.iceberg.aws.s3.S3FileIO'
);
Leia e grave com Flink SQL
USE CATALOG dlf;
CREATE DATABASE IF NOT EXISTS demo_db;
CREATE TABLE demo_db.demo_tbl (id BIGINT, name STRING);
INSERT INTO demo_db.demo_tbl VALUES (1, 'hello'), (2, 'world');
SELECT * FROM demo_db.demo_tbl;