
<Spark을 왜 사용해야하는지 정도는 알았으니 어떤 메커니즘으로 이루어지는지 정리해보는 고런 느낌 😁>
크게는 Driver, Cluster Manager, Executors 로 구성되어 있음.
그림만 봐서는 그냥 모르겠으니 우선 Step Flow만 보며 요~런 흐름이구나 해야겠다. ㅎ
Step 1. Spark Submit을 Driver한테 던져주면서 "요것점 해라~" 명령
Step 2. "하~ 이거 파일 좀 크네? 한번에 하기엔 쪼오금 빡세니까 DAG Scheduler랑 Task Scheduler가 나누게 시켜야지" 하면서 계획을 세움
Step 3. 이제 이 작업을 돌릴 리소스가 필요함. → Cluster Manager한테 ㄱㄱ → "작업 좀 하게 컴퓨터좀 쓰자" (리소스 협상)
Step 4. Cluster Manager : "ㅇㅋ 쓸 수 있는거 줌" → Executors(실행기)한테 작업 명령함
Step 5. Executors랑 Driver 연결
Step 6. 위에 작업들을 모니터링 하면서 관리
1. Driver의 Single Point of Failure
- Driver는 장애가 발생해도 자동으로 복구 안됨 ㅠ
- Driver가 중단될 경우 전체 작업이 멈추므로, Driver를 모니터링하고 장애 발생 시 대처 방안 마련해야함
2. Executor 수와 리소스 관리
- Executor를 늘리면 작업 속도가 빨라질 수 있긴한데, 너무 많이 사용하면 오히려 시스템 부하가 늘어나고 작업이 늘어질 수 있음
- 데이터 크기에 맞게 Executor 수를 적절히 설정해야함
3. Idempotent 작업 설계
- Driver나 Executor가 중단되거나 다시 시작도리 경우에도 작업이 문제없이 반복 실행될 수 있도록 설계해야함.
- 특히 Streaming 작업에서는 데이터 처리를 안정적으로 유지할 방법을 고려해야함.