PVFS (Paimon Virtual Storage) permet d'accéder aux tables Paimon d'un catalogue Data Lake Formation (DLF) via des chemins de fichier standard, sans démarrer de moteur de calcul tel que Flink ou Spark.
PVFS associe les métadonnées et la structure de stockage d'une table Paimon à un chemin virtuel unifié. Utilisez ce chemin pour lire directement le contenu sous-jacent de la table (snapshots, fichiers de données et métadonnées) via le SDK Java ou le SDK Python. Le format du chemin est identique pour les deux SDK et tous les frameworks de calcul pris en charge.
pvfs://<catalog_name>/<database_name>/<table_name>/...
Pour plus d'informations sur la conception de PVFS, consultez Paimon Virtual Storage.
PVFS permet aux développeurs et aux ingénieurs de données d'explorer, de tester et de gérer les tables Paimon dans des environnements locaux ou scriptés, améliorant ainsi l'efficacité du développement et des opérations sur le data lake.
Prise en charge des SDK
SDK Java : Implémente l'interface Hadoop Distributed File System (HDFS). S'intègre à l'écosystème Hadoop, y compris Hive, Spark et Presto.
SDK Python : Basé sur Filesystem Spec (fsspec). Compatible avec les outils de données Python tels que Dask, Pandas et PyArrow.
Structure du chemin
Tous les chemins PVFS suivent un namespace à trois niveaux :
pvfs://<catalog_name>/<database_name>/<table_name>/[path]
|
Segment |
Description |
|
|
Nom du catalogue DLF |
|
|
Base de données au sein du catalogue |
|
|
Table Paimon à accéder |
|
|
Facultatif. Chemin relatif vers un fichier ou un répertoire spécifique au sein de la table |
Comportement lors du listage
Lorsque vous listez le contenu d'un chemin PVFS, la réponse reflète la hiérarchie du namespace virtuel :
pvfs://<catalog_name>/— renvoie toutes les bases de données du catalogue sous forme de chemins virtuelspvfs://<catalog_name>/<database_name>/— renvoie toutes les tables de la base de données sous forme de chemins virtuelspvfs://<catalog_name>/<database_name>/<table_name>/— renvoie les fichiers et répertoires réels de la table
Tous les chemins listés sont des chemins virtuels. Les opérations de lecture et d'écriture résolvent automatiquement le chemin virtuel vers l'emplacement de stockage réel de la table.
SDK Java
Le SDK Java implémente l'interface HDFS, rendant PVFS accessible depuis n'importe quel framework compatible Hadoop.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Java 8 ou version ultérieure
Un catalogue DLF contenant au moins une table Paimon
Un jeton d'accès DLF valide
Configuration à l'aide de l'API Hadoop FileSystem
Définissez les propriétés suivantes dans votre objet Configuration ou dans le fichier core-site.xml :
|
Propriété |
Valeur |
Description |
|
|
|
Classe d'implémentation du système de fichiers PVFS |
|
|
URL de l'endpoint DLF |
Endpoint du service DLF |
Exemple : lecture d'un fichier à l'aide de l'API Hadoop FileSystem
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
Configuration conf = new Configuration();
conf.set("fs.pvfs.impl", "org.apache.paimon.vfs.hadoop.PaimonVirtualFileSystem");
// Replace <dlf-endpoint> with the actual DLF service endpoint
conf.set("fs.pvfs.uri", "<dlf-endpoint>");
Path path = new Path("pvfs://<catalog_name>/<database_name>/<table_name>/");
FileSystem fs = path.getFileSystem(conf);
// List files in the table
fs.listStatus(path);
**Exemple : configuration dans core-site.xml pour un accès à l'échelle du cluster**
<configuration>
<property>
<name>fs.pvfs.impl</name>
<value>org.apache.paimon.vfs.hadoop.PaimonVirtualFileSystem</value>
</property>
<property>
<name>fs.pvfs.uri</name>
<!-- Replace with the actual DLF service endpoint -->
<value><dlf-endpoint></value>
</property>
</configuration>
Après avoir ajouté ces propriétés, des frameworks tels que Hive, Spark et Presto peuvent accéder aux chemins PVFS sans configuration supplémentaire.
Exemple : interrogation d'une table avec Spark SQL
import org.apache.spark.sql.SparkSession
val spark = SparkSession.builder()
.config("spark.hadoop.fs.pvfs.impl",
"org.apache.paimon.vfs.hadoop.PaimonVirtualFileSystem")
// Replace <dlf-endpoint> with the actual DLF service endpoint
.config("spark.hadoop.fs.pvfs.uri", "<dlf-endpoint>")
.getOrCreate()
spark.sql("""
CREATE TEMPORARY VIEW my_table
USING parquet
OPTIONS (path 'pvfs://<catalog_name>/<database_name>/<table_name>/')
""")
spark.sql("SELECT * FROM my_table LIMIT 10").show()
SDK Python
Le SDK Python implémente l'interface fsspec, vous permettant d'utiliser PVFS avec n'importe quelle bibliothèque Python compatible fsspec.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Python 3.7 ou version ultérieure
pypaimoninstalléUn catalogue DLF contenant au moins une table Paimon
Un jeton d'accès DLF valide
Initialisation du système de fichiers
Transmettez les options suivantes lors de la création d'une instance PaimonVirtualFileSystem :
|
Paramètre |
Type |
Obligatoire |
Description |
|
|
str |
Oui |
URL de l'endpoint du service DLF |
|
|
str |
Oui |
Type de fournisseur d'authentification |
|
|
str |
Oui |
Jeton d'accès DLF |
import pypaimon
options = {
"uri": "<dlf-endpoint>", # Replace with the DLF service endpoint
"token.provider": "dlf",
"token": "<your-dlf-token>", # Replace with a valid DLF access token
}
fs = pypaimon.PaimonVirtualFileSystem(options)
Lister et explorer les tables
# List all tables in a database
fs.ls("pvfs://<catalog_name>/<database_name>/")
# List files in a specific table
fs.ls("pvfs://<catalog_name>/<database_name>/<table_name>/")
Lecture avec PyArrow
import pypaimon
import pyarrow.parquet as pq
fs = pypaimon.PaimonVirtualFileSystem(options)
# Read a Parquet file from a Paimon table
dataset = pq.ParquetDataset(
"pvfs://<catalog_name>/<database_name>/<table_name>/",
filesystem=fs
)
table = dataset.read()
df = table.to_pandas()
print(df.head())
Lecture avec Pandas
import pypaimon
import pandas as pd
fs = pypaimon.PaimonVirtualFileSystem(options)
# Read a CSV file from a Paimon table
with fs.open("pvfs://<catalog_name>/<database_name>/<table_name>/data.csv") as f:
df = pd.read_csv(f)
print(df.head())
Contrôle d'accès
PVFS applique les politiques de contrôle d'accès unifiées de DLF. Les autorisations sont gérées au niveau de la table : les utilisateurs doivent disposer des autorisations de lecture ou d'écriture appropriées sur une table DLF pour y accéder via un chemin PVFS. Pour plus d'informations, consultez Configurer les autorisations.