Bigdata, Kubernetes 운영 빅데이터 기술들

Jeonghak Cho·2025년 3월 3일

Bigdata

목록 보기
3/30

쿠버네티스의 빅데이터 기술들

Spark

Apache Spark는 대규모 데이터 처리를 위한 분산형 배치 및 스트리밍 처리 엔진이다. 주요 특징으로 고속 메모리 연산, 강력한 배치 처리, 머신 러닝 및 그래프 처리가 지원된다. 활용 사례로는 빅데이터 분석, ETL(Extract, Transform, Load), 머신 러닝 모델 트레이닝 등이 있다. Hadoop, Kubernetes, 클라우드 (AWS EMR, GCP Dataproc 등)에 적용할 수 있다.

Apache Flink는 실시간 데이터 스트리밍에 최적화된 분산 데이터 처리 엔진이다. 주요 특징으로는 강력한 스트리밍 처리, 정확한 상태 관리, 이벤트 시간 처리 지원이 있다. 활용 사례는 실시간 데이터 분석, CEP(Complex Event Processing), IoT 데이터 처리가 있다. Kubernetes, 클라우드 네이티브, Kafka 연계에 적용할 수 있다.

Presto

Presto는 분산 SQL 쿼리 엔진으로, 대용량 데이터를 빠르게 조회할 수 있도록 설계되었다. 데이터 저장소(S3, HDFS, MySQL, PostgreSQL 등)에서 데이터를 가져와 SQL을 사용해 분석 가능하다. OLAP(Online Analytical Processing)에 최적화되어 있으며, 페타바이트(PB)급 데이터도 빠르게 처리 가능하다.

Ray

Ray는 분산 컴퓨팅 프레임워크로, 머신러닝, 병렬 처리, 분산 애플리케이션 개발을 쉽게 할 수 있도록 설계되었다. Python 기반이며, 대규모 데이터 처리 및 머신러닝 워크로드를 병렬로 실행하는 데 사용돤다.

  • 분산 처리를 쉽게 구현: Python 코드에서 병렬 실행을 손쉽게 할 수 있음.
  • 머신러닝 최적화: PyTorch, TensorFlow 같은 프레임워크와 통합 가능.
  • Autoscaling 지원: 클러스터에서 필요한 만큼 리소스를 자동으로 확장/축소.

MinIO

MinIO는 고성능의 오픈 소스 객체 스토리지 솔루션으로, Amazon S3와 호환되는 API를 제공한다. 이는 퍼블릭 및 프라이빗 클라우드, 베어메탈 인프라, 오케스트레이션된 환경, 엣지 인프라 등 다양한 환경에 배포할 수 있도록 설계되었다.

  • 데이터 저장 및 관리: MinIO는 대규모 데이터 세트를 효율적으로 저장하고 관리할 수 있는 객체 스토리지로, AI, 머신 러닝, 분석 워크로드 등 클라우드 네이티브 애플리케이션에 적합
  • S3 호환 API 제공: Amazon S3와 호환되는 API를 제공하여 기존 S3 기반 애플리케이션과의 통합이 용이

Spark 쿠버네티스에서 운영 혜택

네이티브 Kubernetes 지원

  • Spark on Kubernetes 모드를 제공하여 Kubernetes에서 직접 실행할 수 있도록 지원
  • Spark 2.3부터 Kubernetes가 공식적으로 지원되었으며, 현재는 Spark Operator를 활용하면 더욱 쉽게 배포 및 관리
  • Hadoop은 원래 YARN(Yet Another Resource Negotiator) 위에서 실행되도록 설계되었기 때문에 Kubernetes에서 직접 실행하려면 추가적인 설정이 필요

자원 관리의 유연성

  • Kubernetes는 컨테이너 기반의 리소스 격리 및 스케일링을 기본적으로 제공하므로, Spark의 Executor 및 Driver Pod을 탄력적으로 운영 가능
  • Hadoop YARN은 Kubernetes보다 리소스 스케줄링이 유연하지 않으며, 클러스터 리소스 활용에 있어 오버헤드 발생 가능

배포 및 유지보수 용이성

  • Spark는 컨테이너화된 애플리케이션으로 쉽게 배포할 수 있으며, Helm Chart나 Spark Operator를 사용하면 유지보수가 편리
  • Hadoop은 여러 구성 요소(Namenode, Datanode, ResourceManager, NodeManager 등)가 필요하고, YARN을 따로 설정해야 하므로 Kubernetes 환경에서 직접 운영 불편

클라우드 네이티브 환경과의 친화성

  • Spark는 클라우드 네이티브 아키텍처에 맞춰 설계되었으며, Kubernetes에서 직접 실행하면 클라우드 벤더 종속성을 감소
  • Hadoop은 기본적으로 분산 파일 시스템(HDFS)과 깊이 통합되어 있으며, 클라우드 스토리지(S3, GCS)와의 연동이 불편

스토리지 접근성

  • Spark는 HDFS뿐만 아니라 S3, GCS, Azure Blob Storage와 같은 오브젝트 스토리지에도 쉽게 연결
  • Hadoop의 경우 기본적으로 HDFS를 사용하지만, 클라우드 환경에서는 오브젝트 스토리지를 사용하려면 추가적인 설정이 필요

Flink 쿠버네티스에서 운영 혜택

자원 관리 최적화

  • Kubernetes의 Horizontal Pod Autoscaler(HPA) 또는 Custom Autoscaler를 활용하여 Flink의 TaskManager를 동적으로 확장 가능하다. 부하가 높을 때는 자동 확장, 유휴 상태에서는 리소스 절감한다.
  • 자원 격리 및 효율적 사용이 가능해 진다. Flink의 JobManager와 TaskManager를 각각 독립된 Pod으로 배포하여 리소스 충돌 방지가 된다. Kubernetes의 리소스 제한(CPU, 메모리 limits/requests) 설정으로 클러스터 내에서 균형 잡힌 운영이 가능하다.

배포 및 운영 편의성

  • Helm을 사용하면 Flink 클러스터를 손쉽게 배포하고 관리할 수 있다. Flink Kubernetes Operator를 활용하면 Job의 라이프사이클(배포, 업데이트, 롤백, 모니터링)을 자동화 가능하다.
  • Flink 애플리케이션을 Docker 컨테이너로 패키징하여 쉽게 배포 가능하다. 환경에 구애받지 않고 일관된 실행 환경 제공하며, Rolling Update 및 Canary 배포가 가능하다.
  • Flink 애플리케이션을 업데이트할 때 Kubernetes의 Rolling Update 또는 Canary 배포 기법을 활용 가능하다. 새로운 버전의 Job을 안전하게 배포하고 트래픽을 조정할 수 있다.

안정성 및 장애 대응 능력 향상

  • Flink의 JobManager 또는 TaskManager Pod이 비정상 종료되면 Kubernetes가 자동으로 복구(Self-Healing)된다. StatefulSet을 활용하여 Job의 상태를 유지하면서 안정적으로 재시작 가능하다.
  • Kubernetes의 Leader Election 메커니즘을 활용하여 Flink JobManager의 장애 발생 시 자동으로 새로운 리더를 선출하는 고가용성(HA) 구성이 지원된다. 기존에는 Zookeeper를 사용해야 했지만, Kubernetes 환경에서는 이를 간소화할 수 있다.

클라우드 네이티브 환경과의 친화성

  • Kubernetes의 클라우드 네이티브 특성을 활용하여 클라우드 환경(AWS EKS, GCP GKE, Azure AKS 등)과 쉽게 통합된다. 필요할 때만 노드를 추가하는 노드 오토스케일링이 지원된다.
  • Kafka, S3, HDFS, GCS, Azure Blob Storage 등의 클라우드 네이티브 스토리지 및 메시지 시스템과 자연스럽게 연동 가능하다. Checkpoint 및 Savepoint 데이터를 클라우드 스토리지에 저장하여 장애 발생 시 복구 가능하다.

DevOps 및 모니터링 향상

  • Kubernetes 환경에서는 GitOps(ArgoCD, Flux) 또는 Jenkins, GitHub Actions 등을 활용하여 Flink 애플리케이션의 CI/CD를 쉽게 구축 가능하다.
  • Prometheus + Grafana를 활용하여 Flink의 메트릭 수집 및 시각화를 통해 모니터링 및 로깅 강화할 수 있다. ELK(Elasticsearch + Logstash + Kibana) 또는 Loki + Grafana와 연동하여 Flink 로그를 중앙에서 관리 가능하다.

Presto

주요 특징

  • 다양한 데이터 소스 지원: RDBMS, NoSQL, 데이터 레이크 등 다양한 시스템과 연결 가능.
  • 빠른 속도: Hive보다 훨씬 빠르게 동작하며, 인메모리 처리를 활용하여 쿼리 성능을 최적화.
  • 대규모 데이터 분석에 적합: AWS Athena(Presto 기반)처럼 빅데이터 분석 및 BI 도구에서 활용.

AWS Athena에서 사용

AWS Athena는 Presto를 기반으로 구축되었으며, Amazon S3에 저장된 데이터를 대상으로 SQL 쿼리를 실행할 수 있도록 제공하는 서비스이다. Presto의 장점(빠른 분산 SQL 쿼리 처리, 다양한 데이터 소스 지원)을 활용하여 서버리스(Serverless) 환경에서 운영되도록 만든 것이 Athena이다. AWS는 Presto의 오픈소스 버전을 내부적으로 커스터마이징하여 Athena를 운영하고 있으며, Trino(Presto의 포크 버전) 기반으로 점차 전환 중이다.

Ray 쿠버네티스에서 운영 혜택

자동 확장(Auto Scaling)

  • Ray의 Auto-Scaling과 Kubernetes의 HPA(수평적 확장)가 결합하여 리소스를 동적으로 조절 가능
  • 필요할 때만 노드를 늘리고, 작업이 끝나면 줄이는 방식으로 비용 최적화 가능.
  • GPU/CPU 리소스를 사용량에 맞게 동적으로 배포 가능.

다양한 인프라에서 운영 가능 (Multi-Cloud, Hybrid 지원)

  • Kubernetes 클러스터를 통해 다양한 클라우드 및 온프레미스 환경에서 일관된 Ray 배포 가능
  • AWS, GCP, Azure 같은 멀티 클라우드 환경에서 일관된 Ray 클러스터 운영 가능.
  • 온프레미스 데이터센터에서도 동일한 방식으로 실행할 수 있어 유연한 배포 전략 가능.
  • 쿠버네티스의 Helm 차트를 사용하여 손쉽게 배포 및 관리 가능.

리소스 격리 및 효율적인 할당

  • Ray의 작업을 Kubernetes의 네임스페이스 및 리소스 할당 정책과 연계하여 최적화 가능
  • K8s의 네임스페이스(Namespace) 를 사용해 다중 사용자 환경에서도 격리된 Ray 클러스터 운영 가능.
  • CPU/GPU 리소스를 K8s 리소스 요청/제한 설정(Requests/Limits) 과 함께 관리하면, 특정 노드에만 특정 작업을 할당하는 등의 최적화 가능.
  • Ray의 Placement Group 기능과 K8s의 Affinity/Anti-affinity 정책을 함께 활용하면, 특정 워크로드를 특정 노드에서만 실행할 수도 있음.

장애 복구 및 내결함성 (Fault Tolerance)

  • Kubernetes의 자체적인 셀프 힐링 기능과 결합하여 Ray 노드 장애 시 자동 복구 가능
  • Ray는 작업(Task)이 실패해도 다른 노드에서 다시 실행할 수 있는 기능을 제공.
  • Kubernetes의 Pod 재시작 정책(Restart Policy) 및 Node Failover 기능과 함께 사용하면 더욱 안정적인 분산 환경 구성 가능.
  • Ray의 CheckPointing 기능을 사용하여, 중단된 작업을 다시 이어서 실행 가능.

DevOps 및 CI/CD 연계 가능

  • Ray + Kubernetes를 이용하여 MLOps, 데이터 파이프라인을 손쉽게 운영 가능
  • Kubernetes 기반 CI/CD 파이프라인과 쉽게 연동 가능하여 데이터 파이프라인 및 AI 모델 배포 자동화 가능.
  • Ray Serve를 사용하여 머신러닝 모델을 서빙(Serving)하고, K8s Ingress 및 Service Mesh와 연계하여 API 형태로 제공 가능.
  • 쿠버네티스의 GitOps(ArgoCD, FluxCD)와 함께 사용하면 레이 클러스터의 코드 기반 배포 가능.

다양한 배포 옵션 (Helm, Operator 지원)

Helm 차트 및 Ray Kubernetes Operator를 사용해 손쉽게 Ray 클러스터 배포 가능

MinIO 쿠버네티스에서 운영 혜택

네이티브 통합

MinIO는 Kubernetes 네이티브로 설계되어, 컨테이너화된 애플리케이션과의 통합이 용이하며, 클러스터 내에서 효율적인 스토리지 솔루션을 제공한다.

Helm Chart를 통한 배포

Helm Chart를 사용하여 MinIO를 Kubernetes 클러스터에 손쉽게 배포할 수 있다. 이는 배포 및 관리를 간소화하며, 설정 파일을 통해 사용자 정의 구성이 가능하다.

Ingress를 통한 접근성 향상

Ingress 리소스를 활용하여 MinIO 콘솔 및 API 엔드포인트에 대한 외부 접근을 설정할 수 있다. 이를 통해 보안 및 접근성을 향상시킬 수 있다.

Persistent Volume 사용

Kubernetes의 Persistent Volume과 Persistent Volume Claim을 활용하여 MinIO의 데이터 저장소를 구성할 수 있다. 이는 데이터의 영속성을 보장하며, 스토리지 리소스의 효율적인 관리를 가능하게 한다.

다양한 서비스와의 통합

MinIO는 Trino와 같은 분산 SQL 쿼리 엔진과 통합하여 대규모 데이터 세트에 대한 고성능 분석을 수행할 수 있다. 이러한 통합은 데이터 처리 파이프라인의 효율성을 향상시킨다.

0개의 댓글