DevLog

엔지니어링 블로그를 한 곳에서 탐색하고, 최근 발행 흐름을 빠르게 파악할 수 있는 서비스 입니다.

Quick Links

  • Latest Feed
  • Engineering Directory

Support

  • 소개
  • 개인정보처리방침

Contribute

  • 원하는 블로그 추가 (준비 중)
  • Feedback

© 2026 DevLog Inc. All rights reserved.

본 사이트는 공개 RSS 피드를 통해 콘텐츠를 수집하며, 모든 콘텐츠의 저작권은 원저작자에게 있습니다.

Back to Feed
Read Original

Contents

Continue Reading

  • More from 라인
  • Related reads#Spark
#Backend

LINE 서비스의 대규모 광고 데이터를 처리하기 위한 Spark on Kubernetes 적용기

LINE 서비스의 대규모 광고 데이터를 처리하기 위한 Spark on Kubernetes 적용기
01

Summary

"Hadoop 탈출, 성공적" LINE Ads가 Spark on K8s로 1,000억 건의 데이터를 처리하는 법

YARN의 한계를 깨고 성능 226% 향상과 비용 40% 절감을 동시에 달성한 대규모 데이터 엔진 전환기

폭증하는 광고 데이터 처리를 위해 기존 Hadoop 기반 인프라에서 Kubernetes 환경으로 Spark 엔진을 성공적으로 이전한 여정을 담고 있습니다. 자원 경합과 확장성 문제를 해결하기 위해 선택한 아키텍처와 Apache YuniKorn 스케줄러의 활용법, 그리고 실제 운영 과정에서 겪은 메모리 최적화 트러블슈팅 경험을 공유합니다.

  • 01코어 수를 50% 줄였음에도 처리 성능이 2.2배 이상 급증한 드라마틱한 최적화 결과
  • 02연간 컴퓨팅 자원 비용 40% 절감으로 증명한 클라우드 네이티브의 경제성
  • 03Apache YuniKorn의 갱 스케줄링을 통해 K8s 환경에서 배치 잡의 안정성 확보
  • 04Docker 이미지 기반의 독립적 환경 구성으로 Spark 버전 관리의 자유도 획득
  • 05메모리 오버헤드 20% 이상 상향 조정을 통한 컨테이너 OOM 이슈 해결 인사이트

+RECOMMENDATION

Hadoop 클러스터의 노후화나 운영 비용 문제로 고민 중인 데이터 엔지니어에게 필독을 권합니다. 특히 Spark 워크로드를 K8s로 마이그레이션할 때 반드시 고려해야 할 메모리 설정과 스케줄링 전략에 대한 실전 가이드를 제공합니다.

The Problem

기존 Hadoop/YARN 환경은 스토리지와 컴퓨팅 자원이 단일 노드에 결합되어 있어 자원 경합에 따른 성능 저하가 발생했으며, 리소스 확장 시 불필요한 스토리지 증설이 동반되는 비효율이 존재했습니다. 또한 Spark 버전이나 JVM 환경이 Hadoop 노드에 종속되어 있어 최신 기능을 유연하게 도입하기 어려운 구조적 한계가 있었습니다.

The Solution

Spark on Kubernetes(Cluster Mode)를 도입하여 인프라 독립성을 확보하고, 배치 잡의 효율적인 리소스 할당을 위해 Apache YuniKorn의 갱(Gang) 스케줄링을 적용했습니다. CI/CD 파이프라인은 GitHub Actions와 ArgoCD를 통해 자동화하였으며, 메모리 오버헤드 이슈를 해결하기 위해 오프힙(Off-heap) 메모리 비중을 상향 조정했습니다.

The Result

스트리밍 잡 기준 기존 대비 절반의 코어만 사용하고도 처리 성능이 약 226% 향상되었으며, 컴퓨팅 자원 기준 연간 운영 비용을 40% 이상 절감했습니다. 또한 환경 의존성 문제를 해결하여 다양한 Spark 버전을 독립적으로 운영할 수 있는 유연한 데이터 플랫폼을 구축했습니다.

Trade-off

Spark on Kubernetes 환경에서는 JVM 외부 연산량이 많아 기존 YARN 대비 더 높은 메모리 오버헤드 설정이 필요하여 자원 설계 시 주의가 필요합니다. 또한 익스큐터 파드 실패 시 로컬 디스크에 저장된 캐시 데이터가 유실될 수 있어, 작업 성격에 따라 PVC(Persistent Volume Claim) 도입과 같은 관리 복잡도가 수반됩니다.

03

Key Concepts

Concept · 01

Apache YuniKorn

Kubernetes 환경에서 배치 워크로드를 효율적으로 관리하기 위해 설계된 범용 리소스 스케줄러입니다.

  • 필요한 모든 리소스를 한꺼번에 할당하는 갱(Gang) 스케줄링으로 잡 실패 방지
  • 계층적 자원 큐를 제공하여 테넌트별로 정교한 리소스 쿼터 및 우선순위 관리 가능
Concept · 02

Spark Memory Overhead

익스큐터의 JVM 온힙 메모리 외에 Netty 통신이나 Parquet 직렬화 등에서 사용하는 추가적인 오프힙(Off-heap) 메모리 영역입니다.

  • K8s 환경에서는 컨테이너 유지 및 서드파티 라이브러리 연산으로 인해 더 많은 오버헤드 메모리 필요
  • 기본 10% 설정을 20% 이상으로 상향하여 컨테이너 레벨의 OOM Kill 문제 해결
Concept · 03

Gang Scheduling

하나의 작업에 필요한 모든 리소스를 동시에 할당하거나, 하나라도 부족하면 실행하지 않고 대기시키는 스케줄링 방식입니다.

  • 익스큐터가 부분적으로 할당되어 작업이 지연되거나 데드락에 빠지는 상황 방지
  • 대규모 Spark 잡이 Kubernetes 클러스터 내에서 안정적으로 리소스를 선점하도록 지원
Continue reading · same source

라인More from 라인

View all posts from 라인
  • 초당 100만 건, LINE 앱에 Apache Kafka 종단 간 암호화 적용기

    KafkaCryptographyAES-GCM
    3일 전
  • AI로 웹 엔지니어 없이 LINE 앱 안에서 그룹 영상 통화 서비스 만들기

    LIFFWebRTCLINE Planet SDK
    1주 전
  • 임베딩 안정화로 검색 리랭킹의 콜드 스타트 문제를 해결하다: LINE Part Time Jobs 적용 사례

    Embedding StabilizationCold Start ProblemTwo-Tower Model
    2주 전
  • 프롬프팅에서 워크플로로, AI로 프런트엔드 개발 생산성 끌어올리기

    LLMMCPAI Agent
    2주 전
  • AI 에이전트끼리 토론한다면? 멀티 에이전트 협업으로 재설계하는 개발 프로세스

    AI AgentLLM OrchestrationSoftware Development Lifecycle
    2주 전

Related reads#Spark

Explore #Spark
Pinterest·CDC

핀터레스트의 차세대 DB 인제스션 프레임워크 내 자동화된 스키마 진화

#Spark2주 전
Netflix·Cassandra

넷플릭스의 카산드라 데이터 이동 아키텍처 진화 과정

#Spark3주 전
토스·Apache Spark

Spark Connect on Kubernetes #1: 견고한 Spark Connect 만들기

#Spark3주 전
당근·ELT

당근 200+개 DB 를 옮기는 ELT 플랫폼, DT Platform 을 만든 이야기

#Spark1개월 전

Source

라인
라인
Engineering Blog

Published · March 31, 2026

Topics

SparkKubernetesYARNApache YuniKornData PipelineCloud NativeArgoCD