Apache Hudi est un format de stockage pour data lake qui prend en charge la mise à jour, la suppression et la consommation des données modifiées sur les systèmes de fichiers Hadoop.
Types de table Hudi
Hudi prend en charge les deux types de table suivants :
-
Copy On Write
Stocke les données au format Parquet. Les mises à jour d'une table Copy On Write nécessitent une réécriture complète.
-
Merge On Read
Stocke les données de base dans un format colonnaire (Parquet) et les données incrémentielles dans un format orienté ligne (Avro). Une opération de compaction fusionne périodiquement les données incrémentielles dans les fichiers colonnaires selon une politique configurable.
Le tableau suivant compare ces deux types de table.
|
Compromis |
Copy On Write |
Merge On Read |
|
Latence des données |
Élevée |
Faible |
|
Latence des requêtes |
Faible |
Élevée |
|
Coût de mise à jour (E/S) |
Élevé (réécrit l'intégralité du fichier Parquet) |
Faible (ajoute aux journaux delta) |
|
Taille des fichiers Parquet |
Petite (surcharge élevée des E/S de mise à jour) |
Grande (faible surcharge de mise à jour) |
|
Amplification en écriture |
Élevée (forte amplification en écriture) |
Faible (dépend de la politique de fusion) |
Types de requête Hudi
Hudi prend en charge les trois types de requête suivants :
-
Snapshot Queries
Interroge les données à partir du dernier snapshot de validation. Pour une table Merge On Read, une requête snapshot fusionne les données colonnaires de base avec les données de journal en temps réel. Pour une table Copy On Write, une requête snapshot renvoie la dernière version des données Parquet.
Les tables Copy On Write et Merge On Read prennent toutes deux en charge ce type de requête.
-
Incremental Queries
Interroge les données écrites après une validation spécifique.
Les tables Copy On Write et Merge On Read prennent toutes deux en charge ce type de requête.
-
Read Optimized Queries
Renvoie les données compactées les plus récentes. Pour les tables Merge On Read, ce type de requête réduit la latence en ignorant la fusion en ligne des données de journal, au détriment de la fraîcheur des données.
Le tableau suivant compare les types de requête.
|
Compromis |
Snapshot Queries |
Read Optimized Queries |
|
Latence des données |
Faible |
Élevée |
|
Latence des requêtes |
Élevée pour les tables Merge On Read |
Faible |
Scénarios
-
Ingestion de données en quasi-temps réel
Hudi prend en charge les opérations d'insertion, de mise à jour et de suppression. Ingérez les données de journal provenant de services tels que Kafka et Simple Log Service (SLS) dans Hudi en temps réel. Hudi prend également en charge la synchronisation en temps réel des données modifiées issues des journaux binaires de base de données (binlog).
Hudi optimise les petits fichiers générés lors des écritures de données, ce qui le rend plus efficace sur HDFS que les formats de fichier traditionnels.
-
Analyse des données en quasi-temps réel
Hudi fonctionne avec plusieurs moteurs d'analyse, notamment Hive, Spark, Presto et Impala. En tant que format de fichier, Hudi ne nécessite aucun processus de service supplémentaire, ce qui le rend léger.
-
Traitement incrémentiel des données
Hudi prend en charge les requêtes incrémentielles, qui vous permettent d'utiliser Spark Streaming pour récupérer les données modifiées après une validation spécifique et consommer les données changées depuis HDFS.