기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Spark 구성
구성 분류를 사용하여 Spark on Amazon EMR
Amazon EMR에서 Spark에 대한 구성 분류에는 다음이 포함됩니다.
-
spark
-maximizeResourceAllocation
속성을 true 또는 false로 설정합니다. true로 설정하면, Amazon EMR에서 클러스터 하드웨어 구성을 기반으로spark-defaults
속성을 자동으로 구성합니다. 자세한 내용은 maximizeResourceAllocation 사용하기 단원을 참조하십시오. -
spark-defaults
-spark-defaults.conf
파일에서 값을 설정합니다. 자세한 내용은 Spark 설명서에서 Spark configuration을 참조하세요. -
spark-env
-spark-env.sh
파일에서 값을 설정합니다. 자세한 내용은 Spark 설명서에서 Environment variables를 참조하세요. -
spark-hive-site
-hive-site.xml
에 Spark에 대한 값을 설정합니다. -
spark-log4j
- (Amazon EMR 릴리스 6.7.x 이하)log4j.properties
파일에서 값을 설정합니다. 자세한 내용은 Github에서 log4j.properties.template파일을 참조하세요. -
spark-log4j2
- (Amazon EMR 릴리스 6.8.0 이상)log4j2.properties
파일에서 값을 설정합니다. 자세한 내용은 Github에서 log4j.properties.template파일을 참조하세요. -
spark-metrics
-metrics.properties
파일에서 값을 설정합니다. 설정 및 자세한 내용은 Github의 metrics.properties.template파일 및 Spark 설명서의 Metrics (지표)를 참조하십시오.
참고
다른 플랫폼에서 Spark 워크로드를 Amazon EMR로 마이그레이션하는 경우 사용자 지정 구성을 추가하기 전에 Amazon EMR에서 설정한 Spark 기본값 을 사용하여 워크로드를 테스트하는 것이 좋습니다. 대부분의 고객은 기본 설정을 통해 성능을 개선할 수 있습니다.
주제
Amazon EMR에서 설정한 Spark 기본값
다음 테이블에서는 Amazon EMR이 애플리케이션에 영향을 미치는 spark-defaults
의 기본값을 설정하는 방법을 보여줍니다.
설정 | 설명 | 기본값 |
---|---|---|
spark.executor.memory |
실행기 프로세스당 사용할 메모리 양. 예시: |
이 설정은 클러스터의 코어 및 태스크 인스턴스 유형에 따라 결정됩니다. |
spark.executor.cores |
각 실행기에서 사용할 코어 수입니다. |
이 설정은 클러스터의 코어 및 태스크 인스턴스 유형에 따라 결정됩니다. |
spark.dynamicAllocation.enabled |
true인 경우 동적 리소스 할당을 사용하여 워크로드를 기반으로 애플리케이션에 등록된 실행기 수를 늘리거나 줄입니다. |
참고Amazon EMR에서 Spark Shuffle Service를 자동으로 구성합니다. |
spark.sql.hive.advancedPartitionPredicatePushdown.enabled |
true인 경우 Hive 메타스토어로의 고급 파티션 조건부 푸시다운이 활성화됩니다. |
true |
spark.sql.hive.stringLikePartitionPredicatePushdown.enabled |
참고Glue는 |
true |
Amazon EMR 6.1.0에서 Spark 가비지 수집 구성
spark.driver.extraJavaOptions
및 spark.executor.extraJavaOptions
에서 사용자 지정 가비지 수집 구성을 설정하면 Amazon EMR 6.1에서 드라이버 또는 실행기가 시작되지 않습니다. Amazon EMR 6.1.0과 가비지 수집 구성이 충돌하기 때문입니다. Amazon EMR 6.1.0의 경우 기본 가비지 수집 구성은 spark.driver.defaultJavaOptions
및 spark.executor.defaultJavaOptions
를 통해 설정됩니다. 이 구성은 Amazon EMR 6.1.0에만 적용됩니다. 로깅 구성과 같이 가비지 수집과 관련이 없는 JVM 옵션(-verbose:class
)은 계속 extraJavaOptions
를 통해 설정할 수 있습니다. 자세한 내용은 Spark application properties
maximizeResourceAllocation
사용하기
클러스터의 각 노드에서 가능한 최대 리소스를 사용하도록 실행기를 구성하려면 spark
구성 분류에서 maximizeResourceAllocation
을 true
로 설정합니다. maximizeResourceAllocation
은 Amazon EMR에만 해당됩니다. maximizeResourceAllocation
을 활성화하는 경우 Amazon EMR은 코어 인스턴스 그룹의 인스턴스에 있는 실행기에 대해 사용할 수 있는 최대 컴퓨팅 및 메모리 리소스를 계산합니다. 그런 다음 계산된 최대값을 기반으로 해당 spark-defaults
설정을 설정합니다.
Amazon EMR은 코어 인스턴스 플릿의 인스턴스 유형에 기반하여 실행기에 대해 사용할 수 있는 최대 컴퓨팅 및 메모리 리소스를 계산합니다. 각 인스턴스 플릿은 플릿 내에서 서로 다른 인스턴스 유형과 크기를 가질 수 있으므로 Amazon EMR이 사용하는 실행기 구성이 클러스터에 적합하지 않을 수 있습니다. 따라서 최대 리소스 할당을 사용할 때 기본 설정을 사용하지 않는 것이 좋습니다. 인스턴스 플릿 클러스터에 대한 사용자 지정 설정을 구성합니다.
참고
HBase와 같은 다른 분산 애플리케이션이 있는 클러스터에서는 maximizeResourceAllocation
옵션을 사용하지 않아야 합니다. Amazon EMR은 분산 애플리케이션에 사용자 지정 YARN 구성을 사용하므로 maximizeResourceAllocation
과 충돌하여 Spark 애플리케이션이 실패할 수 있습니다.
다음은 maximizeResourceAllocation
을 true
로 설정한 Spark 구성 분류 예제입니다.
[ { "Classification": "spark", "Properties": { "maximizeResourceAllocation": "true" } } ]
설정 | 설명 | 값 |
---|---|---|
spark.default.parallelism | 사용자가 설정하지 않은 경우 조인, reduceByKey 및 병렬 처리 같은 변환에서 반환한 RDD의 기본 파티션 수입니다. |
YARN 컨테이너에서 사용할 수 있는 CPU 코어의 2배수입니다. |
spark.driver.memory | SparkContext가 초기화된 경우와 같이 드라이버 프로세스에 사용할 메모리 양(예: 1g, 2g)입니다. |
클러스터의 인스턴스 유형을 기반으로 설정이 구성됩니다. 하지만 Spark 드라이버 애플리케이션을 프라이머리 또는 코어 인스턴스 중 하나에서(예를 들면 각각 YARN 클라이언트 및 클러스터 모드에서) 실행할 수 있으므로 설정이 이러한 두 인스턴스 그룹에서 더 작은 인스턴스 유형에 따라 설정됩니다. |
spark.executor.memory | 실행기 프로세스당 사용하는 메모리 양(예: 1g, 2g)입니다. |
클러스터의 코어 및 작업 인스턴스 유형을 기반으로 설정이 구성됩니다. |
spark.executor.cores | 각 실행기에서 사용할 코어 수입니다. | 클러스터의 코어 및 작업 인스턴스 유형을 기반으로 설정이 구성됩니다. |
spark.executor.instances | 실행기의 수입니다. |
클러스터의 코어 및 작업 인스턴스 유형을 기반으로 설정이 구성됩니다. |
노드 서비스 해제 동작 구성
Amazon EMR 릴리스 5.9.0 이상에서는 Amazon EMR의 Spark에는 수동 크기 조정 또는 자동 조정 정책 요청으로 인해 Spark가 노드 종료를 원활하게 처리하도록 돕는 일련의 기능이 포함되어 있습니다. Amazon EMR은 YARN의 폐기 메커니즘을 기반으로 하여 구축된 Spark에서 블랙리스팅 메커니즘을 구현합니다. 이 메커니즘은 폐기 중인 노드에서 새 작업을 예약하지 않는 동시에 이미 실행 중인 작업을 완료하는 데 도움이 됩니다. 또한 노드가 종료될 때 셔플 블록이 손실되는 경우, Spark 작업을 보다 빠르게 복구하는 데 도움이 되는 기능들도 있습니다. 재계산 프로세스는 더 빨리 트리거되고 단계 재시도 횟수를 줄이면서 더 빨리 재계산하도록 최적화되며, 셔플 블록 누락으로 인한 가져오기 실패로 인해 작업이 실패하는 것을 방지할 수 있습니다.
중요
스팟 인스턴스를 사용할 때 Spark 복원력을 높일 수 있도록 Amazon EMR 릴리스 버전 5.11.0에 spark.decommissioning.timeout.threshold
설정이 추가되었습니다. 이전 릴리스에서는 노드가 스팟 인스턴스를 사용하고 입찰 가격으로 인해 인스턴스가 종료될 때 Spark가 정상적으로 종료를 처리하지 못할 수 있습니다. 작업은 실패할 수 있으며 셔플 재계산 시 상당한 시간이 걸릴 수 있습니다. 이러한 이유로 스팟 인스턴스를 사용하는 경우, 5.11.0 이상의 릴리스를 사용하는 것이 좋습니다.
설정 | 설명 | 기본값 |
---|---|---|
|
|
|
|
|
|
|
Amazon EMR 릴리스 5.11.0 이상에서 사용할 수 있습니다. 초 단위로 지정됩니다. 노드가 서비스 해제 상태로 전환될 때 호스트가 이 값보다 작거나 같은 시간 안에 서비스 해제되는 경우, Amazon EMR은 노드가 서비스 해제 상태로 전환되기를 기다리지 않고 노드를 거부 목록에 등록할 뿐 아니라 호스트 상태를 정리합니다( |
|
|
|
|
|
|
true |
Spark ThriftServer 환경 변수
Spark에서 Hive Thrift Server Port 환경 변수 HIVE_SERVER2_THRIFT_PORT
를 10001로 설정합니다.
Spark 기본 설정 변경
spark-defaults
구성 분류 또는 spark
구성 분류의 maximizeResourceAllocation
설정을 사용하여 spark-defaults.conf
에서 기본값을 변경합니다.
다음 절차에는 CLI 또는 콘솔을 사용하여 설정을 수정하는 방법이 나와 있습니다.
CLI를 사용하여 spark.executor.memory가 2g로 설정된 클러스터를 생성하는 방법
-
Amazon S3에 저장된
myConfig.json
파일을 참조하는 다음 명령을 사용하여 Spark가 설치되고spark.executor.memory
가 2g로 설정된 클러스터를 생성합니다.aws emr create-cluster --release-label
emr-7.7.0
--applications Name=Spark \ --instance-type m5.xlarge --instance-count 2 --service-role EMR_DefaultRole_V2 --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole --configurations https://s3.amazonaws.com/amzn-s3-demo-bucket/myfolder/myConfig.json참고
가독성을 위해 Linux 줄 연속 문자(\)가 포함됩니다. Linux 명령에 사용하거나 제외할 수 있습니다. Windows에서는 제외시키거나 캐럿(^)으로 바꿉니다.
myConfig.json
:[ { "Classification": "spark-defaults", "Properties": { "spark.executor.memory": "2G" } } ]
콘솔을 사용하여 spark.executor.memory가 2ㅎ로 설정된 클러스터를 생성하는 방법
새 Amazon EMR 콘솔로 이동하고 측면 탐색에서 이전 콘솔로 전환을 선택합니다. 이전 콘솔로 전환할 때 예상되는 사항에 대한 자세한 내용은 이전 콘솔 사용을 참조하세요.
-
클러스터 생성 및 Go to advanced options(고급 옵션으로 이동)를 선택합니다.
-
Spark를 선택합니다.
-
소프트웨어 설정 편집에서 구성 입력을 선택한 채로 다음 구성을 입력합니다.
classification=spark-defaults,properties=[spark.executor.memory=2G]
-
다른 옵션을 선택하고 항목을 선택한 다음 클러스터 생성을 선택합니다.
maximizeResourceAllocation을 설정하려면
-
Spark가 설치된 클러스터를 생성하고 Amazon S3에
myConfig.json
저장된 파일 AWS CLI를 참조하여를 사용하여 true로maximizeResourceAllocation
설정합니다.aws emr create-cluster --release-label
emr-7.7.0
--applications Name=Spark \ --instance-type m5.xlarge --instance-count 2 --service-role EMR_DefaultRole_V2 --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole --configurations https://s3.amazonaws.com/amzn-s3-demo-bucket/myfolder/myConfig.json참고
가독성을 위해 Linux 줄 연속 문자(\)가 포함됩니다. Linux 명령에 사용하거나 제외할 수 있습니다. Windows에서는 제외시키거나 캐럿(^)으로 바꿉니다.
myConfig.json
:[ { "Classification": "spark", "Properties": { "maximizeResourceAllocation": "true" } } ]
참고
Amazon EMR 버전 5.21.0 이상에서는 클러스터 구성을 재정의할 수 있으며, 실행 중인 클러스터의 각 인스턴스 그룹에 대해 추가 구성 분류를 지정할 수 있습니다. Amazon EMR 콘솔, AWS Command Line Interface (AWS CLI) 또는 AWS SDK를 사용하여이 작업을 수행합니다. 자세한 내용은 실행 중 클러스터의 인스턴스 그룹에 대해 구성 제공을 참조하십시오.
Apache Log4j 1.x에서 Log4j 2.x로 마이그레이션
Apache Sparklog4j.properties
파일을 사용하여 Spark 프로세스에서 Log4j를 구성합니다. Apache Spark 릴리스 3.3.0 이상에서는 Apache Log4j 2.x 및 log4j2.properties
파일을 사용하여 Spark 프로세스에서 Log4j를 구성합니다.
6.8.0 미만의 Amazon EMR 릴리스를 사용하여 Apache Spark Log4j를 구성한 경우 Amazon EMR 6.8.0 이상으로 업그레이드하기 전에 먼저 레거시 spark-log4j
구성 분류를 제거하고 spark-log4j2
구성 분류 및 키 형식으로 마이그레이션해야 합니다. 기존 spark-log4j
분류로 인해 Amazon EMR 릴리스 6.8.0 이상에서 ValidationException
오류로 클러스터 생성이 실패합니다. Log4j 비호환성과 관련된 오류에 대해서는 요금이 부과되지 않지만 계속하려면 더 이상 사용되지 않는 spark-log4j
구성 분류를 제거해야 합니다.
Apache Log4j 1.x에서 Log4j 2.x로 마이그레이션하는 방법에 대한 자세한 내용은 Github에서 Apache Log4j Migration Guide
참고
Amazon EMR에서 Apache Spark는 Apache Log4j Migration Guidelog4j2.properties
파일을 사용합니다. 또한 Log4j 1.x 브리지 메서드를 사용하여 Log4j 2.x로 변환하는 방법도 권장하지 않습니다.