Partager via


Se connecter à Amazon S3

Cet article explique comment se connecter à AWS S3 à partir d’Azure Databricks.

Accéder aux compartiments S3 avec des URI et des clés AWS

Vous pouvez définir des propriétés Spark pour configurer des clés AWS pour accéder à S3.

Databricks recommande d’utiliser des étendues de secret pour stocker toutes les informations d’identification. Vous pouvez accorder aux utilisateurs, aux principaux de service et aux groupes de votre espace de travail un accès pour lire l’étendue du secret. Cela protège la clé AWS tout en permettant aux utilisateurs d’accéder à S3. Pour créer une étendue de secret, consultez Étendues de secret.

Les informations d’identification peuvent être étendues à un cluster ou à un notebook. Utilisez à la fois le contrôle d’accès au cluster et le contrôle d’accès aux notebooks pour protéger l’accès à S3. Consultez Autorisations de calcul et Collaborer à l’aide de notebooks Databricks.

Pour définir les propriétés Spark, utilisez l’extrait de code suivant dans la configuration Spark d’un cluster pour définir les clés AWS stockées dans des étendues de secrets en tant que 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 à partir de S3 à l’aide des 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 les 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 à l’aide de la syntaxe spark.hadoop.fs.s3a.bucket.<bucket-name>.<configuration-key>. Cela vous permet de configurer des compartiments avec différentes informations d’identification, points de terminaison, 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éconseillés pour le stockage des données et l’accès à celles-ci à partir d’Azure Databricks

Modèles de stockage déconseillés :

Important

  • Le système de fichiers S3A active la mise en cache par défaut et libère les ressources sur « FileSystem.close() ». Pour éviter d’autres threads à l’aide d’une référence au système de fichiers mis en cache incorrectement, 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 flux de sortie. Les applications héritées basées sur les versions Hadoop qui n’incluent pas HADOOP-13230 peuvent mal les interpréter comme des répertoires vides même s’il y a des fichiers à l’intérieur.