본문 바로가기

Data&Processing

spark on kubernetes vs EMR

도입배경

  • 기존에 EMR을 사용해서 Data Mart 데이터 생성작업을 처리하고 있었는데
  • spark on kubernetes 를 도입해서 기존 batch를 모둔 전환했습니다.
  • 2019년 말에 전환 했지만 장단점에 대해서 정리하고자 문서화 합니다.

Spark on Kubernetes

  • 관련 reference
  • 기존 local, yarn, mesos 등으로 resource관리하였는데 kubernetes를 resource manager로 대체하는 구조
  • 실행
  • 장점 vs EMR
    • resource manager
      • kubernetes 를 설치한 상태에서 yarn이나 hadoop등의 중앙집중화된 platform을 설치하지 않고 k8s master에 submit함으로써 실행/관리
    • task(resource) dependency
      • Airflow를 예로 들어 하나의 DAG에서 동시에 여러task실행할때 resource가 여러task를 실행하기에 충분함에도 하나의 task가 EMR source를 다 쓴다거나 해서 다른 task를 기다린다거나하는 case가 발생하기도 함
      • spark on k8s에서는 task끼리 완전히 dependent하기때문에 다른 task 실행에 대한 신경을 쓸필요가 없음
    • memory사용(세금)
      • EMR 사용시 기본적으로 EMR관리를 위해 사용하는 메모리 비율이 있는데
      • k8s 사용하게 되면 demonset 비용이 있기는 하지만
      • ec2 instance에서 EMR보다 더 많은 메모리를 사용할수 있는 장점이 있음
    • 비용
      • EMR비용에 대한 절약
      • spot instance를 사용시 다양한 instance type을 지정할수 있어서 instance down시 좀더 유연한 대처가능
    • executor 자유로운 설정
      • 하나의 DAG에 작업량 차이가 많은 task가 있을경우 = executor 편차가 심할때 = ex) executor가 5개인 task와 100개인 task가 하나의 DAG에 있을경우
      • EMR은 100개의 executor를 받을수 있는 node를 구성해야하고 DAG가 끝날때 까지(물론 좀 더 빨리 끝나긴하겠지만) 대량의 node를 유지해야하는 반면에
      • spark on kubernetes는 해당task만 대량의 executor를 사용하고 종료시 반납하므로 node를 지속적으로 많이 사용하지 않게됨
  • 단점 vs EMR
    • spark on kubernetes의 단점인데 아직 yarn resource manager와 비교해서 안되는 기능들이 있음(3.3기준)
      • dynamic allocation
      • external shuffle service