Conectar-se ao Amazon S3
Este artigo explica como se conectar ao AWS S3 do Azure Databricks.
Acessar buckets S3 com URIs e chaves do AWS
Você pode definir propriedades do Spark para configurar uma chave AWS para acessar o S3.
O Databricks recomenda o uso de escopos de segredos para armazenar todas as credenciais. Você pode conceder aos usuários, entidades de serviço e grupos em seu workspace acesso para ler o escopo do segredo. Isso protege a chave AWS, permitindo que os usuários acessem o S3. Para criar um escopo secreto, consulte Gerenciar escopos secretos.
As credenciais podem ser definidas como um cluster ou um notebook. Use o controle de acesso do cluster e o controle de acesso do notebook juntos para proteger o acesso ao S3. Consulte Permissões de computação e Colaborar usando blocos de anotações do Databricks.
Para definir as propriedades do Spark, use o seguinte snippet na configuração do Spark em um cluster para definir as chaves AWS armazenas em escopos de segredo como variáveis de ambiente:
AWS_SECRET_ACCESS_KEY={{secrets/scope/aws_secret_access_key}}
AWS_ACCESS_KEY_ID={{secrets/scope/aws_access_key_id}}
Em seguida, você pode ler no S3 usando os seguintes comandos:
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}/")
Acessar o S3 com opções do Hadoop de código aberto
O Databricks Runtime dá suporte à configuração do sistema de arquivos S3A usando opções do Hadoop de código aberto. Você pode configurar propriedades globais e propriedades por bucket.
Configuração global
# 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
Configuração por bucket
Você configura propriedades por bucket usando a sintaxe spark.hadoop.fs.s3a.bucket.<bucket-name>.<configuration-key>
. Isso permite que você configure buckets com credenciais diferentes, pontos de extremidade e assim por diante.
Por exemplo, além das configurações globais do S3, você pode configurar cada bucket individualmente usando as seguintes chaves:
# 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>
Padrões preteridos para armazenar e acessar dados do Azure Databricks
Veja a seguir os padrões de armazenamento preteridos:
- O Databricks não recomenda mais a montagem de locais de dados externos no Sistema de Arquivos do Databricks. Confira Montar o repositório de objetos de nuvem no Azure Databricks.
Importante
- O sistema de arquivos S3A habilita o cache por padrão e libera recursos em 'FileSystem.close()'. Para evitar outros threads usando uma referência ao sistema de arquivos armazenados em cache incorretamente, não use explicitamente o 'FileSystem.close().
- O sistema de arquivos S3A não remove marcadores de diretório ao fechar um fluxo de saída. Aplicativos herdados baseados nas versões do Hadoop que não incluem HADOOP-13230 podem interpretá-los incorretamente como diretórios vazios, mesmo que haja arquivos neles.