Apache Spark — 느린 잡의 답은 실행 계획과 이벤트 로그에 있다 · 드라이버와 잡 · 퀴즈
퀴즈: 드라이버와 잡
6문항. 정답과 해설은 풀어 본 뒤에 보여 드립니다.
스키마를 직접 주어 CSV 를 읽고 filter 와 withColumn 만 쌓은 뒤 행동 없이 앱을 끝냈다. 이벤트 로그의 잡 시작 이벤트는 몇 개인가?
- 변환이 둘이므로 두 개
- 0개 — 행동이 없으면 잡이 뜨지 않는다
- 읽기 하나에 변환 둘을 더해 세 개
- CSV 를 읽었으므로 적어도 한 개
groupBy("status").count() 결과를 파일로 쓴 잡에서 스테이지가 둘로 갈린 직접적인 이유는?
- count 는 행동이라 스테이지를 하나 더 만들기 때문
- 파일을 쓰는 단계는 늘 별도 스테이지가 되기 때문
- 같은 status 를 한 태스크로 모으는 셔플이 경계가 되기 때문
- CSV 읽기는 항상 독립된 스테이지에서 돌기 때문
local[2] 모드에서 드라이버와 실행기의 관계로 옳은 것은?
- 드라이버 JVM 하나가 실행기 역할도 하고 태스크는 그 안의 스레드로 돈다
- 드라이버 하나와 실행기 JVM 두 개가 따로 뜬다
- 실행기가 없어서 스테이지와 태스크 개념이 사라진다
- 드라이버가 두 개 떠서 태스크를 반씩 나눠 맡는다
머리줄 있는 CSV 를 스키마 없이 읽고 count() 를 한 번 불렀더니 이벤트 로그에 잡이 여러 개 찍혔다. 가장 알맞은 설명은?
- count 는 파티션마다 잡을 하나씩 띄운다
- 이벤트 로그가 같은 잡을 여러 번 기록하는 버그다
- local 모드에서는 행동 하나가 늘 잡 두 개가 된다
- 머리줄을 확인하는 작은 잡이 행동 앞에 따로 끼어든다
spark.read.csv 에 존재하지 않는 경로를 넘겼다. 오류는 언제, 어떤 조건 이름으로 드러나는가?
- read 를 부르는 순간 PATH_NOT_FOUND 로
- count 같은 행동을 부를 때 PATH_NOT_FOUND 로
- read 를 부르는 순간 PATH_ALREADY_EXISTS 로
- 앱을 끝내는 spark.stop() 에서 조용히 무시된다
Spark 4.2 에서 spark.eventLog.enabled 만 true 로 켜고 나머지는 기본값으로 두었더니 이벤트 로그를 grep 으로 세기 어렵다. 문서로 확인되는 원인은?
- 이벤트 로그는 앱이 끝나면 자동으로 지워져서
- 이벤트 로그가 JSON 이 아니라 바이너리 형식이라서
- 기본값이 굴리기(rolling)와 zstd 압축이라 여러 파일로 나뉘고 압축되어서
- 이벤트 로그는 히스토리 서버 안에만 저장되어서