티스토리 뷰

공부

[spark] shuffle

승가비 2022. 8. 5. 20:39
728x90

동일한 key 를 가진 튜플 데이터가 전부 같은 파티션, 재조정 작업 shuffle

https://wooono.tistory.com/48

 

[Spark] Shuffle 이란?

Spark Shuffle 이란? Shuffle 은 Spark 에서 데이터를 재분배하는 방법이며, 효율적인 Spark Application 을 개발하기 위해 상당히 중요한 개념입니다. Background Shuffle 을 이해하기 위해서는, reduceByKey..

wooono.tistory.com

https://velog.io/@anjinwoong/Spark-%ED%8C%8C%ED%8B%B0%EC%85%98%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C

 

[Spark] 파티션, 셔플링에 대해서

파티션에 대해서. 데이터를 여러 클러스터 노드로 분할하는 매커니즘 파티션 수는 클러스터의 코어 개수보다 서너배 더 많은 파티션을 사용하는 것이 좋음 너무 적으면 클러스터를 충분히 활용

velog.io

spark.shuffle.service.enabled: true 설정시 활성화됨 -> 각 worker 노드별로 외부 셔플링 서버를 시작함.
spark.shffle.compress : 중간 파일의 압축 여부 지정 (기본 true)
spark.shuffle.spill.batchSize : 데이터를 디스크로 내보낼 때 일괄 직렬화/역직렬화할 객체 개수 지정 (기본 1만개)
spark.shuffle.service.port : 외부 셔플링 서비스 활성화할 경우, 서비스 서버가 사용할 포트 지정 (기본 7337)

https://tech.kakao.com/2021/10/08/spark-shuffle-partition/

 

Spark Shuffle Partition과 최적화

안녕하세요. 카카오 데이터PE셀(응용분석팀)의 Logan입니다. 응용분석팀에서 식별키 성연령 개발을 담당하고 있습니다. 데이터 분석에 Spark를 메인으로 사용하고 있고, 모델링에는 Tensorflow를 주로

tech.kakao.com

1 Core = 1 Task = 1 Partition

Partition -> 병렬화 수준을 높인다.

 

Input: spark.sql.files.maxpartitionBytes: default 128MB

Output: df.repartition(cnt), df.coalesce(cnt) 256MB

Shuffle: spark.sql.shuffle.partitions (join, group by) spill (100 ~ 200MB 최적)

 

쿼리는 최대한 groupBy로 집계를 한 후

Join을 하고

그다음에 Partition 수를 조절한 다음,

그래도 안된다면 Core 당 메모리를 증가시켜야 합니다.

 

Core 당 메모리를 증가시키는 것을 권장합니다. 보통 Shuffle Size가 600GB 이상이 되면 1 코어당 4GB를 고려하는 것을 권장합니다. 

Cartesian join(cross join) 사용으로 Row 수가 급격하게 증가한 경우에도 Shuffle Size가 커지기 때문에 메모리 증가를 고려해야 합니다. 

 

Shuffle Spill이 일어난다면 에러가 발생해 작업이 지연될 수 있습니다. 그리고 Hadoop 클러스터가 busy 상태인 경우, 연달아 에러가 발생하고 강제 종료될 수 있습니다.
메모리가 부족하다면, 우선적으로 Shuffle Partition 수를 고려해야 합니다.
Shuffle Partition의 크기를 100MB~200MB 사이로 나오도록 spark.sql.Shuffle.Partitions를 설정해야 합니다.

728x90
댓글