일단 결론부터 말하자면, 분산처리가 된 시간과 안 된 시간의 차이 때문

 

상황)

executor 를 일부러 1개만 주고 테스트를 해본 적이 있다.

spark 에서 collect 등의 명령어를 사용한 후 SparkWebUI 에서 executor 의 실행시간을 확인하였다.

 

 

2.6 분 걸렸구나 생각했다.

더 자세히 보고 싶어서 위에 Description 에 "count at IO_Test.scala:24"을 클릭해서 들어갔다.

재밌게도 들어가서 본 executor 의 실행 시간은 위에서 봤던 2.6 분과 달랐다.

 

 

이게 어찌 된 영문인지 그때는 몰랐다.

 

무슨 일인지 알아보기 위해 작은 실험을 했다.

executor 는 1개로 고정시켜두고, 코어를 2개와 1개만 사용하도록 만들어서 실행 시간이 어떻게 달라지는지 확인하는 실험이었다.

duration 은 SparkWebUI 에 Jobs 를 누르면 나오는 시간이고, 

executor task time 은 Description 에 들어가서 본 Executor 당 Aggregated Metrics 의 Task Time 이다.

 

executor 1개 코어 2개

실행 시간

SparkWebUI log

duration : 21
executor task time : 37

SparkWebUI log

duration : 21
executor task time : 37

SparkWebUI log

duration : 23
executor task time : 38

executor 1개 코어 1개

실행 시간

SparkWebUI log

duration : 40
executor task time : 40

* 위 아래 실행 시간이 다른 건 중요하지 않음.

 

결과를 보면 알 수 있듯이, 코어가 2개일 때 duration 과 task time 이 다르고 코어가 1개일 때 같다.

 

그 말인 즉 슨, duration 은 분산 처리에 의한 시간 단축 이득이 포함된 시간이고,

task time 은 해당 executor 가 순수하게 일을 처리하는 데 걸린 모든 시간의 합이다.

 

이해를 위한 예시를 들어보자.

처리 효율이 똑같은 A,B 두 사람이 하나의 작업을 동시에 하게되면 1/2 시간만큼 걸린다. 이것이 duration 이다.

하지만 A가 1/2 시간만큼 일했고, B도 역시 1/2 시간만큼 일했다. 이 두 시간이 바로 executor 가 순수하게 돌아간 시간이며 task time 이 된다.

위에 표에서 보면 duration 이 task time 보다 무조건 작다. 왜냐면 2개의 코어 분산처리에 의한 시간 단축 효과를 얻었으니까.

 

 

 

참고 

 

https://stackoverflow.com/questions/44752055/why-does-web-ui-show-different-durations-in-jobs-and-stages-pages/44752532#44752532

 

https://spark.apache.org/docs/latest/web-ui.html

 

 

 

+ Recent posts