Aller au contenu principal

Que sont les volumes Unity Catalog ?

Les volumes sont des objets Unity Catalog qui permettent la gouvernance des jeux de données non tabulaires. Les volumes représentent un volume de stockage logique dans un emplacement de stockage d’objets cloud. Les volumes offrent des fonctionnalités pour l'accès, le stockage, la gouvernance et l'organisation des fichiers.

Alors que les tables régissent les données tabulaires, les volumes régissent les données non tabulaires de tout format, y compris les données structurées, semi-structurées ou non structurées.

Databricks recommande d’utiliser les volumes pour gouverner l’accès à toutes les données non tabulaires. Les volumes sont disponibles en deux types :

  • Volumes gérés : pour un stockage simple géré par Databricks.
  • Volumes externes : Pour ajouter de la gouvernance aux emplacements de stockage d'objets cloud existants.
remarque

Pour stocker vos propres fichiers à des fins personnelles ou exploratoires sans créer au préalable de catalogue, de schéma et de volume, vous pouvez utiliser Mes fichiers, un volume par utilisateur. Mes fichiers est en bêta. Consultez Stocker les fichiers dans Mes fichiers.

Présentation vidéo

Cette vidéo montre comment travailler avec les volumes Unity Catalog (3 minutes).

Cas d'utilisation des volumes

Cas d'utilisation pour les volumes :

  • Enregistrez les zones d'atterrissage pour les données brutes produites par les systèmes externes afin de prendre en charge leur traitement dans les premières étapes des pipelines ETL et d'autres activités de data engineering.
  • Enregistrez les emplacements de transfert pour l’ingestion. Par exemple, en utilisant Auto Loader, COPY INTO, ou des instructions CTAS (CREATE TABLE AS).
  • Fournir des emplacements de stockage de fichiers pour que les data scientists, les data analysts et les ingénieurs en Machine Learning les utilisent dans le cadre de leur analyse exploratoire des données et d'autres tâches de Data Science.
  • Donnez aux utilisateurs de Databricks accès aux fichiers arbitraires produits et déposés dans le stockage cloud par d'autres systèmes. Par exemple, de grandes collections de données non structurées (telles que les fichiers image, audio, vidéo et PDF) capturées par des systèmes de surveillance ou des appareils IoT, ou des fichiers de bibliothèque (fichiers JAR et Python wheel) exportés depuis des systèmes de gestion des dépendances locaux ou des pipelines CI/CD.
  • Stockez les données opérationnelles, telles que les fichiers de journalisation ou de point de contrôle.

Pour une démonstration de l'utilisation des volumes, consultez Simplifier la récupération de fichiers, d'images et de données avec les volumes Unity Catalog.

important

Vous ne pouvez pas enregistrer les fichiers dans des volumes en tant que tables dans Unity Catalog. Les volumes sont destinés uniquement à l'accès aux données basé sur le chemin. Utilisez des tables lorsque vous souhaitez travailler avec des données tabulaires dans Unity Catalog.

Volumes gérés versus volumes externes

Les volumes gérés et externes offrent des expériences quasi identiques lors de l'utilisation des outils, des interfaces utilisateur et des APIs Databricks. Les principales différences tiennent à l'emplacement de stockage, au cycle de vie et au contrôle :

Fonctionnalité

Volumes gérés

Volumes externes

Emplacement de stockage.

Créé à l'intérieur du stockage géré par UC pour le schéma.

Enregistré par rapport à un chemin d'accès existant de stockage d'objets cloud

Cycle de vie des données

UC gère le Layout et la suppression (rétention de 7 jours après suppression)

Les données restent dans le stockage cloud lorsque vous supprimez le volume.

Contrôle d'accès

Tous les accès passent par UC

UC régit l'accès, mais les outils externes peuvent utiliser des URI directs

Migration nécessaire ?

Non

Non, utilisez les chemins de stockage existants tels quels.

Cas d'utilisation type

Option la plus simple pour les charges de travail Databricks uniquement

Accès mixte à Databricks et aux systèmes externes

Fonctionnalité

Volumes gérés

Volumes externes

Emplacement de stockage.

Créé à l'intérieur du stockage géré par UC pour le schéma.

Enregistré par rapport à un chemin d'accès existant de stockage d'objets cloud

Cycle de vie des données

UC gère le Layout et la suppression (rétention de 7 jours après suppression)

Les données restent dans le stockage cloud lorsque vous supprimez le volume.

Contrôle d'accès

Tous les accès passent par UC

UC régit l'accès, mais les outils externes peuvent utiliser des URI directs

Migration nécessaire ?

Non

Non, utilisez les chemins de stockage existants tels quels.

Cas d'utilisation type

Option la plus simple pour les charges de travail Databricks uniquement

Accès mixte à Databricks et aux systèmes externes

Pourquoi utiliser des volumes gérés ?

Les volumes gérés présentent les avantages suivants :

  • Choix default pour les charges de travail Databricks.
  • Pas besoin de gérer manuellement les informations d'identification cloud ou les chemins de stockage.
  • L'option la plus simple pour créer rapidement des emplacements de stockage régis.

Pourquoi utiliser des volumes externes ?

Les volumes externes vous permettent d'ajouter la gouvernance des données Unity Catalog aux répertoires de stockage d'objets cloud existants. Certains cas d'utilisation pour les volumes externes incluent les suivants :

  • Ajouter de la gouvernance là où les données résident déjà, sans nécessiter de copie de données.
  • Gouvernance des fichiers produits par d'autres systèmes qui doivent être ingérés ou accédés par Databricks.
  • Gouverner les données produites par Databricks qui doivent être accédées directement depuis le stockage d'objets cloud par d'autres systèmes.

Databricks recommande d'utiliser des volumes externes pour stocker les fichiers de données non tabulaires qui sont lus ou écrits par des systèmes externes en plus de Databricks. Unity Catalog ne régit pas les lectures et écritures effectuées directement sur le stockage d'objets du cloud à partir de systèmes externes, vous devez donc appliquer une gouvernance supplémentaire en dehors de Databricks en utilisant l'une des approches suivantes :

  • Proposez des informations d'identification éphémères depuis Unity Catalog : configurez les moteurs externes pour demander des informations d'identification éphémères auprès d'Unity Catalog. Les informations d'identification distribuées héritent des privilèges Unity Catalog du principal demandeur, ce qui maintient Unity Catalog comme source unique de vérité pour l'autorisation. Voir approvisionnement d'informations d'identification Unity Catalog pour l'accès aux systèmes externes.
  • Configurez les contrôles d'accès cloud natif : utilisez les politiques IAM de votre fournisseur de cloud, les politiques de compartiment ou les listes de contrôle d'accès sur l'emplacement de stockage sous-jacent pour restreindre l'accès direct. Alignez ces contrôles avec les privilèges Unity Catalog que vous avez accordés sur le volume afin que l'accès au système externe corresponde à l'accès Unity Catalog. Pour plus d'informations sur la façon dont Unity Catalog se connecte au stockage cloud, consultez Connectez-vous au stockage d'objets cloud à l'aide de Unity Catalog.

Chemin d'accès aux fichiers dans un volume

Les volumes se situent au troisième niveau de l'espace de noms à trois niveaux du Unity Catalog (catalog.schema.volume) :

Diagramme du modèle d’objets Unity Catalog, axé sur le volume.

Le chemin d'accès aux volumes est le même, que vous utilisiez Apache Spark, SQL, Python, ou d'autres langages et bibliothèques. Cela diffère des modèles d'accès hérités pour les fichiers dans le stockage d'objets liés à un workspace Databricks.

Le chemin d'accès aux fichiers dans les volumes utilise le format suivant :

/Volumes/<catalog>/<schema>/<volume>/<path>/<file-name>

Databricks prend également en charge un schéma dbfs:/ facultatif lorsque vous travaillez avec Apache Spark, de sorte que le chemin suivant fonctionne également :

dbfs:/Volumes/<catalog>/<schema>/<volume>/<path>/<file-name>

La partie /<catalog>/<schema>/<volume> du chemin correspond aux trois noms d’objets Unity Catalog pour le fichier. Ces répertoires sont en lecture seule et gérés automatiquement par Unity Catalog. Vous ne pouvez pas les créer ou les supprimer avec des commandes de système de fichiers.

remarque

Vous pouvez également accéder aux données dans des volumes externes à l'aide d'URI de stockage cloud.

Chemins réservés pour les volumes

Les Volumes introduisent les chemins d'accès réservés suivants utilisés pour accéder aux volumes :

  • dbfs:/Volumes
  • /Volumes
remarque

Les chemins sont également réservés pour les fautes de frappe potentielles pour ces chemins provenant des APIs Apache Spark et dbutils, y compris /volumes, /Volume, /volume, qu'ils soient précédés ou non par dbfs:/. Le chemin /dbfs/Volumes est également réservé, mais il ne peut pas être utilisé pour accéder aux volumes.

Les volumes sont pris en charge uniquement sur Databricks Runtime 13,3 LTS et versions ultérieures. Dans Databricks Runtime 12.2 LTS et versions antérieures, les opérations sur les chemins /Volumes peuvent réussir, mais elles ne peuvent écrire des données que sur des disques de stockage éphémères attachés aux clusters de compute plutôt que de persister les données dans les volumes Unity Catalog comme prévu.

important

Si vous avez des données préexistantes stockées dans un chemin réservé sur la racine DBFS, déposez un ticket de support pour obtenir un accès temporaire à ces données afin de les déplacer vers un autre emplacement.

Exigences en matière de compute

Lorsque vous travaillez avec des volumes, vous devez utiliser un SQL Warehouse ou un cluster exécutant Databricks Runtime 13.3 LTS ou version ultérieure, sauf si vous utilisez des interfaces utilisateur Databricks telles que Catalog Explorer.

Pour des informations sur le stockage des points de contrôle DataFrame dans les volumes, consultez Points de contrôle DataFrame dans les volumes.

Limitations

Vous devez utiliser un compute compatible Unity Catalog pour interagir avec les volumes Unity Catalog.

Le tableau suivant décrit les limitations de volume d'Unity Catalog basées sur la version de Databricks Runtime :

Version de Databricks Runtime

Limitations

Toutes les versions de Databricks Runtime prises en charge

  • Les volumes ne prennent pas en charge les commandes dbutils.fs distribuées aux exécuteurs.
  • Les UDF de Unity Catalog ne prennent pas en charge l'accès aux chemins d'accès de fichiers de volume.
  • Vous ne pouvez pas accéder aux volumes à partir des RDD.
  • Vous ne pouvez pas utiliser la tâche spark-submit héritée avec des JARs stockés dans un volume. Utilisez plutôt la tâche JAR. Voir tâche JAR pour les Jobs.
  • Vous ne pouvez pas définir de dépendances vers d'autres bibliothèques accessibles via des chemins de volume à l'intérieur d'un fichier wheel ou JAR.
  • Vous ne pouvez pas lister les objets Unity Catalog en utilisant les modèles /Volumes/<catalog-name> ou /Volumes/<catalog-name>/<schema-name>. Vous devez utiliser un chemin d'accès entièrement qualifié qui inclut un nom de volume, sous la forme Volumes/<catalog-name>/<schema-name>/<volume-name>. Par exemple, dbutils.fs.ls("/Volumes/MyCatalog/MySchema/MyVolume")
  • %sh mv n'est pas pris en charge pour le déplacement de fichiers entre les volumes. Utilisez dbutils.fs.mv ou %sh cp à la place.
  • Vous ne pouvez pas créer de système de fichiers Hadoop personnalisé avec des volumes. Par exemple, l'utilisation de new Path("dbfs:/Volumes/main/default/test-volume/file.txt") pour créer un objet org.apache.hadoop.fs.path ne fonctionnera pas.

14.3 LTS et versions ultérieures

  • Sur les compute avec mode d'accès dédié (anciennement mode d'accès utilisateur unique), vous ne pouvez pas accéder aux volumes à partir des threads et des sous-processus en Scala.

14.2 et inférieur

  • Sur un compute configuré avec le mode d'accès standard (anciennement mode d'accès partagé), vous ne pouvez pas utiliser d'UDF pour accéder aux volumes.

    • Python ou Scala ont tous deux accès à FUSE depuis le driver, mais pas depuis les exécuteurs.
    • Le code Scala qui effectue des opérations d'E/S peut s'exécuter sur le Driver mais pas sur les exécuteurs.
  • Sur un compute configuré avec un mode d'accès dédié, il n'y a pas de support pour FUSE dans Scala, le code Scala IO accédant aux données via des chemins de volume, ou les UDFs Scala. Les UDFs Python sont prises en charge en mode d'accès dédié.

Version de Databricks Runtime

Limitations

Toutes les versions de Databricks Runtime prises en charge

  • Les volumes ne prennent pas en charge les commandes dbutils.fs distribuées aux exécuteurs.
  • Les UDF de Unity Catalog ne prennent pas en charge l'accès aux chemins d'accès de fichiers de volume.
  • Vous ne pouvez pas accéder aux volumes à partir des RDD.
  • Vous ne pouvez pas utiliser la tâche spark-submit héritée avec des JARs stockés dans un volume. Utilisez plutôt la tâche JAR. Voir tâche JAR pour les Jobs.
  • Vous ne pouvez pas définir de dépendances vers d'autres bibliothèques accessibles via des chemins de volume à l'intérieur d'un fichier wheel ou JAR.
  • Vous ne pouvez pas lister les objets Unity Catalog en utilisant les modèles /Volumes/<catalog-name> ou /Volumes/<catalog-name>/<schema-name>. Vous devez utiliser un chemin d'accès entièrement qualifié qui inclut un nom de volume, sous la forme Volumes/<catalog-name>/<schema-name>/<volume-name>. Par exemple, dbutils.fs.ls("/Volumes/MyCatalog/MySchema/MyVolume")
  • %sh mv n'est pas pris en charge pour le déplacement de fichiers entre les volumes. Utilisez dbutils.fs.mv ou %sh cp à la place.
  • Vous ne pouvez pas créer de système de fichiers Hadoop personnalisé avec des volumes. Par exemple, l'utilisation de new Path("dbfs:/Volumes/main/default/test-volume/file.txt") pour créer un objet org.apache.hadoop.fs.path ne fonctionnera pas.

14.3 LTS et versions ultérieures

  • Sur les compute avec mode d'accès dédié (anciennement mode d'accès utilisateur unique), vous ne pouvez pas accéder aux volumes à partir des threads et des sous-processus en Scala.

14.2 et inférieur

  • Sur un compute configuré avec le mode d'accès standard (anciennement mode d'accès partagé), vous ne pouvez pas utiliser d'UDF pour accéder aux volumes.

    • Python ou Scala ont tous deux accès à FUSE depuis le driver, mais pas depuis les exécuteurs.
    • Le code Scala qui effectue des opérations d'E/S peut s'exécuter sur le Driver mais pas sur les exécuteurs.
  • Sur un compute configuré avec un mode d'accès dédié, il n'y a pas de support pour FUSE dans Scala, le code Scala IO accédant aux données via des chemins de volume, ou les UDFs Scala. Les UDFs Python sont prises en charge en mode d'accès dédié.

Ressources supplémentaires

Les articles suivants fournissent plus d'informations sur l'utilisation des volumes :