Puedes instalar componentes adicionales, como Iceberg, al crear un clúster de Dataproc mediante la función Componentes opcionales. En esta página se describe cómo puedes instalar el componente Iceberg en un clúster de Dataproc.
Información general
Apache Iceberg es un formato de tabla abierto para conjuntos de datos analíticos de gran tamaño. Ofrece la fiabilidad y la sencillez de las tablas SQL al Big Data, al tiempo que permite que motores como Spark, Trino, PrestoDB, Flink y Hive trabajen de forma segura con las mismas tablas al mismo tiempo.
Cuando se instala en un clúster de Dataproc, el componente Apache Iceberg instala las bibliotecas de Iceberg y configura Spark y Hive para que funcionen con Iceberg en el clúster.
Funciones principales de Iceberg
Entre las funciones de Iceberg, se incluyen las siguientes:
- Evolución del esquema: añade, elimina o cambia el nombre de las columnas sin tener que volver a escribir toda la tabla.
- Viaje en el tiempo: consulta las instantáneas históricas de las tablas para realizar auditorías o restaurar versiones anteriores.
- Particiones ocultas: optimiza el diseño de los datos para que las consultas sean más rápidas sin exponer los detalles de las particiones a los usuarios.
- Transacciones ACID: aseguran la coherencia de los datos y evitan conflictos.
Versiones de imagen de Dataproc compatibles
Puedes instalar el componente Iceberg en clústeres de Dataproc creados con la versión de imagen 2.2.47 o posterior. La versión de Iceberg instalada en el clúster se indica en la página de versiones de lanzamiento 2.2.
Propiedades relacionadas con Iceberg
Al crear un clúster de Dataproc con Iceberg, se configuran las siguientes propiedades de Spark y Hive para que funcionen con Iceberg.
Archivo de configuración | Propiedad | Valor predeterminado |
---|---|---|
/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 el componente opcional de Iceberg
Instala el componente Iceberg al crear un clúster de Dataproc. En las páginas de la lista de versiones de imágenes de clústeres de Dataproc se muestra la versión del componente Iceberg incluida en las versiones más recientes de imágenes de clústeres de Dataproc.
Google Cloud consola
Para crear un clúster de Dataproc que instale el componente Iceberg, sigue estos pasos en la Google Cloud consola:
- Abre la página de Dataproc Crear un clúster. El panel Configurar clúster está seleccionado.
- En la sección Componentes, vaya a Componentes opcionales y seleccione el componente Iceberg.
- Confirma o especifica otros ajustes del clúster y, a continuación, haz clic en Crear.
Google Cloud CLI
Para crear un clúster de Dataproc que instale el componente Iceberg, usa el comando
gcloud dataproc clusters create
con la marca --optional-components
.
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --optional-components=ICEBERG \ other flags ...
Haz los cambios siguientes:
- CLUSTER_NAME: el nuevo nombre del clúster.
- REGION: la región del clúster.
API REST
Para crear un clúster de Dataproc que instale el componente opcional Iceberg, especifica Iceberg
SoftwareConfig.Component
como parte de una solicitud
clusters.create
.
Usar tablas de Iceberg con Spark y Hive
Después de crear un clúster de Dataproc que tenga el componente opcional Iceberg instalado en el clúster, puedes usar Spark y Hive para leer y escribir datos de tablas de Iceberg.
Spark
Configurar una sesión de Spark para Iceberg
Puedes usar el comando de la CLI de gcloud de forma local o los REPLs (bucles de lectura, evaluación e impresión) spark-shell
o pyspark
que se ejecutan en el nodo maestro del clúster de Dataproc
para habilitar las extensiones de Spark de Iceberg y configurar el catálogo de Spark para usar tablas de Iceberg.
gcloud
Ejecuta el siguiente ejemplo de la CLI de gcloud en una ventana de terminal local o en Cloud Shell para enviar un trabajo de Spark y definir propiedades de Spark para configurar la sesión de Spark para 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 ...
Haz los cambios siguientes:
- CLUSTER_NAME: nombre del clúster.
- REGION: la región de Compute Engine.
- CATALOG_NAME: nombre del catálogo de Iceberg.
- BUCKET y FOLDER: la ubicación del catálogo de Iceberg en Cloud Storage.
spark-shell
Para configurar una sesión de Spark para Iceberg mediante el REPL spark-shell
en el clúster de Dataproc, sigue estos pasos:
Usa SSH para conectarte al nodo maestro del clúster de Dataproc.
Ejecuta el siguiente comando en el terminal de la sesión SSH para configurar la sesión de Spark para 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"
Haz los cambios siguientes:
- CLUSTER_NAME: nombre del clúster.
- REGION: la región de Compute Engine.
- CATALOG_NAME: nombre del catálogo de Iceberg.
- BUCKET y FOLDER: la ubicación del catálogo de Iceberg en Cloud Storage.
Shell de pyspark
Para configurar una sesión de Spark para Iceberg mediante el REPL pyspark
en el clúster de Dataproc, sigue estos pasos:
Usa SSH para conectarte al nodo maestro del clúster de Dataproc.
Ejecuta el siguiente comando en el terminal de la sesión SSH para configurar la sesión de Spark para 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"
Haz los cambios siguientes:
- CLUSTER_NAME: nombre del clúster.
- REGION: la región de Compute Engine.
- CATALOG_NAME: nombre del catálogo de Iceberg.
- BUCKET y FOLDER: la ubicación del catálogo de Iceberg en Cloud Storage.
Escribir datos en una tabla Iceberg
Puedes escribir datos en una tabla de Iceberg con Spark. Los siguientes fragmentos de código crean un
DataFrame
con datos de ejemplo, crean una tabla de Iceberg en Cloud Storage
y, a continuación, escriben los datos en la tabla de 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()
Leer datos de una tabla Iceberg
Puedes leer datos de una tabla de Iceberg con Spark. Los siguientes fragmentos de código leen la tabla y, a continuación, muestran su contenido.
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
Crear una tabla de Iceberg en Hive
Los clústeres de Dataproc preconfiguran Hive para que funcione con Iceberg.
Para ejecutar los fragmentos de código de esta sección, sigue estos pasos:
Usa SSH para conectarte al nodo maestro de tu clúster de Dataproc.
Abre
beeline
en la ventana de terminal SSH.beeline -u jdbc:hive2://
Puedes crear una tabla Iceberg con o sin particiones en Hive.
Tabla sin particiones
Crea una tabla de Iceberg sin particiones en Hive.
CREATE TABLE my_table ( id INT, name STRING, created_at TIMESTAMP ) STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler';
Tabla con particiones
Crea una tabla Iceberg con particiones en Hive especificando las columnas de partición en la 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';
Insertar datos en una tabla Iceberg de Hive
Puede insertar datos en una tabla de Iceberg mediante instrucciones INSERT
estándar de Hive.
SET hive.execution.engine=mr; INSERT INTO my_table SELECT 1, 'Alice', current_timestamp();
Limitaciones
- El motor de ejecución de MapReduce solo se admite en operaciones de DML (lenguaje de manipulación de datos).
- La ejecución de MR está obsoleta en Hive
3.1.3
.
Leer datos de una tabla de Iceberg en Hive
Para leer datos de una tabla de Iceberg, usa una instrucción SELECT
.
SELECT * FROM my_table;
Eliminar una tabla de Iceberg en Hive.
Para eliminar una tabla de Iceberg en Hive, usa la instrucción DROP TABLE
.
DROP TABLE my_table;
Siguientes pasos
- Consulta la guía de inicio rápido de Iceberg.