4 minute read

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

이 장안에서의 목표

하둡과 스파크를 중심으로 하는 분산시스템의 구조에 대해서 알아본다.




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


구조화 데이터

구조화 데이터란 테이블등 칼럼명, 데이터형 테이블들 간의 관계가 기술돼있는 스키마가 있는 데이터로 주로 테이블이라는 것이 있다.

비구조화 데이터

텍스트 데이터, 이미지 등이 이에 해당하며, SQL로 집계하기가 어렵다.

스키마리스 (반 구조화) 데이터

csv, JSON XML 등이 해당하며, 서식은 있지만, 칼럼 수 데이터 형 등이 명확히 정의 되지 않은 데이터를 의미한다. 몇몇의 NoSQL은 스키마리스 데이터를 처리할 수 있도록 제공하고 있고, 최근 JSON으로 바로바로 데이터의 스키마를 정의하지 않고 데이터 레이크에서 분석에 필요한 필드만을 추출하는 경우가 많다.



데이터 구조화의 파이프라인


일반적인 구조화된 데이터는 열 지향된 스토리지로 압축율을 높여 저장된다. MPP 데이터 베이스로 전송되거나, 하둡 상에서 열 지향 스토리지로 변환하여 저장한다. MPP 데이터 베이스는 형식이 지정돼있어, 자동으로 형식에 맞게 저장되지만, 열 지향 스토리지에는 소프트 웨어마다 형식이 달라 Apache ORC, Apache Parquet 등등 다른 소프트웨어 마다 스토리지를 변환하는 과정이 다르다.

비구조화된 데이터를 읽어들여 열 지향 스토리지로 바꾸는 과정에서 데이터의 가공 및 압축을 위해 컴퓨터의 많은 리소스가 사용된다. 이때 사용 되는 것이 Hadoop 과 Spark 프레임워크이다.

MPP 데이터 베이스란? -2장

데이터를 압축하고, 여러 디스크에 분산시켜 지연을 줄이는 방법이 MPP (Massive Parallel Processing )이다. 대규모 병렬처리를 하게되며 이에 대한 예시로는 Amazon Redshift Google bigquery등이 있다.

MPP는 데이터 집계에 최적화 돼있고, 데이터 웨어하우스와 분석용 데이터베이스에서 많이 사용된다.

팩트테이블과 디멘전 테이블

구조화 데이터 중 시간에 따라 증가한는 데이터를 팩트테이블 , 그에 따른 파생테이블을 디멘전 테이블로 취급하여 데이터를 저장한다.


분산 시스템의 구성 요소

각각의 단계에서 섞어서 사용 가능하다

분산파일 시스템 HDFS

네트워크에 연결된 파일 서버 구글 드라이브 같은 것인데, 다수의 컴퓨터에 파일을 복사해서 중복성을 높인다.

리소스 관리자 YARN

CPU코어와 메모리를 컨테이너라고 불리는 단위로 관리하여 컴퓨터의 부하를 관리한다.

애플리케이션의 우선순위를 부여하여, 리소스를 낭비없이 활용하며 데이터를 처리할 수 있다.

분산 데이터 처리, 쿼리엔진 MapReduce ,Spark

MapReduce

리소스 관리자인 YARN에서 작동하는 분산 애플리케이션 중 하나이며, 대량의 데이터를 배치처리하는데 사용된다.

쿼리엔진

배치형 쿼리엔진 Hive

디스크 상에서 대량의 배치를 처리하는데 적합한 Hive

대화형 쿼리엔진 Apache impala, presto

애드혹 분석에 적합하게, 적은 양의 데이터 처리를 순간적으로 빠르게 할 수 있는 쿼리엔진, 오버헤드를 제거하여 빠른 응답시간을 가지고 있다.

중간 점검

글을 읽으면 읽을 수록 분산데이터 처리와 MPP의 차이가 잘 이해가 가지 않아 ,이 글의 도움을 받았다.
https://loustler.io/data_eng/bigdata-basic-4/
이 글을 읽어보면 도움이 된다. MPP는 하나의 query를 다수의 작은 task로 나누어서 병렬로 실행한다.

분산데이터 처리는 맵리듀스 기법을 사용한다고 하면,

Map: 분산(Spliting)할 데이터를 Key, Value 쌍으로 분산 처리해서 (예를 들어 cnt 문제라면 Key가 몇 번 나왔는지 Value에 저장) 처리 & 리스트 생성 Reduce: 각 분석된 데이터를 통합관리(Shuffling 한 뒤 Reducing. Filtering과 Sorting으로 원하는 데이터 추출하고, 중복 데이터를 제거하는 등)

출처 : https://eng-sohee.tistory.com/34

spark

하둡과 독립된 프로젝트로 대량의 메모리를 활용하여 고속화를 실현하는 것이다. 컴퓨터에서 취급하는 메모리가 증가함 에 따라 가능한 많은 데이터를 메모리상에 올려두고, 디스크에는 올려놓지 않는다는 특징이 있다. 이것이 최근 Mapreduce를 대체하고 있는 추세이다.

스파크에서는 대규모 배치처리뿐만 아니라, Spark SQL을 통한 SQL에 의한 대화형 쿼리 실행, 실시간 스트리밍 까지 SparkStreaming을 통해 할 수 있어 널리 이용돼고 있다 6장에서 계속..

스파크의 장점은 ETL(Extract Transform Load) 프로세스에서 부터 SQL까지의 일련의 흐름을 하나의 데이터 파이프라인으로 구축할 수 있다는 점이다.

스파크에서는 메모리 위에서 데이터가 저장되기 때문에, 메모리를 관리할 때 디스크에 스왑시키거나, 메모리의 사용을 사용자가 제어할 수 있어야 한다.




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

이번 장에서는 Hive를 통해 구조화 데이터를 (열 지향 스토리지) 를 생성하고, Presto를 통해 쿼리 엔진 중 대화식 쿼리를 살펴본다 .

복습 열지향 스토리지를 생성하는 이유?

(출처 : https://loustler.io/data_eng/bigdata-basic-4/) 데이터를 분석할 때는 데이터들의 일부만, 몇개의 column들만 aggregate의 대상이 되는 경우가 많다. 이럴 경우 Columnar DB는 그 column들만 load하면 되므로 필요없는 column까지 로드해야되는 Row Oriented DB와는 다르게 빠르게 데이터를 로드할 수 있다(Columnar DB는 column별로 데이터를 모아놓기 때문).

데이터 압축률 또한 우수한데, 종종 1개의 column에 같은 데이터가 들어가는 경우가 있다.이 때 같은 문자열의 반복 등은 매우 작게 압축할 수 있는데, 경우에 따라서 Row Oriented DB에 비해 1/10까지 데이터를 압축할 수 있다고 한다.

Hive를 통해 열 지향 스토리지로 변환하기

CREATE TABLE access_log_orc STORED AS ORC AS 
SELECT cast(time AS timestamp) time,
request,
status,
cast(bytes AS bigint) bytes
FROM access_log_csv 

ORC형식으로 변환한다. 파일크기는 CSV에 비해 1/10으로 줄어들고, 집계의 속도가 고속화된다.

Presto

대화형 쿼리엔진인 프레스토는 쿼리를 디스크에 쓰지 않고 메모리상에서 실시한다. 열지향의 데이터(ORC)데이터를 빠르게 집계할 수 있다.




데이터 마트의 구축

팩트테이블

팩트 테이블은 시계열 데이터이다. 팩트 테이블의 작성방법에는 추가와 치환의 방법이 있다. 추가는 말그대로 insert 하는 것이고 치환은 테이블을 하나 더 만드는 것이다.

효율을 생각하면 추가가 압도적으로 유리하지만, 추가가 가지고 있는 잠재적인 문제가 세가지가 있다.

  1. 추가에 실패한 것을 알아채지 모하면 팩트테이블 일부에 결손이 생긴다
  2. 추가를 잘못해서 여러번 실행하면 팩트테이블의 일부가 중복된다.
  3. 나중에 팩트 테이블을 다시 만들고 싶은경우 관리가 복잡해진다.

이런 문제를 방지하고자 테이블 파티셔닝이라는 기술을 사용한다. 이는 하나의 테이블을 물리적인 여러개의 파티션으로 나누어서 파티션 단위로 테이블을 정리하는 것이다. 이런 파티셔닝은 데이터 웨어하우스를 구축하는데 유용하다.

집계테이블

팩트 테이블을 모아서 집계해서 데이터를 줄인다. 일별, 주별 집계 데이터 작성하기. 칼럼이 취하는 값들의 범위를 카디널리티라고 한다. 가령 성별의 경우는 0,1 로 카디널리티가 매우 작은편이다.

스냅샷 테이블

정기적으로 데이터를 통째로 저장하는 것을 스냅샷 테이블이라고 한다. 스냅샷 테이블은 다른 팩트 테이블과 결합함으로써 디멘전 테이블로도 사용가능하다. 백업의 용도로 사용하는 것 같다.

Updated:

Leave a comment