El componente opcional de Iceberg te permite administrar tablas de data lakehouse con transacciones ACID y evolución de esquemas en clústeres de Managed Service para Apache Spark. Puedes instalar Iceberg durante la creación del clúster con la función Componentes opcionales para consultar y actualizar tablas en las cargas de trabajo de Spark y Hive.
Funciones clave de Iceberg
Entre las funciones de Iceberg, se incluyen las siguientes:
- Evolución del esquema: Agrega, quita o cambia el nombre de las columnas sin volver a escribir toda la tabla.
- Viaje en el tiempo: Consulta instantáneas de tablas históricas con fines de auditoría o reversión.
- Particionamiento oculto: 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: Garantizan la coherencia de los datos y evitan conflictos.
Propiedades relacionadas con Iceberg
Cuando creas un clúster de Managed Service para Apache Spark con Iceberg, las siguientes propiedades de Spark y Hive se configuran para funcionar con Iceberg.
Versión de imagen 2.x
Las siguientes propiedades de Spark y Hive se configuran en los clústeres de Managed Service para Apache Spark `2.x` cuando se instala el componente de 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 |
Versión de imagen 3.0
Las siguientes propiedades de Spark y Hive se configuran en los clústeres de Managed Service para Apache Spark `3.0` cuando se instala el componente de Iceberg:
| Archivo de configuración | Propiedad | Valor predeterminado |
|---|---|---|
/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 |
Instala el componente opcional de Iceberg
Puedes instalar el componente de Iceberg en los clústeres de Managed Service para Apache Spark creados con las versiones de imagen 2.2.47 y posteriores. En las páginas de la lista de versiones de imágenes de clústeres de Managed Service para Apache Spark, se muestra la versión del componente de Iceberg incluida en las versiones de imágenes de clústeres de Managed Service para Apache Spark más recientes.
Consola deGoogle Cloud
Para crear un clúster de Managed Service para Apache Spark que instale el componente de Iceberg, completa los siguientes pasos en la consola de Google Cloud :
- Abre la página Crear clúster.
- Haz clic en Configuración adicional para expandir esa sección.
- Edita los componentes opcionales.
- En el panel que se abre, selecciona la casilla de verificación de Iceberg.
- Haz clic en Guardar.
gcloud CLI
Para crear un clúster de Managed Service para Apache Spark que instale el componente de 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 ...
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 Managed Service para Apache Spark que instale el componente opcional de Iceberg,
especifica el SoftwareConfig.Component de Iceberg
como parte de una solicitud
clusters.create.
Usa tablas de Iceberg con Spark y Hive
Después de crear un clúster de Managed Service para Apache Spark que tenga el componente opcional de Iceberg instalado en el clúster, puedes usar Spark y Hive para leer y escribir datos de tablas de Iceberg.
Spark
Configura una sesión de Spark para Iceberg
Puedes usar el comando de gcloud CLI de forma local o los REPL (bucles de lectura, evaluación y salida) de spark-shell o pyspark que se ejecutan en el nodo instancia 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 las 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 REPL de spark-shell en el
clúster de Managed Service para Apache Spark, completa los siguientes pasos:
Usa SSH para conectarte al nodo principal del clúster de Managed Service para Apache Spark.
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 de pyspark en el
clúster de Managed Service para Apache Spark, completa los siguientes pasos:
Usa SSH para conectarte al nodo principal del clúster de Managed Service para Apache Spark.
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 Managed Service para Apache Spark preconfiguran 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 de tu clúster de Managed Service para Apache Spark.
Abre
beelineen la ventana de terminal SSH.beeline -u jdbc:hive2://
Puedes crear una tabla de Iceberg particionada o no particionada 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
Crea una tabla de Iceberg particionada 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';
Inserta datos en una tabla de Iceberg en Hive
Puedes insertar datos en una tabla de Iceberg con declaraciones 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 MR (MapReduce) solo se admite para 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 sentencia SELECT.
SELECT * FROM my_table;
Descarta una tabla de Iceberg en Hive.
Para descartar una tabla de Iceberg en Hive, usa la sentencia DROP TABLE.
DROP TABLE my_table;
¿Qué sigue?
- Consulta la guía de inicio rápido de Iceberg.