Se connecter à Amazon S3
Cet article explique comment se connecter à Amazon S3 (S3) depuis Databricks.
Accéder aux compartiments S3 avec des URI et des clés AWS
Vous pouvez définir les propriétés Spark pour configurer les clés AWS afin d’accéder à S3.
Databricks recommande d’utiliser des Secret Scopes pour stocker tous les identifiants. Vous pouvez accorder l’accès aux utilisateurs, aux Service Principal et aux groupes de votre Workspace pour lire le Secret Scope. Ceci protège la clé AWS tout en permettant aux utilisateurs d’accéder à S3. Pour créer un Secret Scope, consultez Gérer les Secret Scope.
Les informations d'identification peuvent être limitées à un cluster ou à un Notebook. Utilisez le contrôle d'accès aux clusters et le contrôle d'accès aux Notebooks ensemble pour protéger l'accès à S3. Consultez Autorisations de compute et Collaborer à l'aide des Notebooks Databricks.
Pour définir les propriétés Spark, utilisez l'extrait suivant dans la configuration Spark d'un cluster afin de définir les clés AWS stockées dans les secret scopes comme variables d'environnement:
AWS_SECRET_ACCESS_KEY={{secrets/scope/aws_secret_access_key}}
AWS_ACCESS_KEY_ID={{secrets/scope/aws_access_key_id}}
Vous pouvez ensuite lire depuis S3 en utilisant les commandes suivantes :
aws_bucket_name = "my-s3-bucket"
df = spark.read.load(f"s3a://{aws_bucket_name}/flowers/delta/")
display(df)
dbutils.fs.ls(f"s3a://{aws_bucket_name}/")
Accéder à S3 avec des options Hadoop open source
Databricks Runtime prend en charge la configuration du système de fichiers S3A à l'aide des options Hadoop open source. Vous pouvez configurer les propriétés globales et les propriétés par compartiment.
Configuration globale
# Global S3 configuration
spark.hadoop.fs.s3a.aws.credentials.provider <aws-credentials-provider-class>
spark.hadoop.fs.s3a.endpoint <aws-endpoint>
spark.hadoop.fs.s3a.server-side-encryption-algorithm SSE-KMS
Configuration par compartiment
Vous configurez les propriétés par compartiment en utilisant la syntaxe spark.hadoop.fs.s3a.bucket.<bucket-name>.<configuration-key>. Cela vous permet de configurer des compartiments avec différentes informations d'identification, Endpoint, et ainsi de suite.
Par exemple, en plus des paramètres S3 globaux, vous pouvez configurer chaque compartiment individuellement à l’aide des clés suivantes :
# Set up authentication and endpoint for a specific bucket
spark.hadoop.fs.s3a.bucket.<bucket-name>.aws.credentials.provider <aws-credentials-provider-class>
spark.hadoop.fs.s3a.bucket.<bucket-name>.endpoint <aws-endpoint>
# Configure a different KMS encryption key for a specific bucket
spark.hadoop.fs.s3a.bucket.<bucket-name>.server-side-encryption.key <aws-kms-encryption-key>
Modèles dépréciés pour le stockage et l'accès aux données depuis Databricks
Les modèles de stockage suivants sont obsolètes :
- Databricks ne recommande plus de monter des emplacements de données externes sur le système de fichiers Databricks. Consultez le montage du stockage d'objets cloud sur Databricks.
- Le système de fichiers S3A active la mise en cache par default et libère les ressources lors de 'FileSystem.close()'. Pour éviter que d'autres threads n'utilisent une référence au système de fichiers mis en cache de manière incorrecte, n'utilisez pas explicitement 'FileSystem.close()'.
- Le système de fichiers S3A ne supprime pas les marqueurs de répertoire lors de la fermeture d'un Stream de sortie. Les applications héritées basées sur des versions de Hadoop qui n'incluent pas HADOOP-13230 peuvent les interpréter à tort comme des répertoires vides, même s'ils contiennent des fichiers.