대규모 분산 처리의 프레임워크
- 구조화 데이터
- 테이블의 칼럼, 데이터형, 테이블 간의 관계를 스키마라고 정의한다.
- 스키마가 명확한 데이터를 구조화된 데이터라고 한다.
- 비구조화 데이터
- 텍스트, 이미지 등
- 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 조합
- 데이터소스 → Hive를 통한 가공(데이터 구조화)
- 열지향 스토리지(Hive meta store)
- 팩트 & 디멘전 테이블 : 구조화 데이터
- Presto로 데이터 집약을 하여 시각화 도구에서의 활용 or 데이터마트로의 이동
Hive
- 텍스트 or 스키마리스데이터 무관하게 Hive에서 읽을 수 있다면, 쿼리를 고쳐서 테이블을 만들수있다.
- 구조화 데이터 작성법
- 외부테이블 지정
- 열 지향 스토리지로의 변환
- 비정규화 테이블 작성법
- 구조화가 완료되면, 데이터 마트의 구축이다. → 테이블 결합 및 집약을 통한 비정규화 테이블 만들기
- 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구축에 유용
- 데이터마트는 데이터 양이 한정되어 있어서 치환을 자주 한다.
- 만약 치환이 오래 걸리면 파티셔닝 방법 사용
- 한 시간 이내의 워크플로우면 치환으로 충분하다.
- 집계테이블 : 팩트테이블을 집계해서 줄인것
- 스냅샷, 이력 테이블 : 마스터 테이블과 같이 업데이트되는 테이블의 저장기록
최종적으로 팩트 + 디멘전을 결합 집계하여 비정규화 테이블을 완성시킨다.
'Data Engineering > Data Platform' 카테고리의 다른 글
빅데이터를 지탱하는 기술 - Chapter6 빅데이터 분석 기반의 구축 (0) | 2021.12.20 |
---|---|
빅데이터를 지탱하는 기술 - Chapter5 빅데이터의 파이프라인 (0) | 2021.12.16 |
빅데이터를 지탱하는 기술 - Chapter4 빅데이터의 축적 (0) | 2021.12.16 |
빅데이터를 지탱하는 기술 - Chapter2 빅데이터의 탐색 (0) | 2021.12.16 |
빅데이터를 지탱하는 기술 - Chapter1 빅데이터의 기초 지식 (0) | 2021.12.15 |