일단 결론부터 말하자면, 분산처리가 된 시간과 안 된 시간의 차이 때문
상황)
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 |
SparkWebUI log |
duration : 21 |
SparkWebUI log |
duration : 23 |
executor 1개 코어 1개 |
실행 시간 |
SparkWebUI log |
duration : 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://spark.apache.org/docs/latest/web-ui.html
'Spark' 카테고리의 다른 글
[Spark] Resource 제한하는 방법 (0) | 2019.11.05 |
---|---|
[Spark] Master option 설명 (0) | 2019.11.02 |
[Spark] Log Level 바꾸는 법 (1) | 2019.10.22 |
[Spark] spark-shell, spark-submit 명령어 사용법 (0) | 2019.10.16 |
[Spark] Serialization 이해하려고 읽은 사이트들 (0) | 2019.10.10 |