티스토리 뷰

대규모 분산 처리의 프레임워크

다수의 컴퓨터에 데이터 처리를 분산하기 위해서는 실행을 관리하기 위한 프레임워크가 필요하다.

구조화 데이터와 비구조화 데이터

  • 구조화 데이터
    • 스키마가 명확하게 정의된 데이터
    • SQL로 집계
  • 비구조화 데이터
    • 자연 언어로 작성된 텍스트 데이터와 이미지, 동영상 등의 미디어 데이터를 포함한 스키마가 없는 데이터
    • SQL로 제대로 집계할 수 없음
    • 분산 스토리지 등에 저장하고 분산 시스템에서 처리
  • 스키마리스 데이터 - 기본 서식은 있으나 스키마가 정의 안됨
    • CSV, JSON, XML 등의 데이터는 서식은 정해져 있지만 컬럼 수나 데이터 형은 명확하지 않아 스키마리스 데이터라고 불린다.
    • 데이터를 다운로드 할 때마다 스키마를 정하는 것은 시간과 비용이 소요되기 때문에 JSON은 JSON 그대로 저장하고 필요한 필드만을 추출하는 편이 간단하다.
  • 데이터 구조화의 파이프라인

  • 각 데이터 소스에서 수집된 비구조화 데이터 혹은 스키마리스 데이터는 처음에는 분산 스토리지에 보관된다.
    • 분산 스토리지에 수집된 데이터는 명확한 스키마를 갖지 않는 것도 많으므로 그대로는 SQL로 집계할수가 없기 때문에 테이블 형식의 구조화된 데이터로 변환한다.
  • 열 지향 스토리지의 작성
    • 하둡에서는 사용자가 직접 열 지향 스토리지의 형식을 선택하고, 자신이 좋아하는 쿼리 엔진에서 집계할 수 있다.
    • 비구조화 데이터를 읽어 들여 열 지향 스토리지로 변환하는 과정에서는 데이터의 가공 및 압축을 위해 많은 컴퓨터 리소스가 소비된다. 그래서 사용되는 것이 하둡과 스파크 등의 분산 처리 프레임워크이다.

Hadoop - 분산 데이터 처리의 공통 플랫폼

하둡은 단일 소프트웨어가 아니라 분산 시스템을 구성하는 다수의 소프트웨어로 이루어진 집합체이다. v2부터 YARN이라고 불리는 새로운 리소스 관리자 상에서 복수의 분산 애플리케이션이 동작하는 구성으로 되어, 대규모 분산 시스템을 구축하기 위한 공통 플랫폼의 역할을 담당하고 있다.

분산 시스템의 구성 요소 - HDFS, YARN, MapReduce

하둡의 기본 구성 요소는 다음과 같다.

  • 분산 파일 시스템(Distributed File System) - HDFS(Hadoop Distributed File System)
  • 리소스 관리자(Resource Manager) - YARN(Yet Another Resource Negotiator)
  • 분산 데이터 처리(Distributed Data Processing) - MapReduce
    모든 분산 시스템이 하둡에 의존하는 것이 아니라 하둡을 일부만 이용하거나 혹은 전혀 이용하지 않는 구성도 있다.

분산파일 시스템과 리소스 관리자 - HDFS, YARN

하둡에서 처리되는 데이터 대부분은 분산 파일 시스템인 HDFS에 저장된다. 다수의 컴퓨터에 파일을 복사하여 중복성을 높인다는 특징이 있다.
한편 CPU나 메모리 등의 계산 리소스는 리소스 매니저인 YARN에 의해 관리된다. YARN은 애플리케이션이 사용하는 CPU코어와 메모리를 컨테이너라 불리는 단위로 관리한다. 하둡에서 분산 애플리케이션을 실행하면 YARN이 클러스터 전체의 부하를 보고 비어 있는 호스트로부터 컨테이너를 할당한다.
리소스 관리자를 사용하면 애플리케이션마다 실행의 우선 순위를 결정할 수 있다.

분산 데이터 처리 및 쿼리 엔진 - MapReduce, Hive

  • MapReduce도 YARN 상에서 동작하는 분산 애플리케이션 중 하나이며, 분산 시스템에서 데이터 처리를 실행하는 데 사용된다. 비구조화 데이터를 가공하는데 적합하다.
  • 쿼리 언어에 의한 집계가 목적이라면 Apache Hive를 사용할 수 있다.

Hive on MR의 실행 과정

  • 초기 Hive 실행 특성은 MapReduce에 의존하고 있었는데, 이러한 특징으로 인하여 몇 초 안에 끝나버리는 쿼리 실행은 오버헤드가 너무 커서 적합하지 않았다.
  • Hive on Tez

Hive on Tez의 실행 과정

  • Hive를 가속화하기 위해 개발된 것
  • MapReduce의 단점을 보완
    • 스테이지의 종료를 기다리지 않고 처리가 끝난 데이터를 차례대로 후속 처리에 전달함으로써 쿼리 전체의 실행 시간을 단축

대화형 쿼리 엔진 - Impala, Presto

Presto와 Impala의 실행 과정

  • Impala, Presto - 처음부터 대화형의 쿼리 실행만 전문으로 하는 쿼리 엔진
  • 순간 최대 속도를 높이기 위해 모든 오버헤드가 제거되어 사용할 수 있는 리소스를 최대한 활용하여 쿼리를 실행
  • YARN과 같은 범용적인 리소스 관리자를 사용하지 않고, SQL 실행만 특화한 독자적인 분산 처리를 구현하고 있다. 멀티 코어를 활용하며 데이터 처러릴 병렬화함으로써 고속화를 실현한다.

하둡에서는 이와 같이 성질이 다른 쿼리 엔진을 목적에 따라 구분한다.

  • 대량의 비구조화 데이터를 가공하는 무거운 배치 처리 -> 높은 처리량으로 리소스를 활용할 수 있는 Hive
  • 완성한 구조화 데이터를 대화식으로 집계 -> 지연이 적은 Impala, Presto

Spark

Spark의 실행 과정

  • 대량의 메모리를 활용하여 고속화를 실현
  • 컴퓨터가 비정상 종료하면 중간까지 처리한 중간 데이터는 사라져 버리지만, 처리를 다시 시도해서 읽어버린 중간 데이터를 다시 만들면 된다는 것이 Spark의 개념이다. 중간 데이터는 의도적으로 디스크 상에 캐시하는 것도 가능하다.
  • Spark는 Hadoop을 대체하는것이 아니라 MapReduce를 대체하는 존재이다.
    • HDFS, YARN 등은 Spark에서도 그대로 사용할 수 있다.
  • 실행은 자바 런타임이 필요하지만 Spark 상에서 실행되는 데이터 처리는 스크립트 언어를 사용할 수 있다.
  • SQL로 쿼리를 실행하기 위한 Spark SQL, 스트림 처리를 수행하기 위한 Spark Streaming이라는 기능이 포함되어 있다. 따라서 SQL에 의한 대화형 쿼리 실행과 실시간 스트림 처리에 이르기까지 널리 이용되고 있다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함