Construire des data modernes Lakehouses sur Google Cloud avec Apache Iceberg et Apache Spark

Contenu sponsorisé
Le paysage de l’analyse des mégadonnées est en constante évolution, les organisations recherchant des moyens plus flexibles, évolutifs et rentables de gérer et d’analyser de grandes quantités de données. Cette poursuite a conduit à la montée en puissance du paradigme Data Lakehouse, qui combine le stockage et la flexibilité à faible coût des lacs de données avec les capacités de gestion des données et la cohérence transactionnelle des entrepôts de données. Au cœur de cette révolution se trouvent des formats de table ouverts comme Apache iceberg et de puissants moteurs de traitement comme Apache Spark, tous habilités par la robuste infrastructure de Google Cloud.
The Rise of Apache iceberg: un changeur de jeu pour les lacs de données
Pendant des années, les lacs de données, généralement construits sur le stockage d’objets cloud comme Google Cloud Storage (GCS), offraient une évolutivité et une rentabilité inégalées. Cependant, ils manquaient souvent des caractéristiques cruciales trouvées dans les entrepôts de données traditionnels, tels que la cohérence transactionnelle, l’évolution du schéma et les optimisations de performances pour les requêtes analytiques. C’est là qu’Apache iceberg brille.
Apache Iceberg est un format de table ouvert conçu pour répondre à ces limitations. Il se trouve au-dessus de vos fichiers de données (comme Parquet, Orc ou Avro) dans le stockage cloud, fournissant une couche de métadonnées qui transforme une collection de fichiers en une table de type SQL haute performance. Voici ce qui rend l’iceberg si puissant:
- Conformité acide: Iceberg apporte les propriétés de l’atomicité, de la cohérence, de l’isolement et de la durabilité (acide) à votre lac de données. Cela signifie que les écritures de données sont transactionnelles, garantissant l’intégrité des données même avec les opérations simultanées. Plus d’écrits partiels ou de lectures incohérentes.
- Évolution du schéma: L’un des plus grands points de douleur dans les lacs de données traditionnels est la gestion des changements de schéma. Iceberg gère l’évolution du schéma de manière transparente, vous permettant d’ajouter, de déposer, de renommer ou de réorganiser les colonnes sans réécrire les données sous-jacentes. Ceci est essentiel pour le développement des données agiles.
- Partionnement caché: Iceberg gère intelligemment le partitionnement, abstraction de la disposition physique de vos données. Les utilisateurs n’ont plus besoin de connaître le schéma de partitionnement pour rédiger des requêtes efficaces, et vous pouvez faire évoluer votre stratégie de partitionnement au fil du temps sans migrations de données.
- Voyage dans le temps et Rollback: Iceberg maintient une histoire complète des instantanés de table. Cela permet des requêtes «voyage dans le temps», vous permettant de demander des données telles qu’elle existait à tout moment du passé. Il fournit également des capacités de recul, vous permettant de revenir à un tableau à un bon état précédent, inestimable pour le débogage et la récupération des données.
- Optimisations de performances: Les riches métadonnées d’Iceberg permettent aux moteurs de requête de tailler des fichiers de données et de partitions non pertinents efficacement, accélérant considérablement l’exécution de la requête. Il évite les opérations coûteuses de liste de fichiers, sautant directement aux données pertinentes en fonction de ses métadonnées.
En fournissant ces fonctionnalités de type entrepôt de données au-dessus d’un lac de données, Apache Iceberg permet la création d’un véritable «Data Lakehouse», offrant le meilleur des deux mondes: la flexibilité et la rentabilité du stockage du nuage combinée à la fiabilité et aux performances des tables structurées.
Google Cloud Tables biglake pour Apache iceberg à BigQuery Offre une expérience de table entièrement gérée similaire aux tables BigQuery standard, mais toutes les données sont stockées dans des seaux de stockage appartenant à la clientèle. Les fonctionnalités de support comprennent:
- Mutations de table via le langage de manipulation de données GooglesQL (DML)
- Lot unifié et streaming à haut débit à l’aide du API d’écriture de stockage à travers des connecteurs Biglake tels que Spark
- Iceberg V2 Exportation instantanée et actualisation automatique sur chaque mutation de table
- Évolution du schéma pour mettre à jour les métadonnées de la colonne
- Optimisation automatique du stockage
- Voyage dans le temps pour l’accès aux données historiques
- Sécurité au niveau de la colonne et masquage des données
Voici un exemple de la façon de créer une table d’iceberg Biglake vide à l’aide de GooglesQL:
SQL
CREATE TABLE PROJECT_ID.DATASET_ID.my_iceberg_table (
name STRING,
id INT64
)
WITH CONNECTION PROJECT_ID.REGION.CONNECTION_ID
OPTIONS (
file_format="PARQUET"
table_format="ICEBERG"
storage_uri = 'gs://BUCKET/PATH');
Tu peux alors Importer des données dans les données en utilisant LOAD INTO
Pour importer des données à partir d’un fichier ou INSERT INTO
à partir d’une autre table.
SQL
# Load from file
LOAD DATA INTO PROJECT_ID.DATASET_ID.my_iceberg_table
FROM FILES (
uris=('gs://bucket/path/to/data'),
format="PARQUET");
# Load from table
INSERT INTO PROJECT_ID.DATASET_ID.my_iceberg_table
SELECT name, id
FROM PROJECT_ID.DATASET_ID.source_table
En plus d’une offre entièrement gérée, Apache Iceberg est également soutenu comme une lectureexterne table à BigQuery. Utilisez ceci pour pointer vers un chemin existant avec des fichiers de données.
SQL
CREATE OR REPLACE EXTERNAL TABLE PROJECT_ID.DATASET_ID.my_external_iceberg_table
WITH CONNECTION PROJECT_ID.REGION.CONNECTION_ID
OPTIONS (
format="ICEBERG",
uris =
('gs://BUCKET/PATH/TO/DATA'),
require_partition_filter = FALSE);
Apache Spark: le moteur pour Data Lakehouse Analytics
Alors qu’Apache Iceberg fournit la structure et la gestion de votre Data Lakehouse, Apache Spark est le moteur de traitement qui le donne vie. Spark est un puissant système de traitement à source ouverte et distribuée réputée pour sa vitesse, sa polyvalence et sa capacité à gérer diverses charges de travail de Big Data. Le traitement en mémoire de Spark, un écosystème robuste d’outils, y compris le traitement basé sur ML et SQL, et le support approfondi des iceberg en font un excellent choix.
Apache Spark est profondément intégré dans l’écosystème Google Cloud. Les avantages de l’utilisation d’Apache Spark sur Google Cloud comprennent:
- Accès à une véritable expérience d’étincelle sans serveur sans gestion de cluster en utilisant Google Cloud Server sans serveur pour Apache Spark.
- Expérience d’étincelle entièrement gérée avec la configuration et la gestion flexibles des grappes via Dataproc.
- Accélérer les travaux d’étincelles en utilisant le nouveau Lightning Engine pour Apache Spark Fonction d’aperçu.
- Configurez votre runtime avec les GPU et les pilotes préinstallés.
- Exécutez des travaux AI / ML à l’aide d’un ensemble robuste de bibliothèques disponibles par défaut dans Spark Runtime, y compris XGBOost, Pytorch et Transformers.
- Écrivez le code Pyspark directement à l’intérieur de BigQuery Studio via Colab Enterprise Notebooks ainsi que la génération de code Pyspark propulsée par Gemini.
- Connectez-vous facilement à vos données dans les tables natives de BigQuery, les tables d’iceberg Biglake, les tables externes et les GC
- Intégration avec Vertex AI pour MOPLOS de bout en bout
Iceberg + Spark: mieux ensemble
Ensemble, l’iceberg et l’étincelle forment une puissante combinaison pour la construction de perforants et les maishouses de données fiables. Spark peut tirer parti des métadonnées d’Iceberg pour optimiser les plans de requête, effectuer une élagage efficace des données et assurer la cohérence transactionnelle dans votre lac de données.
Vos tables iceberg et vos tables natives BigQuery sont accessibles via Biglake Metastore. Cela expose vos tables aux moteurs open source avec compatibilité BigQuery, y compris Spark.
Python
from pyspark.sql import SparkSession
# Create a spark session
spark = SparkSession.builder
.appName("BigLake Metastore Iceberg")
.config("spark.sql.catalog.CATALOG_NAME", "org.apache.iceberg.spark.SparkCatalog")
.config("spark.sql.catalog.CATALOG_NAME.catalog-impl", "org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog")
.config("spark.sql.catalog.CATALOG_NAME.gcp_project", "PROJECT_ID")
.config("spark.sql.catalog.CATALOG_NAME.gcp_location", "LOCATION")
.config("spark.sql.catalog.CATALOG_NAME.warehouse", "WAREHOUSE_DIRECTORY")
.getOrCreate()
spark.conf.set("viewsEnabled","true")
# Use the blms_catalog
spark.sql("USE `CATALOG_NAME`;")
spark.sql("USE NAMESPACE DATASET_NAME;")
# Configure spark for temp results
spark.sql("CREATE namespace if not exists MATERIALIZATION_NAMESPACE");
spark.conf.set("materializationDataset","MATERIALIZATION_NAMESPACE")
# List the tables in the dataset
df = spark.sql("SHOW TABLES;")
df.show();
# Query the tables
sql = """SELECT * FROM DATASET_NAME.TABLE_NAME"""
df = spark.read.format("bigquery").load(sql)
df.show()
sql = """SELECT * FROM DATASET_NAME.ICEBERG_TABLE_NAME"""
df = spark.read.format("bigquery").load(sql)
df.show()
sql = """SELECT * FROM DATASET_NAME.READONLY_ICEBERG_TABLE_NAME"""
df = spark.read.format("bigquery").load(sql)
df.show()
L’extension de la fonctionnalité de Biglake Metastore est le Catalogue d’iceberg REST (en avant-première) pour accéder aux données Iceberg avec tout moteur de traitement des données. Voici comment s’y connecter en utilisant Spark:
Python
import google.auth
from google.auth.transport.requests import Request
from google.oauth2 import service_account
import pyspark
from pyspark.context import SparkContext
from pyspark.sql import SparkSession
catalog = ""
spark = SparkSession.builder.appName("")
.config("spark.sql.defaultCatalog", catalog)
.config(f"spark.sql.catalog.{catalog}", "org.apache.iceberg.spark.SparkCatalog")
.config(f"spark.sql.catalog.{catalog}.type", "rest")
.config(f"spark.sql.catalog.{catalog}.uri",
"https://biglake.googleapis.com/iceberg/v1beta/restcatalog")
.config(f"spark.sql.catalog.{catalog}.warehouse", "gs://")
.config(f"spark.sql.catalog.{catalog}.token", "")
.config(f"spark.sql.catalog.{catalog}.oauth2-server-uri", "https://oauth2.googleapis.com/token") .config(f"spark.sql.catalog.{catalog}.header.x-goog-user-project", "") .config("spark.sql.extensions","org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions")
.config(f"spark.sql.catalog.{catalog}.io-impl","org.apache.iceberg.hadoop.HadoopFileIO") .config(f"spark.sql.catalog.{catalog}.rest-metrics-reporting-enabled", "false")
.getOrCreate()
Terminer la maison de lake
Google Cloud fournit une suite complète de services qui complétent Apache Iceberg et Apache Spark, vous permettant de créer, gérer et évoluer facilement votre Data Lakehouse tout en tirant parti de nombreuses technologies open-source que vous utilisez déjà:
- Dataplex Catalogue universel: Dataplex Universal Catalog fournit un tissu de données unifié pour gérer, surveiller et régir vos données sur les lacs de données, les entrepôts de données et les martes de données. Il s’intègre à Biglake Metastore, garantissant que les politiques de gouvernance sont systématiquement appliquées à travers vos tables iceberg et permettant des capacités telles que la recherche sémantique, la lignée de données et les vérifications de la qualité des données.
- Service géré Google Cloud pour Apache Kafka: Exécutez des clusters Kafka entièrement gérés sur Google Cloud, y compris Kafka Connect. Les flux de données peuvent être lus directement sur BigQuery, notamment sur des tables d’iceberg gérées avec des lectures de faible latence.
- Cloud Composer: Un service d’orchestration de flux de travail entièrement géré construit sur Apache Airflow.
- Vertex AI: Utilisez Vertex AI pour gérer l’expérience complète des OPS ML de bout en bout. Vous pouvez également utiliser Vertex AI Workbench Pour une expérience JupyterLab gérée pour vous connecter à vos instances Spark et DataProc sans serveur.
Conclusion
La combinaison d’Apache Iceberg et Apache Spark sur Google Cloud offre une solution convaincante pour construire des lis de lacs modernes et hautes performances. Iceberg fournit la cohérence transactionnelle, l’évolution du schéma et les optimisations de performances qui manquaient historiquement dans les lacs de données, tandis que Spark propose un moteur polyvalent et évolutif pour le traitement de ces grands ensembles de données.
Pour en savoir plus, consultez notre webinaire gratuit Le 8 juillet à 11h PST, où nous allons approfondir l’utilisation d’Apache Spark et des outils de support sur Google Cloud.
Auteur: Brad Miro, défenseur des développeurs seniors – Google