반응형
Spark Job 결과로 100GB의 대용량 데이터를 효율적으로 관리하기 위해 적절한 파티셔닝과 리소스 설정은 성능 최적화와 클러스터 자원의 효율적인 사용에 필수적입니다. 아래와 같은 방법으로 설정할 수 있습니다.
Partition 설정
- 적절한 파티션 수 설정: 일반적으로 파티션의 크기가 약 100~200MB가 되도록 설정하는 것이 좋습니다. 이를 위해 데이터 크기를 파티션 크기로 나눈 값만큼 파티션을 생성하는 것이 권장됩니다. 예를 들어, 100GB의 데이터를 128MB로 나눈다면 약 800개의 파티션이 필요합니다.
- 코어와 메모리의 조화 고려: 각 Executor가 동시에 처리할 수 있는 코어 수에 맞춰 파티션 수를 조정합니다. 너무 많은 파티션은 오버헤드를 증가시키고, 너무 적은 파티션은 각 코어의 효율을 떨어뜨릴 수 있습니다.
- .repartition() 및 .coalesce() 사용: 데이터가 불균형하게 분포되어 있다면 repartition()을 사용하여 데이터를 다시 파티셔닝하고, 필요 이상으로 많은 파티션이 생성된 경우 coalesce()를 통해 파티션 수를 줄이는 것이 좋습니다.
리소스 설정
- Executor 및 Core 설정
- Core 수: 일반적으로 하나의 Executor가 3-5개의 Core를 사용하도록 설정하는 것이 좋습니다. 너무 많은 Core를 할당하면 Executor의 메모리 사용량이 급격히 증가할 수 있습니다.
- Executor 메모리 설정: 각 Executor에 할당하는 메모리(spark.executor.memory)를 충분히 할당하여 메모리 부족으로 인한 디스크 I/O가 발생하지 않도록 합니다.
- Dynamic Allocation 사용: Spark의 Dynamic Allocation 기능을 사용하면 작업에 따라 Executor 수를 자동으로 조정할 수 있어 리소스를 유연하게 관리할 수 있습니다.
- Shuffle Partitions 설정: spark.sql.shuffle.partitions의 기본값이 너무 큰 경우 성능 저하를 초래할 수 있습니다. 100GB 정도의 데이터라면 이 값을 적절히 줄여주는 것이 좋습니다.
Data Skew 및 Garbage Collection 최적화
- Data Skew 방지: 특정 파티션에 데이터가 집중되지 않도록 키의 분포를 모니터링하고, salting과 같은 기법을 사용해 데이터 불균형을 조정할 수 있습니다.
- Garbage Collection 최적화: 메모리 할당 크기와 GC 설정(spark.executor.extraJavaOptions)을 조정하여 GC 오버헤드를 줄이는 것도 중요합니다.
이 설정을 통해 Spark Job의 실행 성능을 최적화하고, 리소스를 효율적으로 활용할 수 있습니다.
반응형
'IT > Spark' 카테고리의 다른 글
Spark Submit (0) | 2025.02.07 |
---|---|
Apache Spark 클러스터에서 Python 처리 (0) | 2025.02.07 |
PySpark (0) | 2025.02.07 |
Spark 2.4 / 3.0 비교 (0) | 2025.02.04 |
Spark 공부 관련 유투브 (0) | 2025.02.04 |