Integración de Apache Iceberg mediante Spark con iDrive® e2
Apache Iceberg es un formato de tabla de código abierto para gestionar conjuntos de datos analíticos a gran escala en lagos de datos. La integración de Apache Iceberg con IDrive® e2 mediante Apache Spark permite la gestión de grandes conjuntos de datos analíticos con potentes funciones de formato de tabla mientras se utiliza IDrive® e2 como almacenamiento de objetos en la nube escalable y seguro. Esta integración facilita un almacenamiento rentable y una analítica de alto rendimiento en su lago de datos.
Requisitos previos:
Antes de empezar, asegúrate de lo siguiente:
- Una cuenta IDrive® e2 activa. Regístrese aquí si no tiene una.
- Un bucket en IDrive® e2. Vea cómo crear un bucket.
- ID de clave de acceso válida y clave de acceso secreta. Aprenda a crear una clave de acceso.
- En el transcurso de las pruebas, se utilizaron los siguientes paquetes con Ubuntu 24.04.
- Spark versión 3.5.6
- iceberg-spark-runtime-3.5_2.12-1.9.2.jar
- hadoop-aws-3.3.4.jar
- aws-java-sdk-bundle-1.11.1026.jar
Pasos para configurar Apache Iceberg con IDrive® e2
- Tras la instalación de la biblioteca Iceberg (Spark), actualice el directorio en $SPARK_HOME/conf/spark-defaults.conf con la siguiente configuración:
spark.driver.extraClassPath=/home/vishal/spark-extra-jars/hadoop-aws-3.3.4.jar:/home/vishal/spark-extra-jars/aws-java-sdk-bundle-1.11.1026.jar
spark.executor.extraClassPath=/home/vishal/spark-extra-jars/hadoop-aws-3.3.4.jar:/home/vishal/spark-extra-jars/aws-java-sdk-bundle-1.11.1026.jar
Extensiones #Icerberg y configuración del catálogo:
spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions
spark.sql.catalog.s3cat=org.apache.iceberg.spark.SparkCatalog
spark.sql.catalog.s3cat.type=hadoop
spark.sql.catalog.s3cat.warehouse=s3a://almacén09876
(Nota: Este es el nombre del bucket)#S3A filesystem configs for Idrive® e2:
spark.hadoop.fs.s3a.endpoint=<Idrivee2-endpoint>
(Ex: v1e8.da.idrivee2-17.com)spark.hadoop.fs.s3a.path.style.access=true
spark.hadoop.fs.s3a.connection.ssl.enabled=true
spark.hadoop.fs.s3a.signing-region=us-east-1
spark.hadoop.fs.s3a.access.key=<Access Key>
spark.hadoop.fs.s3a.secret.key=<Secret Key>
#Pasos opcionales para el ajuste del rendimiento:
spark.hadoop.fs.s3a.fast.upload=true
spark.hadoop.fs.s3a.connection.maximum=100
spark.hadoop.fs.s3a.threads.max=20
Descargar el Hadoop AWS y AWS SDK para Spark 3.5.6 necesario
mkdir -p ~/spark-extra-jars
cd ~/spark-extra-jars
# Download matching Hadoop AWS + AWS SDK for Spark 3.5.6 (Hadoop 3.3.4)
curl -O
https://repo1.maven.org/maven2/org/apache/hadoop/hadoop-aws/3.3.4/hadoop-aws-3.3.4.jarcurl -O
https://repo1.maven.org/maven2/com/amazonaws/aws-java-sdk-bundle/1.11.1026/aws-java-sdk-bundle-1.11.1026.jarEjecute el siguiente código para crear un bucket (si no existe) e insertar datos en la tabla (Bucket) en destino
#!/bin/bash
spark-sql --jars \
$SPARK_HOME/jars/iceberg-spark-runtime-3.5_2.12-1.9.2.jar,
$SPARK_HOME/jars/hadoop-aws-3.3.4.jar,
$SPARK_HOME/jars/aws-java-sdk-bundle-1.11.1026.jar -e "CREATE NAMESPACE IF NOT EXISTS s3cat.db;
CREATE TABLE IF NOT EXISTS s3cat.db.events (
id BIGINT,
ts TIMESTAMP,
datos STRING
) USING iceberg;INSERT INTO s3cat.db.events VALUES (1, current_timestamp(), 'hola'), (2, current_timestamp(), 'mundo');
SELECT * FROM s3cat.db.events;
" --verbose
Nota: Cambie las claves de acceso, los puntos finales y los nombres de directorio según su configuración.
Nota: La restauración de los datos corre a cargo de su proveedor específico de soluciones de copia de seguridad y se ve afectada por múltiples variables que son exclusivas de su entorno. Para consultas/soporte relacionados con la aplicación, se recomienda encarecidamente que solicite asesoramiento al equipo técnico de su proveedor de soluciones de copia de seguridad.