Spark는 YARN에서 built-in External Shuffle Service(ESS)를 제공하고 있다.
Spark executor가 shuffle 데이터를 생성하면, 그 데이터는 노드 로컬의
디스크(NodeManager의 local-dir)에 저장되고, executor가 종료되더라도 ESS 덕분에
shuffle 결과를 재사용할 수 있게 된다.
그렇기 때문에 Dynamic Allocation 사용시에도 shuffle 데이터 손실을 막을 수 있다.
spark.shuffle.service.enabled 옵션을 활성화하게 되면, spark executor는 ESS에 등록한다.
대표적으로 YARN ESS의 mechanisim 은 아래와 같다.
같은 node의 nodemanager의 ESS에 shuffle 서비스 사용을 등록
shuffle data file(partition 키로 구분되는 shuffle block의 모음)과 index file 한쌍을 생성, 저장Reduce task는 ESS와 connection을 맺고 shuffle data를 요청, ESS는 index file을 참고하여 shuffle data를 reduce task로 전송하지만, Spark ESS의 문제점은 아래와 같다.
ESS 기반이라면 shuffle data를 저장한 노드는 장시간 살아 있어야 하기 때문에,
###
Reference
https://yangwwei.github.io/2021/11/12/Spark-remote-shuffling-service-k8s.html?utm_source=chatgpt.com