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. 이력 테이블 : 변경 내용만을 저장한다. (디멘전 테이블로 사용하기는 힘듦)
*
데이터의 구조화만 잘 되어 있으면 그 후는 데이터 웨어하우스와 같은 개념으로 데이터 마트를 구축할 수 있다.
팩트 테이블과 디멘전 테이블을 준비한 후, 결합 및 집계를 하면서 비정규화 테이블을 만든다. 디멘전으로 사용하는 데이터는 정기적인 스냅샷으로 이력을 축적한다. 따라서 디멘전의 카디널리티(각 칼럼이 취하는 값의 범위)만 작아지면 비정규화 테이블을 아주 작게 집약할 수 있다.
'Data > IT' 카테고리의 다른 글
[Python/백준] 11720번 문자열 (0) | 2023.10.22 |
---|---|
[Python/백준] 1181번 단어정렬 (0) | 2023.10.22 |
빅데이터를 지탱하는 기술 #Chapter 2 간략 정리 (0) | 2023.02.05 |
빅데이터를 지탱하는 기술 #Chapter 1 간략 정리 (0) | 2023.02.03 |
[Computer Structure] Cache Access Example (0) | 2020.06.24 |