BigData/Spark & Spark Tuning

[Spark] EMR을 구성하는 instance는 큰 spec이 유리할까? 작은 spec이 유리할까?

스파이디웹 2025. 1. 14. 01:37
728x90

EMR을 구성할 때 작은 스펙의 많은 노드가 유리한지 큰 스펙의 적은 노드가 유리한지 비교하여 정리해보겠습니다.


 

1. 큰 스펙의 인스턴스를 적게 사용하는 경우

장점

  1. 네트워크 병목 감소
    • 인스턴스 수가 적어 노드 간 통신(예: Shuffle, Data Transfer) 비용이 줄어듦
    • 네트워크 I/O가 줄어들어 성능이 향상될 가능성이 높음
  2. 작업 간 Overhead 감소
    • 인스턴스 수가 적으므로, 작업(Task) 배포와 조정에 소요되는 Overhead가 줄어듦
    • 클러스터 관리가 간단해지고 효율성이 높아짐
  3. CPU, 메모리 활용 효율성 증가
    • 단일 인스턴스에 많은 CPU와 메모리를 할당하므로, Spark 작업의 병렬 처리 능력이 향상됨
    • 메모리 내 연산이 가능할 확률이 높아지고 Disk Spill이 줄어듦
    • 기본적으로 사용되는 메모리 및 코어가 노드수에 비례하기 때문에 자원 효율성이 높음(서버당 os및 데몬에서 사용하는 자원이 적어짐)
  4. 운영 및 관리 간소화
    • 적은 인스턴스로 관리해야 할 노드 수가 감소하므로 클러스터 유지보수가 용이

단점

  1. 단일 노드 실패 시 리스크 증가:
    • 인스턴스 수가 적기 때문에 한 노드가 실패하면 전체 클러스터 성능에 큰 영향을 미침
    • 데이터 복구나 작업 재시작 시간이 길어질 수 있음
  2. 자원 할당 비효율 가능성:
    • 작업(Task)의 병렬성이 낮을 경우, 일부 CPU와 메모리가 사용되지 않고 남을 가능성이 있음.
    • 워크로드가 비균형적으로 분배되면 자원 낭비로 이어질 수 있음.
  3. 확장성 제약:
    • 큰 스펙의 인스턴스는 수량이 제한적일 수 있으며, 특정 AWS 리전에서 인스턴스 수급 문제 발생 가능
    • 특히, SPOT을 활용하지 못할 가능성이 큼

2. 작은 스펙의 인스턴스를 많이 사용하는 경우

장점

  1. 병렬 처리 향상
    • 작은 인스턴스를 여러 개 사용하면 Task를 더 세분화하여 병렬로 처리할 수 있음
    • 워크로드 분산이 잘 이루어져 처리 효율이 높아질 가능성이 큼
  2. 유연성 및 확장성
    • 스케일 아웃(Scale Out)이 용이하여 클러스터 크기를 쉽게 확장 가능
    • AWS에서 작은 인스턴스는 수급이 상대적으로 원활함
      • SPOT을 손쉽게 구할 수 있음
  3. 노드 실패 시 영향 감소
    • 하나의 인스턴스가 실패해도 다른 인스턴스들이 작업을 이어받아 성능에 큰 영향을 미치지 않음
    • 데이터 복구 및 장애 대응이 상대적으로 용이
  4. 비용 효율성
    • 적은 워크로드를 처리하는 작업에 적합하며, 필요 시 인스턴스를 탄력적으로 늘리거나 줄일 수 있음
    • SPOT을 손쉽게 구할 수 있음

단점

  1. 네트워크 병목 가능성
    • 노드 간 통신이 많아질수록 네트워크 I/O가 증가하고 작업 처리 속도가 느려질 수 있음
    • 특히 Shuffle 작업에서 큰 성능 저하를 초래할 가능성
  2. Overhead 증가
    • 많은 수의 Task를 스케줄링하고 관리하는 데 Overhead가 발생
    • 노드 수가 많아질수록 클러스터 관리 및 조정이 복잡해짐
  3. 메모리 부족 가능성
    • 작은 인스턴스는 메모리가 제한적이므로, 대규모 데이터를 처리할 때 Memory Spill 및 Disk Spill 가능성이 높아짐
    • 다수의 노드에서 사용하는 기본적인 메모리와 코어는 가용 자원에서 빠지기 때문에, 자원 효율적이지 않음(많은 자원이 가용되지 않음)
  4. Spark Executor 성능 저하
    • 작은 인스턴스에서는 각 Executor가 사용할 수 있는 CPU와 메모리 자원이 제한되므로, 처리 속도가 느려질 수 있음

 

728x90