Chapter 3. 빅데이터의 분산 처리

 

 

구조화 데이터 : 스키마가 명확하게 정의된 데이터

비구조화 데이터 : 스키마가 존재하지 않는 데이터

      - 이를 분산 스토리지 등에 저장하고, 분산 시스템에서 처리하는 것이 데이터 레이크의 개념이다.

         - 데이터를 가공하는 과정에서 스키마를 정의하고, 구조화된 데이터로 변환함으로써 분석 가능하다.

 

스키마리스 데이터 : 기본 서식인 존재하나 스키마 정의가 되지 않은 데이터로, 컬럼 수나 데이터형이 명확하지 않다.

 

분산 스토리지에 수집된 스키마리스 데이터 등은 SQL 집계가 불가하다. 따라서, 구조화 데이터로 변환하는 과정이 필요하다.

  - 구조화 데이터는 압축률을 높이기 위해 열 지향 스토리지로 저장한다.

 

열 지향 스토리지

1. Apache ORC : 구조화 데이터를 위한 스토리지로, 처음에 스키마를 정한 후 데이터를 저장한다.

2. Apache Parquet : 스키마리스에 가까운 데이터구조로 되어 있어 json 데이터도 그대로 저장할 수 있다.                               - 비구조화 데이터를 읽어 들여 열 지향 스토리지로 변환하는 과정에서 많은 컴퓨터 리소스를 소비하는데,

     - 이때 Hadoop, Spark 등의 분처리 프레임 워크를 사용한다.

 

Hadoop : 분산 시스템을 구성하는 다수의 소프트웨어로 이루어진 집합체로, 대규모 분산시스템 구축을 위한 공통 플랫폼 역할을 한다.

크게 3가지로 구분되며,

  1. HDFS : Hadoop에서 처리되는 데이터 대부분을 저장한다. 다수의 컴퓨터에 파일을 복사해서 중복성을 높인다.

  2. Yarn : 리소스 매니저로, CPU와 메모리를 '컨테이너(Container)' 단위로 관리한다. 어플리케이션마다 실행 우선순위를 결정하는 것이 가능하다.

  3. MapReduce : Yarn 상에서 동작하며, 대량의 데이터를 배치 처리하기 위한 시스템이다. (* 1회의 스테이지가 모두 끝나야 다음 처리가 진행 가능한데, 이러한 단점을 보완한 것이 Apache Tez이다. Tez는 1회의 스테이지가 모두 끝날 때까지 기다릴 필요 없이, 끝나자마자 바로 다음 처리로 넘어가는 것이 가능하여 고속화를 실현한 시스템이다.)

 

대화형 쿼리엔진에는 1. Impala 2. Presto가 대표적으로 있으며, 구조화 데이터를 대화식으로 집계할 때 지연이 적은 이 두가지를 사용한다.

 

Spark : 대량의 메모리를 활용하여 고속화를 실현한 프레임 워크이다. (MapReduce 대체) 메모리로 어떻게 관리하느냐가 중요한 포인트이며, 가능한 많은 데이터를 메모리 상에 올린 상태로 두어 디스크에는 아무것도 기록하지 않는다는 것이 특징이다. (* 컴퓨터가 비정상적으로 종료될 시에는 중간까지 처리한 데이터가 소멸되고, 이때 다시 처리를 시도하여 잃어버린 중간 데이터를 다시 생성한다.)

 

Hive : 시간이 걸리는 배치 처리 시에 사용하며, 대규모 데이터 처리에 적합하다.

 

Presto : 쿼리 실행의 지연을 감소시키는 것을 목적으로 개발되었으며, 플러그인이 가능한 스토리지 설계가 특징이다. 전용 스토리지를 가지고 있지 않기 때문에 Hive와 마찬가지로 다양한 데이터 소스에서 직접 데이터를 읽어 들인다. 특히 SQL 실행에 특화되어 있고, 일단 실행이 시작되면 중간에 끼어들 수 없다. 따라서 너무 큰 쿼리는 실행할 수 없다.  (* 디스크 사용하는 Hive와 달리 메모리 상에서 데이터를 처리하며, 분산 결합을 실시한다.)

 

팩트 테이블

1. 추가 : 새로 도착한 데이터만을 증분으로 추가한다.

2. 치환 : 과거의 데이터를 포함하여 테이블 전체를 치환한다.

 

추가의 잠재적인 문제는 크게 3가지로,

1. 추가에 실패한 것을 알아채지 못하면 팩트 테이블의 일부에 결손이 발생할 수 있다.

2. 추가를 잘못해서 여러 번 실행하면 팩트 테이블의 일부가 중복되는 문제가 발생할 수 있다.

3. 추후 팩트 테이블을 다시 만들고 싶은 경우 관리가 복잡해진다.

이러한 문제 발생 가능성을 줄이기 위해 테이블 파티셔닝 기술을 사용한다. (* 테이블 파티셔닝 : 하나의 테이블을 여러 물리적인 파티션으로 구분함으로써 파티션 단위로 정리하여 데이터를 쓰거나 삭제가 가능하도록 한다.)

 

마스터 테이블에 대한 두 가지 방안

1. 스냅샷 테이블 : 정기적으로 테이블을 통째로 저장한다. (일종의 팩트 테이블)

2. 이력 테이블 : 변경 내용만을 저장한다. (디멘전 테이블로 사용하기는 힘듦)

 

*

데이터의 구조화만 잘 되어 있으면 그 후는 데이터 웨어하우스와 같은 개념으로 데이터 마트를 구축할 수 있다.

팩트 테이블과 디멘전 테이블을 준비한 후, 결합 및 집계를 하면서 비정규화 테이블을 만든다. 디멘전으로 사용하는 데이터는 정기적인 스냅샷으로 이력을 축적한다. 따라서 디멘전의 카디널리티(각 칼럼이 취하는 값의 범위)만 작아지면 비정규화 테이블을 아주 작게 집약할 수 있다.

 

Chapter 2. 빅데이터의 탐색

 

 

크로스 테이블 : 행과 열이 교차하는 부분에 숫자 데이터가 들어간다. 

트랜잭션 테이블 : 행 방향으로만 데이터가 증가한다. (* 트랜잭션 테이블에서 크로스 테이블로의 변환 과정을 크로스 집계라고 한다.)

 

* 데이터 마트의 크기에 따라 시스템 구성이 결정된다.

 

RDB는 원래 지연이 적고, 동시 접속 수가 많아도 성능 악화가 되지 않는다. 다만, 메모리가 부족하면 성능 저하가 된다.

   많은 양의 데이터 처리를 위해 열 지향 스토리지가 필요하다. 따라서 MPP DB를 활용한다.

 

행 지향 데이터베이스 

1. 매일 발생하는 대량의 트랜잭션을 지연 없이 처리하기 위해 데이터 추가를 효율적으로 할 수 있게 한다.

2. 데이터 검색 고속화를 위한 인덱스를 생성하지만, 데이터 분석 시에는 거의 도움이 되지 않는다.

열 지향 데이터베이스

1. 데이터를 미리 컬럼 단위로 정리하여 필요한 컬럼만을 로드함으로써 디스크 I/O를 줄인다.

2. 데이터 압축의 효율이 우수하다.

 

MPP DB : 고속화를 위해 CPU와 디스크 모두 균형있게 늘려야 한다. 하드웨어 수준에서 데이터 집계에 최적화된 DB이다.

집계 시스템 종류 스토리지의 종류 최적의 레코드 수
RDB 행 지향 ~ 수천 만 정도
MPP DB 열 지향(HW 일체형) 수억 ~
대화형 쿼리 엔진 열 지향(분산 스토리지에 보관) 수억 ~

데이터베이스에 사용되는 주요 기술

 

 

OLAP : 데이터 집계를 효율적으로 하는 접근 방법 중 하나로, 다차원 모델의 데이터 구조를 MDX 등 쿼리 언어로 집계한다.

   OLAP 큐브 : 데이터 분석을 위해 만들어진 다차원 데이터이다. (* 이를 크로스 집계하는 구조가 OLAP)

 

데이터 마트를 만들 때, 팩트 테이블 중심으로 여러 디멘전 테이블을 결합하여 스타 스키마를 생성한다.(단순/성능상의 이유로 사용)

  MPP DB 같은 열 지향 스토리지를 갖는 시스템 보급에 따라 처음부터 모든 컬럼을 팩트 테이블에 포함하여 비정규화 테이블이리고 부른다.

Chapter 1. 빅데이터의 기초 지식

 

 

빅데이터 기술

1. Hadoop : 다수의 컴퓨터에서 대량 데이터 처치를 위한 시스템으로, 확장성이 뛰어나다. (*SQL+Hadoop = Hive)

2. NoSQL : 전통적인 RDB의 제약을 제거하는 것을 목표로 한 DB의 총칭으로, 애플리케이션에서 온라인으로 접속한다.

- 빅데이터 기술은 기존의 데이터 웨어하우스와는 달리 다수의 분산 시스템을 조합하여 확장성이 뛰어난 데이터 처리 구조를 만든다. 

 

 

데이터 파이프라인 : 차례대로 전달해나가는 데이터로 구성된 시스템을 의미한다.

데이터 수집에는 총 2가지의 종류가 있는데,

1. 벌크형 : 이미 어딘가에 존재하는 데이터를 정리해 추출하는 것으로, 정기적인 데이터 수집에 사용한다.

2. 스트리밍형 : 차례대로 생성되는 데이터를 끊임없이 보내는 것으로, 주로 모바일 애플리케이션, 임베디드 장비 등에서 데이터 수집하는 데에 사용한다.

 

 

분산 스토리지는 1. 객체 스토리지 2. NoSQL 데이터베이스가 있다.

 

 

워크플로 관리 : 전체 데이터 파이프라인의 동작 관리

 

 

데이터 웨어하우스 : 대량의 데이터를 장기 보존하는 것에 최적화되어 있으며, 과부하를 방지하기 위해 필요한 데이터만을 추출하여 데이터 마트를 구축한다.

   > 데이터 소스 : 업무 시스템을 위한 RDB나 로그 등을 저장하는 파일 서버

      > 로우 데이터를 추출하고 가공 후 데이터 웨어하우스에 저장하기까지의 흐름을 ETL 프로세스라고 한다.

 

 

애드 혹 분석(ad hoc analysis) : 일회성 데이터 분석으로, SQL 쿼리를 직접 작성 후 실행하거나 스프레드시트에서 그래프 만들기 등의 분석이 이에 해당한다.

 

 

빅데이터 도구를 선택할 때엔,

1. 저장할 수 있는 데이터 용량에 제한이 없을 것

2. 데이터를 효율적으로 추출할 수단이 있을 것 

데이터 파이프라인의 큰 흐름은 변하지 않기 때문에 위 2가지를 파악해서 선택한다.

 

데이터 수집 목적은 검색, 가공, 시각화 3가지가 있다.

 

확증적 데이터 분석 : 가설을 세우고 검증하는 분석으로, 통계학적 모델링을 따른다.

탐색적 데이터 분석 : 데이터를 보며 의미를 파악하는 분석으로, 데이터 시각화를 통해 데이터를 파악한다.

Tag, offset, index를 어떻게 구하는지부터가 난관이었고..

지금도 이해가 100%된건 아니지만.. 뭐 direct mapped와 fully-associative 방식으로 어떻게 access하는지 정도는 이해했다.

n-way associative는 내일 다시 해봐야겠다

 

사실 cpu, cache, 가상 메모리 부분이 제일 어렵다고들 하는데 

진짜 어렵긴 어렵지만 뭔가 제일 재밌는 챕터라서 공부하는 맛이 난다

물론 이해를 했는지 안했는지의 문제는 별개로... 그냥 재밌다

 

ex. 16B/blocks

256blocks

--> offset = 4bits, index = 8bits, Tag = 32-4-8=20bits

먼저 index를 보고, 그 다음 Tag를 보면 되는데, 이때 Tag까지 최종적으로 동일하다면 Hit.

 

악필은 아이패드에서도 악필이구나

 

 

https://www.youtube.com/watch?v=RqKeEIbcnS8&t=1s

도움이 많이 됐던 예제 동영상

 

+ Recent posts