O componente opcional do Iceberg permite gerenciar tabelas de data lakehouse com transações ACID e evolução de esquema em clusters do Serviço Gerenciado para Apache Spark. É possível instalar o Iceberg durante a criação do cluster usando o recurso Componentes opcionais para consultar e atualizar tabelas em cargas de trabalho do Spark e do Hive.
Principais recursos do Iceberg
Os recursos do Iceberg incluem:
- Evolução do esquema: adicione, remova ou renomeie colunas sem reescrever a tabela inteira.
- Viagem no tempo: consulte snapshots de tabelas históricas para fins de auditoria ou reversão.
- Particionamento oculto: otimize o layout de dados para consultas mais rápidas sem expor detalhes de partição aos usuários.
- Transações ACID: garantem a consistência dos dados e evitam conflitos.
Propriedades relacionadas ao Iceberg
Quando você cria um cluster do Serviço Gerenciado para Apache Spark com o Iceberg, as seguintes propriedades do Spark e do Hive são configuradas para funcionar com o Iceberg.
Versão de imagem 2.x
As seguintes propriedades do Spark e do Hive são configuradas nos clusters do Serviço Gerenciado para Apache Spark `2.x` quando o componente Iceberg é instalado:
| Arquivo de configuração | Propriedade | Valor padrão |
|---|---|---|
/etc/spark/conf/spark-defaults.conf |
spark.sql.extensions |
org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions |
spark.driver.extraClassPath |
/usr/lib/iceberg/lib/iceberg-spark-runtime-spark-version_scala-version.jar |
|
spark.executor.extraClassPath |
/usr/lib/iceberg/lib/iceberg-spark-runtime-spark-version_scala-version.jar |
|
/etc/hive/conf/hive-site.xml |
hive.aux.jars.path |
file:///usr/lib/iceberg/lib/iceberg-hive-runtime.jar |
iceberg.engine.hive.enabled |
true |
Versão de imagem 3.0
As seguintes propriedades do Spark e do Hive são configuradas nos clusters do Serviço Gerenciado para Apache Spark `3.0` quando o componente Iceberg é instalado:
| Arquivo de configuração | Propriedade | Valor padrão |
|---|---|---|
/etc/spark/conf/spark-defaults.conf |
spark.sql.extensions |
org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions |
spark.sql.catalog.default_iceberg |
org.apache.iceberg.spark.SparkCatalog |
|
spark.sql.catalog.default_iceberg.type |
rest |
|
spark.sql.catalog.default_iceberg.uri |
env:ICEBERG_REST_CATALOG_URI |
|
/etc/hive/conf/hive-site.xml |
iceberg.engine.hive.enabled |
true |
Instalar o componente opcional do Iceberg
É possível instalar o componente Iceberg em clusters do Serviço Gerenciado para Apache Spark criados com as versões de imagem 2.2.47 e posteriores. As páginas da lista de versões de imagem de cluster do Serviço Gerenciado para Apache Spark mostram a versão do componente Iceberg incluída nas versões mais recentes de imagem de cluster do Serviço Gerenciado para Apache Spark.
Console doGoogle Cloud
Para criar um cluster do Serviço Gerenciado para Apache Spark que instala o componente Iceberg, conclua as seguintes etapas no console do Google Cloud :
- Abra a página Criar cluster.
- Clique em Configuração adicional para abrir a seção.
- Edite os Componentes opcionais.
- No painel que será aberto, marque a caixa de seleção de Iceberg.
- Clique em Salvar.
CLI da gcloud
Para criar um cluster do Serviço Gerenciado para Apache Spark que instala o componente Iceberg, use o comando
gcloud dataproc clusters create
com a flag --optional-components.
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --optional-components=ICEBERG \ other flags ...
Substitua:
- CLUSTER_NAME: o novo nome do cluster.
- REGION: a região do cluster.
API REST
Para criar um cluster do Serviço Gerenciado para Apache Spark que instale o componente opcional do Iceberg,
especifique o Iceberg
SoftwareConfig.Component
como parte de uma solicitação
clusters.create.
Usar tabelas Iceberg com Spark e Hive
Depois de criar um cluster do Serviço Gerenciado para Apache Spark com o componente opcional do Iceberg instalado, é possível usar o Spark e o Hive para ler e gravar dados de tabelas do Iceberg.
Spark
Configurar uma sessão do Spark para o Iceberg
É possível usar o comando da CLI gcloud localmente ou os REPLs (Read-Eval-Print Loops) spark-shell ou pyspark em execução no nó mestre do cluster do Dataproc para ativar as extensões do Spark do Iceberg e configurar o catálogo do Spark para usar tabelas do Iceberg.
gcloud
Execute o seguinte exemplo da CLI gcloud em uma janela do terminal local ou no Cloud Shell para enviar um job do Spark e definir as propriedades do Spark para configurar a sessão do Spark para o Iceberg.
gcloud dataproc jobs submit spark \ --cluster=CLUSTER_NAME \ --region=REGION \ --properties="spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" \ --properties="spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog" \ --properties="spark.sql.catalog.CATALOG_NAME.type=hadoop" \ --properties="spark.sql.catalog.CATALOG_NAME.warehouse=gs://BUCKET/FOLDER" \ other flags ...
Substitua:
- CLUSTER_NAME: o nome do cluster.
- REGION: a região do Compute Engine.
- CATALOG_NAME: nome do catálogo do Iceberg.
- BUCKET e FOLDER: o local do catálogo do Iceberg no Cloud Storage.
spark-shell
Para configurar uma sessão do Spark para o Iceberg usando o REPL spark-shell no cluster do Serviço Gerenciado para Apache Spark, siga estas etapas:
Use o SSH para se conectar ao nó mestre do cluster do Serviço Gerenciado para Apache Spark.
Execute o comando a seguir no terminal da sessão SSH para configurar a sessão do Spark para o Iceberg.
spark-shell \
--conf "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" \
--conf "spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog" \
--conf "spark.sql.catalog.CATALOG_NAME.type=hadoop" \
--conf "spark.sql.catalog.CATALOG_NAME.warehouse=gs://BUCKET/FOLDER"
Substitua:
- CLUSTER_NAME: o nome do cluster.
- REGION: a região do Compute Engine.
- CATALOG_NAME: nome do catálogo do Iceberg.
- BUCKET e FOLDER: o local do catálogo do Iceberg no Cloud Storage.
shell do pyspark
Para configurar uma sessão do Spark para o Iceberg usando o REPL pyspark no cluster do Serviço Gerenciado para Apache Spark, siga estas etapas:
Use o SSH para se conectar ao nó mestre do cluster do Serviço Gerenciado para Apache Spark.
Execute o seguinte comando no terminal da sessão SSH para configurar a sessão do Spark para o Iceberg:
pyspark \
--conf "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" \
--conf "spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog" \
--conf "spark.sql.catalog.CATALOG_NAME.type=hadoop" \
--conf "spark.sql.catalog.CATALOG_NAME.warehouse=gs://BUCKET/FOLDER"
Substitua:
- CLUSTER_NAME: o nome do cluster.
- REGION: a região do Compute Engine.
- CATALOG_NAME: nome do catálogo do Iceberg.
- BUCKET e FOLDER: o local do catálogo do Iceberg no Cloud Storage.
Gravar dados em uma tabela do Iceberg
É possível gravar dados em uma tabela do Iceberg usando o Spark. Os snippets de código a seguir criam um
DataFrame
com dados de amostra, criam uma tabela do Iceberg no Cloud Storage
e gravam os dados na tabela do Iceberg.
PySpark
# Create a DataFrame with sample data.
data = spark.createDataFrame([(1, "Alice"), (2, "Bob")], ["id", "name"])
# Create an Iceberg table in Cloud Storage.
spark.sql("""CREATE TABLE IF NOT EXISTS CATALOG_NAME.NAMESPACE.TABLE_NAME (
id integer,
name string)
USING iceberg
LOCATION 'gs://BUCKET/FOLDER/NAMESPACE/TABLE_NAME'""")
# Write the DataFrame to the Iceberg table in Cloud Storage.
data.writeTo("CATALOG_NAME.NAMESPACE.TABLE_NAME").append()
Scala
// Create a DataFrame with sample data.
val data = Seq((1, "Alice"), (2, "Bob")).toDF("id", "name")
// Create an Iceberg table in Cloud Storage.
spark.sql("""CREATE TABLE IF NOT EXISTS CATALOG_NAME.NAMESPACE.TABLE_NAME (
id integer,
name string)
USING iceberg
LOCATION 'gs://BUCKET/FOLDER/NAMESPACE/TABLE_NAME'""")
// Write the DataFrame to the Iceberg table in Cloud Storage.
data.writeTo("CATALOG_NAME.NAMESPACE.TABLE_NAME").append()
Ler dados de uma tabela do Iceberg
É possível ler dados de uma tabela do Iceberg usando o Spark. Os snippets de código a seguir leem a tabela e exibem o conteúdo dela.
PySpark
# Read Iceberg table data into a DataFrame.
df = spark.read.format("iceberg").load("CATALOG_NAME.NAMESPACE.TABLE_NAME")
# Display the data.
df.show()
Scala
// Read Iceberg table data into a DataFrame.
val df = spark.read.format("iceberg").load("CATALOG_NAME.NAMESPACE.TABLE_NAME")
// Display the data.
df.show()
Spark SQL
SELECT * FROM CATALOG_NAME.NAMESPACE.TABLE_NAME
Hive
Criar uma tabela Iceberg no Hive
Os clusters do Serviço Gerenciado para Apache Spark pré-configuram o Hive para funcionar com o Iceberg.
Para executar os snippets de código nesta seção, siga estas etapas:
Use o SSH para se conectar ao nó mestre do cluster do Serviço Gerenciado para Apache Spark.
Abra
beelinena janela do terminal SSH.beeline -u jdbc:hive2://
É possível criar uma tabela Iceberg particionada ou não particionada no Hive.
Tabela não particionada
Crie uma tabela Iceberg não particionada no Hive.
CREATE TABLE my_table ( id INT, name STRING, created_at TIMESTAMP ) STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler';
Tabela particionada
Crie uma tabela particionada do Iceberg no Hive especificando as colunas de partição na cláusula PARTITIONED BY.
CREATE TABLE my_partitioned_table ( id INT, name STRING ) PARTITIONED BY (date_sk INT) STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler';
Inserir dados em uma tabela do Iceberg no Hive
É possível inserir dados em uma tabela do Iceberg usando instruções INSERT padrão do Hive.
SET hive.execution.engine=mr; INSERT INTO my_table SELECT 1, 'Alice', current_timestamp();
Limitações
- O mecanismo de execução do MR (MapReduce) só é compatível com operações de DML (linguagem de manipulação de dados).
- A execução de MR foi descontinuada no Hive
3.1.3.
Ler dados de uma tabela Iceberg no Hive
Para ler dados de uma tabela do Iceberg, use uma instrução SELECT.
SELECT * FROM my_table;
Remover uma tabela do Iceberg no Hive.
Para remover uma tabela do Iceberg no Hive, use a instrução DROP TABLE.
DROP TABLE my_table;
A seguir
- Consulte o guia de início rápido do Iceberg.