Aller au contenu principal

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 :

Python
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

ini
# 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 :

ini
# 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 :

important
  • 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.