Puedes instalar componentes adicionales como Iceberg cuando creas un clúster de Dataproc con la función de componentes opcionales. En esta página, se describe cómo instalar opcionalmente el componente Iceberg en un clúster de Dataproc.
Descripción general
Apache Iceberg es un formato de tabla abierta para conjuntos de datos analíticos grandes. Aporta la confiabilidad y la simplicidad de las tablas SQL a Big Data, al mismo 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 bibliotecas de Iceberg y configura Spark y Hive para que funcionen con Iceberg en el clúster.
Funciones clave de Iceberg
Las funciones de Iceberg incluyen lo siguiente:
- Evolución del esquema: Agrega, quita o cambia el nombre de las columnas sin volver a escribir la tabla completa.
- Viaje en el tiempo: Consulta instantáneas históricas de la tabla para fines de auditoría o reversión.
- Partición oculta: Optimiza el diseño de los datos para realizar consultas más rápidas sin exponer los detalles de la partición a los usuarios.
- Transacciones ACID: Garantiza la coherencia de los datos y evita conflictos.
Versiones de imagen de Dataproc compatibles
Puedes instalar el componente Iceberg en clústeres de Dataproc creados con 2.2.47 y versiones de imagen posteriores. La versión de Iceberg instalada en el clúster aparece en la página de versiones de la versión 2.2.
Propiedades relacionadas con Iceberg
Cuando creas un clúster de Dataproc con Iceberg, las siguientes propiedades de Spark y Hive se configuran 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 |
Instala el componente opcional Iceberg
Instala el componente Iceberg cuando crees un clúster de Dataproc. En las páginas de la lista de versiones de imagen del clúster de Dataproc, se muestra la versión del componente Iceberg incluida en las versiones de imagen más recientes del clúster de Dataproc.
Google Cloud Consola de
Para crear un clúster de Dataproc que instale el componente Iceberg, completa los siguientes pasos en la Google Cloud consola de:
- Abre la página Crear un clúster de Dataproc. Se selecciona el panel Configurar clúster.
- En la sección Componentes, en Componentes opcionales, selecciona el componente Iceberg.
- Confirma o especifica otros parámetros de configuración del clúster y, luego, haz clic en Crear.
Google Cloud CLI
Para crear un clúster de Dataproc que instale el componente Iceberg, usa el
gcloud dataproc clusters create
comando con la --optional-components marca.
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --optional-components=ICEBERG \ other flags ...
Reemplaza lo siguiente:
- CLUSTER_NAME: Es el nombre del clúster nuevo.
- REGION: Es la región del clúster.
API de REST
Para crear un clúster de Dataproc que instale el componente opcional Iceberg,
especifica el Iceberg
SoftwareConfig.Component
como parte de una
clusters.create
solicitud.
Usa tablas de Iceberg con Spark y Hive
Después de crear un clúster de Dataproc que tenga instalado el componente opcional Iceberg, puedes usar Spark y Hive para leer y escribir datos de la tabla de Iceberg.
Spark
Configura una sesión de Spark para Iceberg
Puedes usar el comando de gcloud CLI de forma local o los spark-shell o pyspark
REPL (bucles de lectura, evaluación e impresión) que se ejecutan en el nodo principal 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 gcloud CLI en una ventana de terminal local o en Cloud Shell para enviar un trabajo de Spark y establecer 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 ...
Reemplaza lo siguiente:
- CLUSTER_NAME: Es el nombre del clúster.
- REGION: Es la región de Compute Engine.
- CATALOG_NAME: Es el nombre del catálogo de Iceberg.
- BUCKET y FOLDER: Es la ubicación del catálogo de Iceberg en Cloud Storage.
spark-shell
Para configurar una sesión de Spark para Iceberg con el spark-shell REPL en el
clúster de Dataproc, completa los siguientes pasos:
Usa SSH para conectarte al nodo principal del clúster de Dataproc.
Ejecuta el siguiente comando en la terminal de la sesión de 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"
Reemplaza lo siguiente:
- CLUSTER_NAME: Es el nombre del clúster.
- REGION: Es la región de Compute Engine.
- CATALOG_NAME: Es el nombre del catálogo de Iceberg.
- BUCKET y FOLDER: Es la ubicación del catálogo de Iceberg en Cloud Storage.
Shell de pyspark
Para configurar una sesión de Spark para Iceberg con el REPL pyspark en el
clúster de Dataproc, completa los siguientes pasos:
Usa SSH para conectarte al nodo principal del clúster de Dataproc.
Ejecuta el siguiente comando en la terminal de la sesión de 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"
Reemplaza lo siguiente:
- CLUSTER_NAME: Es el nombre del clúster.
- REGION: Es la región de Compute Engine.
- CATALOG_NAME: Es el nombre del catálogo de Iceberg.
- BUCKET y FOLDER: Es la ubicación del catálogo de Iceberg en Cloud Storage.
Escribe datos en una tabla de Iceberg
Puedes escribir datos en una tabla de Iceberg con Spark. En los siguientes fragmentos de código, se crea un
DataFrame
con datos de muestra, se crea una tabla de Iceberg en Cloud Storage,
y, luego, se 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()
Lee datos de una tabla de Iceberg
Puedes leer datos de una tabla de Iceberg con Spark. En los siguientes fragmentos de código, se lee la tabla y, luego, se muestra 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
Crea una tabla de Iceberg en Hive
Los clústeres de Dataproc configuran previamente Hive para que funcione con Iceberg.
Para ejecutar los fragmentos de código de esta sección, completa los siguientes pasos:
Usa SSH para conectarte al nodo principal del clúster de Dataproc.
Abre
beelineen la ventana de la terminal SSH.beeline -u jdbc:hive2://
Puedes crear una tabla de Iceberg particionada o sin particiones en Hive.
Tabla no particionada
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 particionada
Para crear una tabla de Iceberg particionada en Hive, especifica las columnas de partición en la
PARTITIONED BY cláusula.
CREATE TABLE my_partitioned_table ( id INT, name STRING ) PARTITIONED BY (date_sk INT) STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler';
Inserta datos en una tabla de Iceberg en Hive
Puedes insertar datos en una tabla de Iceberg con 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 MR (MapReduce) solo es compatible con las operaciones de DML (lenguaje de manipulación de datos).
- La ejecución de MR dejó de estar disponible en Hive
3.1.3.
Lee 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;
Descarta una tabla de Iceberg en Hive
Para descartar una tabla de Iceberg en Hive, usa la instrucción DROP TABLE.
DROP TABLE my_table;
¿Qué sigue?
- Consulta la guía de inicio rápido de Iceberg.