다음을 통해 공유


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에서 데이터를 저장하고 액세스하기 위한 사용되지 않는 패턴

다음은 사용되지 않는 스토리지 패턴입니다.

Important

  • S3A 파일 시스템은 기본적으로 캐싱을 사용하도록 설정하고 'FileSystem.close()'에서 리소스를 해제합니다. 캐시된 파일 시스템에 대한 참조를 잘못 사용하는 다른 스레드를 방지하려면 'FileSystem.close()'를 명시적으로 사용하지 마세요.
  • S3A 파일 시스템은 출력 스트림을 닫을 때 디렉터리 마커를 제거하지 않습니다. HADOOP-13230을 포함하지 않는 Hadoop 버전을 기반으로 하는 레거시 애플리케이션은 내부에 파일이 있더라도 빈 디렉터리로 잘못 해석할 수 있습니다.