Amazon S3에 연결
이 문서에서는 Azure Databricks에서 AWS S3에 연결하는 방법을 설명합니다.
URI 및 AWS 키를 사용하여 S3 버킷에 액세스
S3에 액세스하도록 AWS 키를 구성하도록 Spark 속성을 설정할 수 있습니다.
Databricks는 모든 자격 증명을 저장하기 위해 비밀 범위를 사용하는 것을 권장합니다. 작업 영역의 사용자, 서비스 주체, 그룹에 비밀 범위를 읽을 수 있는 액세스 권한을 부여할 수 있습니다. 이렇게 하면 사용자가 S3에 액세스할 수 있게 하면서 AWS 키가 보호됩니다. 비밀 범위를 만들려면 비밀 범위 관리를 참조 하세요.
자격 증명의 범위를 클러스터 또는 Notebook으로 지정할 수 있습니다. 클러스터 액세스 제어와 Notebook 액세스 제어를 함께 사용하여 S3에 대한 액세스를 보호합니다. 컴퓨팅 권한 및 Databricks Notebook을 사용하여 공동 작업을 참조하세요.
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}/")
오픈 소스 Hadoop 옵션을 사용하여 S3에 액세스
Databricks 런타임은 오픈 소스 Hadoop 옵션을 사용하여 S3A 파일 시스템 구성을 지원합니다. 전역 속성 및 버킷당 속성을 구성할 수 있습니다.
전역 구성
# 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에서 데이터를 저장하고 액세스하기 위한 사용되지 않는 패턴
다음은 사용되지 않는 스토리지 패턴입니다.
- Databricks에서는 더 이상 외부 데이터 위치를 Databricks 파일 시스템에 마운트하지 않는 것이 좋습니다. Azure Databricks에서 클라우드 개체 스토리지 탑재를 참조하세요.
Important
- S3A 파일 시스템은 기본적으로 캐싱을 사용하도록 설정하고 'FileSystem.close()'에서 리소스를 해제합니다. 캐시된 파일 시스템에 대한 참조를 잘못 사용하는 다른 스레드를 방지하려면 'FileSystem.close()'를 명시적으로 사용하지 마세요.
- S3A 파일 시스템은 출력 스트림을 닫을 때 디렉터리 마커를 제거하지 않습니다. HADOOP-13230을 포함하지 않는 Hadoop 버전을 기반으로 하는 레거시 애플리케이션은 내부에 파일이 있더라도 빈 디렉터리로 잘못 해석할 수 있습니다.