Présentation des volumes Unity Catalog
Les volumes sont des objets Unity Catalog qui permettent la gouvernance sur des jeux de données non tabulaires. Les volumes représentent un volume logique de stockage dans un emplacement de stockage d’objets cloud. Les volumes fournissent des fonctionnalités d’accès, de stockage, de gouvernance et d’organisation des fichiers.
Alors que les tables fournissent une gouvernance sur les jeux de données tabulaires, les volumes ajoutent une gouvernance aux jeux de données non tabulaires. Vous pouvez utiliser des volumes pour stocker, organiser et accéder à des fichiers dans n’importe quel format, y compris des données structurées, semi-structurées et non structurées.
Databricks recommande d’utiliser des volumes pour gérer l’accès à toutes les données non tabulaires. Comme les tables, les volumes peuvent être managés ou externes.
Important
Vous ne pouvez pas utiliser de volumes comme emplacement pour les tables. Les volumes sont destinés uniquement à l’accès aux données par chemin d’accès. Utilisez des tables lorsque vous souhaitez utiliser des données tabulaires dans Unity Catalog.
Les articles suivants fournissent plus d'informations sur l’utilisation des volumes :
- Créer et gérer des volumes.
- Gérer les fichiers dans les volumes.
- Explorer le stockage et rechercher des fichiers de données.
- Volumes managés vs externes.
- Quels sont les privilèges pour les volumes ?.
Remarque
Lorsque vous travaillez avec des volumes, vous devez utiliser un entrepôt SQL ou un cluster exécutant Databricks Runtime 13.3 LTS ou version ultérieure, sauf si vous utilisez des interfaces utilisateur Azure Databricks telles que Catalog Explorer.
Qu’est-ce qu’un volume managé ?
Un volume managé est un volume de stockage gouverné par Unity Catalog créé dans l’emplacement de stockage géré du schéma conteneur. Consultez Spécifier un emplacement de stockage managé dans Unity Catalog.
Les volumes managés permettent la création d’un stockage gouverné pour travailler avec des fichiers sans la surcharge des emplacements externes et des informations d’identification de stockage. Vous n’avez pas besoin de spécifier un emplacement lors de la création d’un volume managé, et tout l’accès aux fichiers pour les données des volumes managés passe par des chemins gérés par Unity Catalog.
Qu’est-ce qu’un volume externe ?
Un volume externe est un volume de stockage régi par Unity Catalog inscrit dans un répertoire dans un emplacement externe à l’aide des informations d’identification de stockage régies par Unity Catalog.
Unity Catalog ne gère pas le cycle de vie ou le layout des fichiers situés dans des volumes externes. Quand vous supprimez un volume externe, Unity Catalog ne supprime pas les données sous-jacentes.
Quel chemin d’accès est utilisé pour accéder aux fichiers d’un volume ?
Les volumes se trouvent au troisième niveau de l’espace de noms à trois niveaux Unity Catalog (catalog.schema.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 un stockage d’objets lié à un espace de travail Azure Databricks.
Le chemin d’accès aux fichiers dans les volumes utilise le format suivant :
/Volumes/<catalog>/<schema>/<volume>/<path>/<file-name>
Azure Databricks prend également en charge un schéma dbfs:/
facultatif lors de l’utilisation d’Apache Spark. Le chemin d’accès suivant fonctionne donc également :
dbfs:/Volumes/<catalog>/<schema>/<volume>/<path>/<file-name>
La séquence /<catalog>/<schema>/<volume>
dans le chemin d’accès correspond aux trois noms d’objets Unity Catalog associés au fichier. Ces éléments de chemin d’accès sont en lecture seule et ne peuvent pas être directement écrits par les utilisateurs, ce qui signifie qu’il n’est pas possible de créer ou de supprimer ces répertoires à l’aide d’opérations de système de fichiers. Ils sont automatiquement gérés et synchronisés avec les entités Unity Catalog correspondantes.
Remarque
Vous pouvez également accéder aux données dans des volumes externes en utilisant des URI de stockage cloud.
Chemins d’accès 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 d’accès sont également réservés en raison de fautes de frappe potentielles pour ces chemins d’accès à partir des API Apache Spark et dbutils
, y compris /volumes
, /Volume
, /volume
, qu’ils soient précédés ou non de dbfs:/
. Le chemin d’accès /dbfs/Volumes
est également réservé, mais ne peut pas être utilisé pour accéder aux volumes.
Les volumes sont uniquement pris en charge dans Databricks Runtime 13.3 LTS et versions ultérieures. Dans Databricks Runtime 12.2 LTS et ci-dessous, les opérations sur /Volumes
les chemins peuvent réussir, mais elles ne peuvent écrire que des données sur des disques de stockage éphémères attachés à des clusters de calcul plutôt que de conserver des données dans des volumes de catalogue Unity comme prévu.
Important
Si vous avez des données préexistantes stockées dans un chemin réservé à la racine DBFS, vous pouvez créer un ticket de support pour obtenir un accès temporaire à ces données et les déplacer vers un autre emplacement.
Limites
Vous devez utiliser le calcul compatible avec Unity Catalog pour interagir avec les volumes Unity Catalog. Les volumes ne prennent pas en charge toutes les charges de travail.
Remarque
Les volumes ne prennent pas en charge les commandes dbutils.fs
distribuées aux exécuteurs.
Les restrictions suivantes s’appliquent :
Dans Databricks Runtime 14.3 LTS et versions ultérieures :
- Sur les clusters d’utilisateurs uniques, vous ne pouvez pas accéder aux volumes à partir de threads et de sous-processus dans Scala.
Databricks Runtime 14.2 et versions antérieures :
- Sur les ordinateurs configurés en mode d’accès partagé, vous ne pouvez pas utiliser les UDF pour accéder aux volumes.
- Python et Scala ont tous deux accès à FUSE à partir du pilote, mais pas à partir des exécuteurs.
- Le code Scala qui effectue des opérations d’E/S peut être exécuté sur le pilote, mais pas sur les exécuteurs.
- Sur les ordinateurs configurés avec un mode d’accès utilisateur unique, il n’y a pas de prise en charge de FUSE en Scala, du code IO Scala accédant aux données à l’aide de chemins d’accès aux volumes, ou des UDF Scala. Les UDF Python sont pris en charge en mode d’accès par un seul utilisateur.
Sur toutes les versions de Databricks Runtime prises en charge :
Les fonctions définies par l’utilisateur Unity Catalog ne prennent pas en charge l’accès aux chemins d’accès aux fichiers de volume.
Vous ne pouvez pas accéder aux volumes à partir de RDD.
Vous ne pouvez pas utiliser spark-submit avec des fichiers JAR stockés dans un volume.
Vous ne pouvez pas définir de dépendances à d’autres bibliothèques sollicitées via des chemins d’accès de volume à l’intérieur d’un fichier wheel ou JAR.
Vous ne pouvez pas répertorier des objets Unity Catalog à l’aide du modèle
/Volumes/<catalog-name>
ou/Volumes/<catalog-name>/<schema-name>
. Vous devez utiliser un chemin d’accès complet qui inclut un nom de volume.Le point de terminaison DBFS pour l’API REST ne prend pas en charge les chemins d’accès aux volumes.
Vous ne pouvez pas spécifier de volumes comme destination pour la remise des journaux de cluster.
%sh mv
n’est pas pris en charge pour le déplacement de fichiers entre des volumes. Utilisez plutôtdbutils.fs.mv
ou%sh cp
.Vous ne pouvez pas créer un système de fichiers Hadoop personnalisé avec des volumes, ce qui signifie que les éléments suivants ne sont pas pris en charge :
import org.apache.hadoop.fs.Path val path = new Path("dbfs:/Volumes/main/default/test-volume/file.txt") val fs = path.getFileSystem(sc.hadoopConfiguration) fs.listStatus(path)
Les volumes ne sont pas disponibles dans les régions Azure Government ou les espaces de travail avec la conformité FedRAMP.
Vous devez utiliser le format de chemin d’accès avec un schéma
dbfs:/
dans le panneau de configuration de la bibliothèque Azure Data Factory. Par exemple :dbfs:/Volumes/<catalog-name>/<schema-name>/<volume-name>/file
.