Подключение в Amazon S3

В этой статье объясняется, как подключиться к AWS S3 из Azure Databricks.

Доступ к контейнерам S3 с помощью URI и ключей AWS

Свойства Spark можно задать для настройки ключей AWS для доступа к S3.

Для хранения всех учетных данных Databricks рекомендует использовать области секретов. Вы можете предоставить пользователям, субъектам-службам и группам в рабочей области доступ для чтения области секрета. Это защищает ключ AWS, позволяя пользователям получать доступ к S3. Сведения о создании секрета область см. в разделе "Секретные область".

Учетные данные можно область в кластер или записную книжку. Для защиты доступа к S3 используйте управление доступом к кластеру и управление доступом к записной книжке. Ознакомьтесь с разрешениями вычислений и совместной работой с помощью записных книжек Databricks.

Чтобы задать свойства Spark, используйте следующий фрагмент кода в конфигурации Spark кластера, чтобы задать ключи AWS, хранящиеся в секретных область в качестве переменных среды:

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

Затем вы можете прочитать из S3 с помощью следующих команд:

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

Доступ к S3 с параметрами Hadoop с открытым исходным кодом

Databricks Runtime поддерживает настройку файловой системы S3A с помощью параметров Hadoop с открытым исходным кодом. Глобальные свойства и свойства для каждого контейнера можно настроить.

Глобальная конфигурация

# 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

Конфигурация для каждого контейнера

Свойства для каждого контейнера настраивают с помощью синтаксиса spark.hadoop.fs.s3a.bucket.<bucket-name>.<configuration-key>. Это позволяет настроить контейнеры с разными учетными данными, конечными точками и т. д.

Например, помимо глобальных параметров S3 можно настроить каждый контейнер по отдельности с помощью следующих ключей:

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

Нерекомендуемые шаблоны для хранения и доступа к данным из Azure Databricks

Ниже приведены устаревшие шаблоны хранения:

Внимание

  • Файловая система S3A включает кэширование по умолчанию и освобождает ресурсы в FileSystem.close(). Чтобы избежать других потоков, использующих ссылку на кэшированную файловую систему неправильно, не используйте файл FileSystem.close().
  • Файловая система S3A не удаляет маркеры каталогов при закрытии выходного потока. Устаревшие приложения, основанные на версиях Hadoop, которые не включают HADOOP-13230 , могут неправильно использовать их как пустые каталоги, даже если внутри есть файлы.