Pode instalar componentes adicionais, como o Iceberg, quando cria um cluster do Dataproc através da funcionalidade Componentes opcionais. Esta página descreve como pode instalar opcionalmente o componente Iceberg num cluster do Dataproc.
Vista geral
O Apache Iceberg é um formato de tabela aberto para grandes conjuntos de dados analíticos. Oferece a fiabilidade e a simplicidade das tabelas SQL aos Big Data, ao mesmo tempo que permite que motores como o Spark, o Trino, o PrestoDB, o Flink e o Hive funcionem em segurança com as mesmas tabelas.
Quando instalado num cluster do Dataproc, o componente Apache Iceberg instala bibliotecas do Iceberg e configura o Spark e o Hive para funcionarem com o Iceberg no cluster.
Principais funcionalidades do Iceberg
As funcionalidades do Iceberg incluem o seguinte:
- Evolução do esquema: adicione, remova ou mude o nome das colunas sem reescrever a tabela inteira.
- Viagem no tempo: consulte as capturas instantâneas históricas de tabelas para fins de auditoria ou reversão.
- Partição oculta: otimize a disposição dos dados para consultas mais rápidas sem expor os detalhes da partição aos utilizadores.
- Transações ACID: garantem a consistência dos dados e evitam conflitos.
Versões de imagens do Dataproc compatíveis
Pode instalar o componente Iceberg em clusters do Dataproc criados com as versões de imagem 2.2.47 e posteriores. A versão do Iceberg instalada no cluster está listada na página Versões de lançamento 2.2.
Propriedades relacionadas com o Icebergue
Quando cria um cluster do Dataproc com o Iceberg, as seguintes propriedades do Spark e do Hive são configuradas para funcionar com o Iceberg.
Ficheiro de configuração | Propriedade | Valor predefinido |
---|---|---|
/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 |
Instale o componente opcional Iceberg
Instale o componente Iceberg quando criar um cluster do Dataproc. As páginas da lista de versões de imagens de clusters do Dataproc mostram a versão do componente Iceberg incluída nas versões de imagens de clusters do Dataproc mais recentes.
Google Cloud consola
Para criar um cluster do Dataproc que instale o componente Iceberg, conclua os seguintes passos na Google Cloud consola:
- Abra a página do Dataproc Criar um cluster. O painel Configurar cluster está selecionado.
- Na secção Componentes, em Componentes opcionais, selecione o componente Iceberg.
- Confirme ou especifique outras definições do cluster e, de seguida, clique em Criar.
CLI do Google Cloud
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 o seguinte:
- CLUSTER_NAME: o novo nome do 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 um pedido
clusters.create
.
Use tabelas Iceberg com o Spark e o Hive
Depois de criar um cluster do Dataproc com o componente opcional do Iceberg instalado no cluster, pode usar o Spark e o Hive para ler e escrever dados de tabelas do Iceberg.
Spark
Configure uma sessão do Spark para o Iceberg
Pode usar o comando gcloud CLI localmente ou os spark-shell
ou pyspark
REPLs (Read-Eval-Print Loops) executados no nó principal 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 numa janela de terminal local ou no Cloud Shell para enviar uma tarefa 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 o seguinte:
- CLUSTER_NAME: o nome do cluster.
- REGION: a região do Compute Engine.
- CATALOG_NAME: nome do catálogo do Iceberg.
- BUCKET e FOLDER: a localização do catálogo Iceberg no Cloud Storage.
spark-shell
Para configurar uma sessão do Spark para o Iceberg através do spark-shell
REPL no cluster do Dataproc, conclua os seguintes passos:
Use o SSH para se ligar ao nó principal do cluster do Dataproc.
Execute o seguinte comando 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 o seguinte:
- CLUSTER_NAME: o nome do cluster.
- REGION: a região do Compute Engine.
- CATALOG_NAME: nome do catálogo do Iceberg.
- BUCKET e FOLDER: a localização do catálogo Iceberg no Cloud Storage.
shell pyspark
Para configurar uma sessão do Spark para o Iceberg através do pyspark
REPL no cluster do Dataproc, conclua os seguintes passos:
Use o SSH para se ligar ao nó principal do cluster do Dataproc.
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 o seguinte:
- CLUSTER_NAME: o nome do cluster.
- REGION: a região do Compute Engine.
- CATALOG_NAME: nome do catálogo do Iceberg.
- BUCKET e FOLDER: a localização do catálogo Iceberg no Cloud Storage.
Escreva dados numa tabela Iceberg
Pode escrever dados numa tabela Iceberg através do Spark. Os seguintes fragmentos de código criam um
DataFrame
com dados de amostra, criam uma tabela Iceberg no Cloud Storage
e, em seguida, escrevem 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()
Leia dados de uma tabela Iceberg
Pode ler dados de uma tabela Iceberg através do Spark. Os seguintes fragmentos de código leem a tabela e, em seguida, apresentam o respetivo conteúdo.
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
Crie uma tabela Iceberg no Hive
Os clusters do Dataproc pré-configuram o Hive para funcionar com o Iceberg.
Para executar os fragmentos de código nesta secção, conclua os seguintes passos:
Use o SSH para estabelecer ligação ao nó principal do cluster do Dataproc.
Apresente
beeline
na janela do terminal SSH.beeline -u jdbc:hive2://
Pode 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 numa tabela Iceberg no Hive
Pode inserir dados numa tabela Iceberg através de declarações INSERT
padrão do Hive.
SET hive.execution.engine=mr; INSERT INTO my_table SELECT 1, 'Alice', current_timestamp();
Limitações
- Apenas o motor de execução MR (MapReduce) é suportado para operações DML (linguagem de manipulação de dados).
- A execução de MR está descontinuada no Hive
3.1.3
.
Ler dados de uma tabela Iceberg no Hive
Para ler dados de uma tabela Iceberg, use uma declaração SELECT
.
SELECT * FROM my_table;
Largue uma tabela Iceberg no Hive.
Para eliminar uma tabela Iceberg no Hive, use a declaração DROP TABLE
.
DROP TABLE my_table;
O que se segue?
- Consulte o guia de início rápido do Iceberg.