본문 바로가기

Data Engineering/Data Platform

빅데이터를 지탱하는 기술 - Chapter3 빅 데이터의 분산 처리

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


  • 구조화 데이터
    • 테이블의 칼럼, 데이터형, 테이블 간의 관계를 스키마라고 정의한다.
    • 스키마가 명확한 데이터를 구조화된 데이터라고 한다.
  • 비구조화 데이터
    • 텍스트, 이미지 등
    • SQL로 집계 불가능한 데이터
    • 보통 데이터레이크에 저장 후, 분산 시스템에서 처리한다. → 가공하면서 스키마 정의 & 구조화
  • 스키마리스 데이터
    • CSV, JSON, XML, 파킷 등 서식은 있지만, 스키마가 없는 경우.
    • JSON을 예시로 들자면, 다운로드 시 스키마를 정의하는건 효율적이지 않아 분석에 필요한 필드만을 따로 추출한다.
  • 데이터 구조화의 파이프라인
    • 데이터 소스 → 분산 스토리지(구조화가 필요한 상황) → 열 지향 스토리지
    • 열 지향 스토리지는 MPP DB 전송 혹은 Hadoop 상에서 변환하면서 이루어진다.
    • 팩트 테이블과 디멘전 테이블로 나누어 취급하고, 데이터를 구조화하여 SQL로 집계 가능하게끔 만든다.
  • 열 지향 스토리지
    • MPP DB의 경우 스토리지 형식이 고정되어있다.
    • Hadoop의 경우, 형식 선택을하고 선호하는 쿼리 엔진을 통해 집계한다.
      • Apache ORC : 구조화 데이터를 위한 열 지향 스토리지, 스키마를 정한 후 저장
      • Apache Parquet : Json등 의 뒤얽힌 데이터도 저장 가능하다.
    • 비구조화 데이터를 열 지향 스토리지로 가공 및 압축을 할 때 많은 리소스가 필요하다. 이때 Hadoop, spark등 분산 처리 프레임워크를 사용한다.
  • Hadoop
    • 단일 소프트웨어가 아닌 다수의 소프트웨어로 이루어진 집합체이다.
    • HDFS : 분산 파일 시스템
    • YARN : 리소스 관리자 ex) Mesos
    • MapReduce : 분산 데이터 처리 및 쿼리엔진 ex) Spark
      • Hive : 쿼리 언어로 집계 할 경우 사용
  • 대화형 쿼리 엔진
    • Presto & Apache Impala가 대표적이다.
    • 기존의 MapReduce, Hive등은 가동시간이 오래걸리고 대량의 데이터의 배치처리에 적합하기에 애드혹 분석 등 빈번한 처리가 필요한 경우 사용한다. MPP DB에 비해 밀리지 않는다.
    • Yarn 등 리소스 관리자가 필요없이, SQL 실행만 특화한 분산처리 구현.
    • MPP DB처럼 멀티코어 활용하여 병렬화를 통한 고속화 기능.

하둡 상에서 다수의 쿼리엔진을 통틀어 SQL-on-Hadoop이라고 통칭한다. MPP DB에 비해 밀리지만 분산 스토리지에 저장된 데이터를 신속하게 집계하기에 유리하다.

  • Spark
    • 대량의 메모리를 활용한 고속화
    • MapReduce의 경우 메모리가 적은 환경이었기에 디스크의 읽고 쓰기에 거의 다 썼다.
    • Spark는 메모리 상에 가능한 많은 데이터를 올리고 작업을 한다.
    • HDFS, YARN 등 그대로 사용하며 MapReduce만 대체 가능
    • HDFS 대신 S3, 카산드라 사용 가능
    • 실행은 자바 런타임 필요, 데이터처리는 스크립트 언어 사용 가능
    • Spark SQL에 의한 대화형 쿼리
    • Spark Streaming을 통한 스트림 처리

 

쿼리엔진


데이터 마트 구축의 파이프라인

Hive & Presto 조합

  1. 데이터소스 → Hive를 통한 가공(데이터 구조화)
  2. 열지향 스토리지(Hive meta store)
    • 팩트 & 디멘전 테이블 : 구조화 데이터
  3. Presto로 데이터 집약을 하여 시각화 도구에서의 활용 or 데이터마트로의 이동

Hive

  • 텍스트 or 스키마리스데이터 무관하게 Hive에서 읽을 수 있다면, 쿼리를 고쳐서 테이블을 만들수있다.
  • 구조화 데이터 작성법
    1. 외부테이블 지정
    2. 열 지향 스토리지로의 변환
  • 비정규화 테이블 작성법
    • 구조화가 완료되면, 데이터 마트의 구축이다. → 테이블 결합 및 집약을 통한 비정규화 테이블 만들기
    • Hive의 배치형 쿼리엔진 or Presto의 대화형 쿼리엔진 등을 사용
  • 비정규화 테이블을 만들면서 주의해야 할 점
    • 서브 쿼리 안에서 레코드 수 줄이기, 초기 팩트 테이블의 양을 줄이기. → 합쳐서 필터링을 하지 않고, 필터링을 하고 합친다.
    • 데이터 편향 피하기 - 중복을 제거함으로서 부하를 잘 분산하면서 데이터의 양을 줄일 수 있다.

Presto

  • 플러그인 가능한 스토리지
    • 전용 스토리지가 없어 다양한 데이터 소스에서 읽어 들인다.
    • csv 같은 텍스트 데이터는 Hive보다 특별히 뛰어나지 않다, 열 지향 데이터 구조에서 불러 들일때 효율이 좋다.
    • ORC형식의 로드에 최적화 되어있고, 확장성 높은 분산 스토리지에 배치가 최적화다.
    • 데이터 로딩속도는 클러스터를 분산 스토리지와 네트워크 가까운 곳에 설치 후 가능한 고속 네트워크에 연결해야한다.
    • 하나의 쿼리 안에 분산 스토리지의 팩트 테이블과 RDB의 마스터 테이블과 조인 가능하다.
    • NoSQL(카산드라 등)에 저장된 데이터 집계 시에도 도움이 된다.
  • CPU 이용 효율이 높다.
  • 인 메모리 처리에 의한 고속화
    • 대규모 배치 처리, 거대한 테이블 끼리의 결합에는 디스크를 활용해야 되니 Hive를 쓴다.
  • 분산 결합과 브로드캐스트
    • 기본적으로 같은 키를 갖는 데이터는 동일 노드에 보이는 분산 결합을 실시하며, 한쪽 테이블이 작은 경우 브로드캐스트 결합으로 고속화한다.

이와 같은 구조로 열 지향 스토리지의 집계가 매우 빠르다.

 

데이터 분석 프레임워크의 선택


MPP DB

  • 구조화 데이터를 SQL로 집계하는 것 뿐이라면 기존의 데이터 웨어하우스 제품과 클라우드 서비스를 이용하는 것이 가장 좋다. → 하둡은 DW 제품을 능가하지 않는다.
  • MPP DB는 스토리지와 계산 노드가 일체화 되어있어서, ETL프로세스 등으로 데이터를 가져오는 절차가 필요하다. 그 후 SQL만으로 집계할 수 있기에 아무 기술도 필요없다.
  • 확장성과 유연성에는 분산 시스템이 유리
    • 대량의 텍스트 처리, 데이터 처리를 프로그래밍의 경우 → 유연성
    • NoSQL 데이터베이스에 저장된 데이터 집계하고 싶은 경우
  • 시각화를 위한 데이터마트의 유력한 대안
    • BI도구와 MPP DB는 계속 써왔음, 완성된 비정규화 테이블을 고속 집계하기에 좋다.

Hive

  • Hadoop의 분산 애플리케이션은 확장성과 내결함성이 목표이다.
  • 대규모 배치 처리를 꾸준히 실행한다.
    • 텍스트 데이터 가공 및 열 지향 스토리지 구축 등 무거운 작업
    • MapReduce 대체로 TEZ가 개발이 되어, 대화형 쿼리로도 사용
    • 인 메모리 형식이 아닌 디스크의 사용으로 데이터양에 좌우되지 않는 쿼리 엔진

Presto

  • 일상적인 데이터 분석에 자주 사용되는 쿼리 엔진
  • Hadoop이 아닌 MySQL, 카산드라, 몽고DB에 대응하고 있어 SQL로 집계하기 위한 중심적인 존재 가능
  • 대화식이 쿼리이기에, 텍스트 처리가 중심인 ETL & 데이터 구조화에는 적합하지 않다. → 열지향 스토리지 구축이 불가능한 것이 아니라, 데이터 구조화는 Hive & Spark 사용이 적합

Spark

  • SQL에 특화한 쿼리 엔진은 아니지만 SparkSQL은 존재한다.
  • 인 메모리 데이터 처리가 중심
  • 장점은 ETL프로세스에서 SQL에 이르기 까지 흐름을 파이프라인으로 기술 가능하다.
    • Hive로 구조화 → Presto로 SQL실행의 흐름이 Spark를 통해 한번에 가능.
    • →텍스트 데이터를 열지향 스토리지로 변환 후 집계 해 결과를 한번에 낸다.
  • 메모리 관리가 중요하다.
    • 여러번 사용되는 데이터 캐시에 올리기
    • 디스크에 스왑을 통해 메모리 해제 등 메모리 사용을 프로그래머가 제어
    • SQL만을 사용하고 싶다면, SQL에 특화된 쿼리엔진과 MPP DB사용이 좋다.

 

데이터 마트의 구축


빅데이터의 분석은 데이터를 구조화가 시작이다.

  • 팩트 테이블을 만드는 추가와 치환
    • 추가는 기존 팩트 테이블에 증분을 추가, 치환의 경우 매번 새 테이블을 만든다
    • 추가가 실패 할 경우 테이블의 결손, 여러 번 실행되면 일부가 중복, 팩트 테이블을 다시 만들 때의 관리의 복잡
  • 테이블 파티셔닝
    • 추가의 단점을 보완
    • 테이블에 대해 파티션을 나누고, 파티션 단위로 정리하여 쓰거나 삭제한다.
    • 각 파티션은 주기적으로 교체한다.
  • 데이터 마트의 치환
    • 테이블 파티셔닝은 DW구축에 유용
    • 데이터마트는 데이터 양이 한정되어 있어서 치환을 자주 한다.
    • 만약 치환이 오래 걸리면 파티셔닝 방법 사용
    • 한 시간 이내의 워크플로우면 치환으로 충분하다.
  • 집계테이블 : 팩트테이블을 집계해서 줄인것
  • 스냅샷, 이력 테이블 : 마스터 테이블과 같이 업데이트되는 테이블의 저장기록

최종적으로 팩트 + 디멘전을 결합 집계하여 비정규화 테이블을 완성시킨다.