É possível instalar outros componentes, como o Iceberg, ao criar um cluster do Dataproc usando o recurso Componentes opcionais. Nesta página, descrevemos como instalar o componente Iceberg em um cluster do Dataproc.
Visão geral
O Apache Iceberg é um formato de tabela aberto para grandes conjuntos de dados analíticos. Ele traz a confiabilidade e a simplicidade das tabelas SQL para o Big Data, permitindo que mecanismos como Spark, Trino, PrestoDB, Flink e Hive trabalhem com segurança com as mesmas tabelas ao mesmo tempo.
Quando instalado em um cluster do Dataproc, o componente Apache Iceberg instala as bibliotecas do Iceberg e configura o Spark e o Hive para trabalhar com o Iceberg no cluster.
Principais recursos do Iceberg
Os recursos do Iceberg incluem:
- Evolução do esquema:adicione, remova ou renomeie colunas sem precisar 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 da partição aos usuários.
- Transações ACID:garanta a consistência dos dados e evite conflitos.
Versões de imagem compatíveis do Dataproc
É possível instalar o componente Iceberg em clusters do Dataproc criados com a versão 2.2.47 e versões mais recentes da imagem. A versão do Iceberg instalada no cluster é listada na página 2.2 release versions.
Propriedades relacionadas ao Iceberg
Quando você cria um cluster do Dataproc com o Iceberg, as seguintes propriedades do Spark e do Hive são configuradas para funcionar com o Iceberg.
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 |
Instalar o componente opcional do Iceberg
Instale o componente Iceberg ao criar um cluster do Dataproc. As páginas da Lista de versões de imagem do cluster do Dataproc mostram a versão do componente Iceberg incluída nas versões mais recentes da imagem do cluster do Dataproc.
Console do Google Cloud
Para criar um cluster do Dataproc que instale o componente Iceberg, conclua as etapas a seguir no console do Google Cloud:
- Abra a página Criar um cluster do Dataproc. O painel Configurar cluster está selecionado.
- Na seção Componentes, em Componentes opcionais, selecione o componente Iceberg.
- Confirme ou especifique outras configurações do cluster e clique em Criar.
Google Cloud CLI
Para criar um cluster do Dataproc que instale 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 nome do novo cluster.
- REGION: a região do cluster.
API REST
Para criar um cluster do Dataproc que instale o componente opcional do Iceberg,
especifique o Iceberg
SoftwareConfig.Component
como parte de uma
solicitação clusters.create
.
Usar tabelas Iceberg com o Spark e o Hive
Depois de criar um cluster do Dataproc com o componente opcional do Iceberg instalado, use 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 (loops de leitura-avaliação-impressão) spark-shell
ou pyspark
executados 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 exemplo de CLI gcloud abaixo em uma janela de terminal local ou no Cloud Shell para enviar um job do Spark e definir 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 Iceberg usando o REPL spark-shell
no cluster do Dataproc, siga estas etapas:
Use o SSH para se conectar ao nó mestre do cluster do Dataproc.
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 pyspark
Para configurar uma sessão do Spark para Iceberg usando o REPL pyspark
no cluster do Dataproc, siga estas etapas:
Use o SSH para se conectar ao nó mestre do cluster do Dataproc.
Execute o comando abaixo 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 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 Iceberg no Cloud Storage
e gravam os dados na tabela 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 Iceberg
É possível ler dados de uma tabela Iceberg usando o Spark. Os snippets de código abaixo lêem a tabela e mostram 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 Dataproc preconfiguram 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 Dataproc.
Abra
beeline
na janela do terminal SSH.beeline -u jdbc:hive2://
É possível criar uma tabela Iceberg não particionada ou 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 Iceberg particionada 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 Iceberg no Hive
É possível inserir dados em uma tabela 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 MapReduce tem suporte apenas para 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 Iceberg, use uma instrução SELECT
.
SELECT * FROM my_table;
Exclua uma tabela do Iceberg no Hive.
Para excluir uma tabela do Iceberg no Hive, use a instrução DROP TABLE
.
DROP TABLE my_table;