Connettersi ad Amazon S3
Questo articolo illustra come connettersi ad AWS S3 da Azure Databricks.
Accedere ai bucket S3 con URI e chiavi AWS
È possibile impostare le proprietà di Spark per configurare le chiavi AWS per accedere a S3.
Databricks consiglia di usare ambiti segreti per l'archiviazione di tutte le credenziali. È possibile concedere agli utenti, alle entità servizio e ai gruppi nell'area di lavoro l'accesso per leggere l'ambito del segreto. In questo modo si protegge la chiave AWS consentendo agli utenti di accedere a S3. Per creare un ambito segreto, vedere Gestire gli ambiti dei segreti.
È possibile definire l'ambito delle credenziali sia in un cluster che in un Notebook. Usare sia il controllo di accesso del cluster che il controllo di accesso dei notebook insieme per proteggere l'accesso a S3. Vedere Autorizzazioni di calcolo e Collaborazione con i Notebook di Databricks.
Per impostare le proprietà di Spark, usare il frammento di codice seguente nella configurazione di Spark di un cluster per impostare le chiavi AWS archiviate negli ambiti segreti come variabili di ambiente:
AWS_SECRET_ACCESS_KEY={{secrets/scope/aws_secret_access_key}}
AWS_ACCESS_KEY_ID={{secrets/scope/aws_access_key_id}}
È quindi possibile leggere da S3 usando i comandi seguenti:
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}/")
Accedere a S3 con opzioni Hadoop open source
Databricks Runtime supporta la configurazione del file system S3A usando le opzioni Hadoop open source. È possibile configurare le proprietà globali e le proprietà per bucket.
Configurazione 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
Configurazione per-bucket
Le proprietà per bucket vengono configurate usando la sintassi spark.hadoop.fs.s3a.bucket.<bucket-name>.<configuration-key>
. In questo modo è possibile configurare bucket con credenziali, endpoint e così via diversi.
Ad esempio, oltre alle impostazioni globali di S3, è possibile configurare ogni bucket singolarmente usando le chiavi seguenti:
# 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>
Modelli deprecati per l'archiviazione e l'accesso ai dati da Azure Databricks
Di seguito sono riportati i criteri di archiviazione deprecati:
- Databricks non consiglia più di montare posizioni di dati esterni nel file system di Databricks. Vedere Montaggio dell'archiviazione di oggetti cloud in Azure Databricks.
Importante
- Il file system S3A abilita la memorizzazione nella cache per impostazione predefinita e rilascia le risorse in 'FileSystem.close()'. Per evitare che altri thread usino un riferimento al file system memorizzato nella cache in modo non corretto, non usare in modo esplicito 'FileSystem.close().
- Il file system S3A non rimuove i marcatori di directory quando si chiude un flusso di output. Le applicazioni legacy basate su versioni hadoop che non includono HADOOP-13230 possono essere interpretate erroneamente come directory vuote anche se sono presenti file all'interno.