

# 릴리스 버전
<a name="notebooks-spark-release-versions"></a>

Amazon Athena for Apache Spark에서는 다음과 같은 릴리스 버전을 제공합니다.

## PySpark 엔진 버전 3
<a name="notebooks-spark-release-versions-pyspark-3"></a>

PySpark 버전 3에는 Apache Spark 버전 3.2.1이 포함되어 있습니다. 이 버전을 사용하면 Athena 콘솔 내 노트북에서 Spark 코드를 실행할 수 있습니다.

## Apache Spark 버전 3.5
<a name="notebooks-spark-release-versions-spark-35"></a>

Apache Spark 버전 3.5는 Amazon EMR 7.12 및 패키지 Apache Spark 버전 3.5.6에 기반합니다. 이 버전을 사용하면 Amazon SageMaker AI Unified Studio 노트북 또는 호환되는 기본 Spark 클라이언트에서 Spark 코드를 실행할 수 있습니다. 이 버전에서는 대화형 워크로드에 대한 향상된 경험을 제공하는 주요 기능을 추가합니다.
+ **보안 Spark Connect** - Spark Connect를 인증 및 권한 부여된 AWS 엔드포인트로 추가합니다.
+ **세션 수준 비용 어트리뷰션** - 사용자는 AWS Cost Explorer 또는 Cost and Usage Report에서 대화형 세션당 비용을 추적할 수 있습니다. 자세한 내용은 [세션 수준 비용 어트리뷰션](notebooks-spark-cost-attribution.md) 섹션을 참조하세요.
+ **고급 디버깅 기능** - API 및 노트북 모두에서 워크로드를 디버깅하기 위한 라이브 Spark UI 및 Spark 기록 서버 지원을 추가합니다. 자세한 내용은 [Spark UI에 액세스](notebooks-spark-ui-access.md#notebooks-spark-ui-access-methods) 섹션을 참조하세요.
+ **필터링되지 않은 액세스 지원** - 전체 테이블 권한이 있는 보호된 AWS Glue Data Catalog 카탈로그 테이블에 액세스합니다. 자세한 내용은 [Athena Spark 작업 그룹에서 Lake Formation 사용](notebooks-spark-lakeformation.md) 섹션을 참조하세요.

### Spark 기본 속성
<a name="notebooks-spark-release-versions-spark-35-default-properties"></a>

다음 표에서는 Athena SparkConnect 세션에 적용되는 Spark 속성 및 해당 기본값을 나열합니다.


| 키 | 기본값 | 설명 | 
| --- | --- | --- | 
|  `spark.app.id`  |  `<Athena SessionId>`  |  수정할 수 없습니다.  | 
|  `spark.app.name`  |  `default`  |    | 
|  `spark.driver.cores`  |  `4`  |  코어 드라이버가 사용하는 코어 수. 처음 시작 중에는 수정할 수 없습니다.  | 
|  `spark.driver.memory`  |  `10g`  |  각 드라이버가 사용하는 메모리의 양. 처음 시작 중에는 수정할 수 없습니다.  | 
|  `spark.driver.memoryOverhead`  |  `6g`  |  드라이버에서 실행되는 Python 워크로드 및 기타 프로세스에 할당된 메모리 오버헤드의 양. 처음 시작 중에는 수정할 수 없습니다.  | 
|  `spark.cortex.driver.disk`  |  `64g`  |  Spark 드라이버 디스크. 처음 시작 중에는 수정할 수 없습니다.  | 
|  `spark.executor.cores`  |  `4`  |  각 실행기에서 사용할 코어 수. 처음 시작 중에는 수정할 수 없습니다.  | 
|  `spark.executor.memory`  |  `10g`  |  각 드라이버가 사용하는 메모리의 양.  | 
|  `spark.executor.memoryOverhead`  |  `6g`  |  실행기에서 실행되는 Python 워크로드 및 기타 프로세스에 할당된 메모리 오버헤드의 양. 처음 시작 중에는 수정할 수 없습니다.  | 
|  `spark.cortex.executor.disk`  |  `64g`  |  Spark 실행기 디스크. 처음 시작 중에는 수정할 수 없습니다.  | 
|  `spark.cortex.executor.architecture`  |  `AARCH_64`  |  실행기의 아키텍처.  | 
|  `spark.driver.extraJavaOptions`  |  `-Djava.net.preferIPv6Addresses=false -XX:+IgnoreUnrecognizedVMOptions --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.base/jdk.internal.ref=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/sun.nio.cs=ALL-UNNAMED --add-opens=java.base/sun.security.action=ALL-UNNAMED --add-opens=java.base/sun.util.calendar=ALL-UNNAMED --add-opens=java.security.jgss/sun.security.krb5=ALL-UNNAMED -Djdk.reflect.useDirectMethodHandle=false`  |  Spark 드라이버에 대한 추가 Java 옵션. 처음 시작 중에는 수정할 수 없습니다.  | 
|  `spark.executor.extraJavaOptions`  |  `-Djava.net.preferIPv6Addresses=false -XX:+IgnoreUnrecognizedVMOptions --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.base/jdk.internal.ref=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/sun.nio.cs=ALL-UNNAMED --add-opens=java.base/sun.security.action=ALL-UNNAMED --add-opens=java.base/sun.util.calendar=ALL-UNNAMED --add-opens=java.security.jgss/sun.security.krb5=ALL-UNNAMED -Djdk.reflect.useDirectMethodHandle=false`  |  Spark 실행기에 대한 추가 Java 옵션. 처음 시작 중에는 수정할 수 없습니다.  | 
|  `spark.executor.instances`  |  `1`  |  할당할 Spark 실행기 컨테이너 수.  | 
|  `spark.dynamicAllocation.enabled`  |  `TRUE`  |  동적 리소스 할당을 켜는 옵션. 이 옵션은 워크로드에 따라 애플리케이션에 등록된 실행기 수를 스케일 업 또는 스케일 다운합니다.  | 
|  `spark.dynamicAllocation.minExecutors`  |  `0`  |  동적 할당을 켜는 경우 실행기 수의 하한.  | 
|  `spark.dynamicAllocation.maxExecutors`  |  `59`  |  동적 할당을 켜는 경우 실행기 수의 상한.  | 
|  `spark.dynamicAllocation.initialExecutors`  |  `1`  |  동적 할당을 켜는 경우 실행할 초기 실행기 수.  | 
|  `spark.dynamicAllocation.executorIdleTimeout`  |  `60s`  |  Spark에서 제거하기 전에 실행기가 유휴 상태를 유지할 수 있는 시간. 이는 동적 할당을 켜는 경우에만 적용됩니다.  | 
|  `spark.dynamicAllocation.shuffleTracking.enabled`  |  `TRUE`  |  DRA를 활성화하려면 셔플 추적을 활성화해야 합니다.  | 
|  `spark.dynamicAllocation.sustainedSchedulerBacklogTimeout`  |  `1s`  |  제한 시간은 Spark 스케줄러가 클러스터 관리자에게 새 실행기를 시작하라는 요청을 트리거하기 전에 보류 중인 태스크의 지속되는 백로그를 관찰해야 하는 기간을 정의합니다.  | 
|  `spark.sql.catalogImplementation`  |  `hive`  |    | 
|  `spark.hadoop.hive.metastore.client.factory.class`  |  `com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory`  |  AWS Glue 메타스토어 구현 클래스.  | 
|  `spark.hadoop.hive.metastore.glue.catalogid`  |  `<accountId>`  |  AWS Glue 카탈로그 accountId.  | 
|  `spark.sql.hive.metastore.sharedPrefixes`  |  `software.amazon.awssdk.services.dynamodb`  |  속성은 Hive 메타스토어 클라이언트 코드에 대해 생성된 격리된 ClassLoader가 아닌 Application ClassLoader에서 로드해야 하는 클래스에 대한 패키지 접두사의 쉼표로 구분된 목록을 지정합니다.  | 
|  `spark.hadoop.fs.s3.impl`  |  `org.apache.hadoop.fs.s3a.S3AFileSystem`  |  S3 클라이언트가 S3A를 사용하기 위한 구현을 정의합니다.  | 
|  `spark.hadoop.fs.s3a.impl`  |  `org.apache.hadoop.fs.s3a.S3AFileSystem`  |  S3A 클라이언트(S3A)에 대한 구현을 정의합니다.  | 
|  `spark.hadoop.fs.s3n.impl`  |  `org.apache.hadoop.fs.s3a.S3AFileSystem`  |  네이티브 S3 클라이언트(S3N)가 S3A를 사용하기 위한 구현을 정의합니다.  | 
|  `spark.hadoop.fs.AbstractFileSystem.s3.impl`  |  `org.apache.hadoop.fs.s3a.S3A`  |    | 
|  `spark.hadoop.fs.s3a.aws.credentials.provider`  |  `software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider`  |    | 
|  `spark.hadoop.fs.s3.customAWSCredentialsProvider`  |  `com.amazonaws.auth.DefaultAWSCredentialsProviderChain`  |    | 
|  `spark.hadoop.mapreduce.output.fs.optimized.committer.enabled`  |  `TRUE`  |  이 속성은 Amazon S3에 데이터를 쓸 때 Spark 작업에 대해 최적화된 커밋 프로토콜을 활성화합니다. true로 설정하면 Spark는 비용이 많이 드는 파일 이름 바꾸기 작업을 차단하므로 기본 Hadoop 커미터에 비해 더 빠르고 신뢰할 수 있는 원자성 쓰기를 지원합니다.  | 
|  `spark.hadoop.fs.s3a.endpoint.region`  |  `<REGION>`  |  이 구성은 S3A 클라이언트를 통해 액세스되는 Amazon S3 버킷에 대해 AWS 리전을 명시적으로 설정합니다.  | 
|  `spark.hadoop.fs.s3.getObject.initialSocketTimeoutMilliseconds`  |  `2000`  |  이는 소켓 연결 제한 시간(밀리초 단위)을 지정합니다.  | 
|  `spark.hadoop.fs.s3a.committer.magic.enabled`  |  `TRUE`  |  이를 통해 성능이 뛰어나지만 특수 경로에 대한 기본 클러스터 관리자의 지원에 의존하는 특정 커밋 프로토콜인 S3A 'Magic' 커미터가 활성화됩니다.  | 
|  `spark.hadoop.fs.s3a.committer.magic.track.commits.in.memory.enabled`  |  `TRUE`  |  Magic 커미터가 활성화된 경우에만 관련이 있으며, 태스크에서 커밋된 파일 목록을 임시 디스크 파일에 쓰는 대신 메모리에서 추적해야 하는지를 지정합니다.  | 
|  `spark.hadoop.fs.s3a.committer.name`  |  `magicv2`  |  이 설정은 사용할 특정 S3A 출력 커미터 알고리즘(예: directory, partitioned 또는 magic)을 명시적으로 선택합니다. 이름을 지정하여 임시 데이터를 관리하고, 태스크 실패를 처리하며, 대상 Amazon S3 경로에 대한 최종 원자성 커밋을 수행하는 전략을 선택합니다.  | 
|  `spark.hadoop.fs.s3.s3AccessGrants.enabled`  |  `FALSE`  |  속성은 Amazon S3A/EMRFS 파일 시스템 클라이언트를 통해 Amazon S3 데이터에 액세스할 때 Amazon S3 Access Grants에 대한 지원을 활성화합니다.  | 
|  `spark.hadoop.fs.s3.s3AccessGrants.fallbackToIAM`  |  `FALSE`  |  Amazon S3 Access Grants가 활성화된 경우 이 속성은 Access Grants 조회가 실패하거나 충분한 권한을 제공하지 않으면 Amazon S3 클라이언트가 기존 IAM 자격 증명으로 대체되는지를 제어합니다.  | 
|  `spark.pyspark.driver.python`  |  `/usr/bin/python3.11`  |  드라이버의 Python 경로.  | 
|  `spark.pyspark.python`  |  `/usr/bin/python3.11`  |  실행기의 Python 경로.  | 
|  `spark.python.use.daemon`  |  `TRUE`  |  이 구성은 Spark가 각 실행기에서 Python 작업자 대몬 프로세스를 활용하는지를 제어합니다. 활성화하면(기본값: true) 실행기는 모든 태스크에 대해 새 Python 인터프리터를 반복적으로 시작하고 초기화하는 오버헤드를 방지하기 위해 여러 태스크 사이에서 Python 작업자를 활성 상태로 유지하므로 PySpark 애플리케이션의 성능을 크게 개선합니다.  | 
|  `spark.sql.execution.arrow.pyspark.enabled`  |  `TRUE`  |  Apache Arrow를 사용하여 PySpark에서 JVM 및 Python 프로세스 간 데이터 전송을 최적화할 수 있습니다.  | 
|  `spark.sql.execution.arrow.pyspark.fallback.enabled`  |  `TRUE`  |  Apache Arrow 최적화를 사용하여 JVM 및 Python 사이에서 데이터를 전송하는 동안 오류가 발생할 때 Spark의 동작을 제어하는 구성 속성.  | 
|  `spark.sql.parquet.fs.optimized.committer.optimization-enabled`  |  `TRUE`  |  특정 파일 시스템, 특히 Amazon S3와 같은 클라우드 스토리지 시스템에 Parquet 파일을 쓸 때 Spark가 최적화된 파일 커미터를 사용하는지를 제어하는 구성 속성.  | 
|  `spark.sql.parquet.output.committer.class`  |  `com.amazon.emr.committer.EmrOptimizedSparkSqlParquetOutputCommitter`  |  Parquet 파일을 쓸 때 사용할 Hadoop OutputCommitter의 정규화된 클래스 이름을 지정하는 Spark 구성 속성.  | 
|  `spark.resourceManager.cleanupExpiredHost`  |  `TRUE`  |  이 속성은 드라이버가 삭제되거나 만료된 노드에서 실행 중인 실행기와 연결된 Spark 애플리케이션 리소스를 적극적으로 정리하는지를 제어합니다.  | 
|  `spark.blacklist.decommissioning.enabled`  |  `TRUE`  |  속성을 사용하면 Spark의 로직으로 클러스터 관리자가 현재 서비스 해제(유예 종료) 중인 실행기를 자동으로 블랙리스트에 등록할 수 있습니다. 그러면 스케줄러에서 종료에 임박한 실행기에 새 태스크를 보내지 못하므로 리소스 스케일 다운 중에 작업 안정성이 개선됩니다.  | 
|  `spark.blacklist.decommissioning.timeout`  |  `1h`  |  호스트를 블랙리스트에 등록하기 전에 Spark가 서비스 해제 실행기에서 태스크를 성공적으로 마이그레이션할 때까지 기다리는 최대 시간.  | 
|  `spark.stage.attempt.ignoreOnDecommissionFetchFailure`  |  `TRUE`  |  서비스 해제 실행기에서 셔플 데이터를 읽을 때 가져오기에 실패한 경우 Spark에 상황을 허용하고 전체 스테이지 시도에 실패하지 않도록 지시합니다. 가져오기 실패는 복구 가능한 상황으로 간주되며, Spark는 다른 위치에서 데이터를 다시 가져와서(재계산이 필요할 수 있음) 정상적인 종료 중에 엄격한 오류 처리보다 작업 완료를 우선합니다.  | 
|  `spark.decommissioning.timeout.threshold`  |  `20`  |  이 속성은 보통 내부적으로 또는 특정 클러스터 관리자 설정에서 호스트의 서비스 해제 프로세스에 대해 Spark가 예상하는 최대 총 기간을 정의하는 데 사용됩니다. 실제 서비스 해제 시간이 이 임계치를 초과하는 경우 Spark는 호스트를 블랙리스트에 등록하거나 강제 종료를 요청하는 등의 적극적인 조치를 취하여 리소스를 확보할 수 있습니다.  | 
|  `spark.files.fetchFailure.unRegisterOutputOnHost`  |  `TRUE`  |  태스크가 특정 호스트에서 셔플 또는 RDD 데이터를 가져오지 못하는 경우 이를 true로 설정하여 해당 호스트에서 실패한 애플리케이션과 연결된 모든 출력 블록의 등록을 취소하도록 Spark에 지시합니다. 그러면 향후 태스크가 신뢰할 수 없는 호스트에서 데이터를 가져오려고 시도하지 못하게 차단하여 Spark가 다른 곳에서 필요한 블록을 강제로 재계산하도록 하고 간헐적인 네트워크 문제에 대한 작업의 견고성을 강화할 수 있습니다.  | 