Freigeben über


Herstellen einer Verbindung mit Amazon S3

In diesem Artikel wird erläutert, wie Sie über Azure Databricks eine Verbindung mit AWS S3 herstellen.

Zugreifen auf S3-Buckets mit URIs und AWS-Schlüsseln

Sie können Spark-Eigenschaften festlegen, um einen AWS-Schlüssel für den Zugriff auf S3 zu konfigurieren.

Databricks empfiehlt zum Speichern aller Anmeldeinformationen die Verwendung von Geheimnisbereichen. Sie können Benutzern, Dienstprinzipalen und Gruppen in Ihrem Arbeitsbereich Lesezugriff für den Geheimnisbereich einräumen. Dadurch wird der AWS-Schlüssel geschützt, während Benutzer auf S3 zugreifen können. Informationen zum Erstellen eines Geheimnisbereichs finden Sie unter Geheimnisbereiche.

Die Anmeldeinformationen können entweder auf einen Cluster oder ein Notebook festgelegt werden. Verwenden Sie sowohl die Clusterzugriffssteuerung wie auch die Notebookzugriffssteuerung gemeinsam, um den Zugriff auf S3 zu schützen. Siehe Compute-Berechtigungen und Zusammenarbeit mithilfe von Databricks-Notebooks.

Verwenden Sie zum Festlegen von Spark-Eigenschaften den folgenden Codeausschnitt in der Spark-Konfiguration eines Clusters, um den AWS-Schlüssel festzulegen, der in Geheimnisbereichen als Umgebungsvariable gespeichert ist:

AWS_SECRET_ACCESS_KEY={{secrets/scope/aws_secret_access_key}}
AWS_ACCESS_KEY_ID={{secrets/scope/aws_access_key_id}}

Dann können Sie mit den folgenden Befehlen aus S3 lesen:

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}/")

Zugreifen auf S3 mit Open-Source-Hadoop-Optionen

Databricks Runtime unterstützt die Konfiguration des S3A-Dateisystems mithilfe von Open-Source-Hadoop-Optionen. Sie können globale Eigenschaften und bucketspezifische Eigenschaften konfigurieren.

Globale Konfiguration

# 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

Bucketspezifische Konfiguration

Sie konfigurieren bucketspezifische Eigenschaften mithilfe der Syntax spark.hadoop.fs.s3a.bucket.<bucket-name>.<configuration-key>. Auf diese Weise können Sie Buckets mit unterschiedlichen Anmeldeinformationen, Endpunkten usw. einrichten.

Zusätzlich zu den globalen S3-Einstellungen können Sie beispielsweise jeden Bucket einzeln mithilfe der folgenden Schlüssel konfigurieren:

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

Veraltete Muster zum Speichern und Zugreifen auf Daten von Azure Databricks

Im Folgenden finden Sie veraltete Speichermuster:

Wichtig

  • Das S3A-Dateisystem ermöglicht das Zwischenspeichern standardmäßig und gibt Ressourcen auf „FileSystem.close()“ frei. Um zu vermeiden, dass andere Threads einen Verweis auf das zwischengespeicherte Dateisystem falsch verwenden, verwenden Sie nicht explizit „FileSystem.close()“.
  • Das S3A-Dateisystem entfernt beim Schließen eines Ausgabestreams keine Verzeichnismarker. Ältere Anwendungen, die auf Hadoop-Versionen basieren, die kein HADOOP-13230 enthalten, können diese als leere Verzeichnisse fehlinterpretieren, auch wenn Dateien vorhanden sind.