spark 2.0.2 기준
가끔 YARN에서 spark job을 수행할 때
어느 지점에서 다음 stage로 진행되지 않는 경우가 있다.
spark 초보시절에 진짜 메모리도 늘려보고 별 짓을 다 해봤지만 원인을 찾지 못했다.
최근 며칠간 열심히 container의 상태도 보고 여러가지 설정을 해보았고
구글링을 열심히 해보았지만 답을 찾지 못했다.
하지만 실험적으로 내가 내린 결론은
Too many tasks resource management에서 발생하는 deadlock이다.
Deadlock이 아닐수도 있고 멈춤(Stop)현상 또는 Bottleneck이라고도 볼 수 있다.
(하지만 3일이상 돌렸는데도 progress가 전혀없는거 보면 deadlock인 것 같다)
문제가 발생했던 job의 특징은 다음과 같았다.
- BIG input data
- Many Row
- Tasks# > 2000
그리고 발생했던 현상은
대부분의 Task가 완료되고 최후의 1~5개의 Task가 수행되지 않고 멈춰있는 것이다.
해결방법?
- excutor개수를 줄인다( < 100)
- 매 Stage 결과를 cache(), persist()를 통해 저장
- 그래도 안되면 HDFS에 저장, 다음 stage는 새로운 job으로 실행
원인이 무엇인지 고민해본 내용은 다음과 같다.
- 다수의 Task가 종료되며 발생하는 Garbage collection overhead
- 다수의 Task가 종료되며 발생하는 Resource Manager overhead
다수의 task가 종료되면서 특정 Queue에 병목이 생기고
task들이 종료되는 작업중 순차적으로 timeout을 초과하여 failover가 연쇄적으로 발생
끝나지 않는 Retry와 failover로 인해 job이 더 이상 수행되지 않는 deadlock이 발생되는 것이다.
혹시 위와 동일한 이슈를 가지고 있었고
위와 같은 방법으로 해결한 분이 계시다면
꼭 원인을 찾아보시고 저에게도 공유를 주시면 감사하겠습니다.
'Computer Science > Bigdata(hdoop, spark, hive)' 카테고리의 다른 글
[Hadoop/Spark] MapReduce란 무엇인가?(Mapper, reducer) (0) | 2022.10.28 |
---|---|
[PySpark] 연산자 우선순위 이슈 - 'py4j.Py4JException: Method or([class java.lang.Integer]) does not exist' (0) | 2022.07.15 |
[Spark/Scala] 스파크, 스칼라 버전확인 (0) | 2020.04.27 |