독서

[빅데이터를 지탱하는 기술] 3.빅데이터의 분산처리-쿼리 엔진

StoneSeller 2022. 4. 29. 21:57

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

 

1. 분산 스토리지에 저장된 데이터를 구조화하고 열 지향 스토리지 형식으로 저장한다.

다수의 텍스트 파일을 읽어 들여 가공하는 부하가 큰 처리가 되기 때문에 Hive를 이용한다.

 

2. 완성된 구조화 데이터를 결합, 집계하고 비정규화 테이블로 데이터 마트에 써서 내보낸다.

열 지향 스토리지를 이용한 쿼리 실행에는 Presto를 사용함으로써 실행 시간을 단축할 수 있다.

 

Hive에서 만든 각 테이블의 정보는 Hive 메타 스토어라고 불리는 특별한 데이터베이스에 저장된다.

 

 

Hive에 의한 구조화 데이터 작성

csv 파일을 읽어 들인다고 가정한다. 그러나 csv 파일을 그대로 집계하는 것은 비효율적이므로 열 지향 스토리지로 변환한다.

열 지향 형식 스토리지 형식인 ORC 형식으로 변환하는데는 다소 시간이 걸리지만, 변환 후의 테이블 집계 속도는 훨씬 단축된다. 그러나 작성까지의 시간이 걸리는 프로세스이므로 Hive와 같은 배치형의 쿼리 엔진에서 실행하는 데 적합하다.

 

데이터 집약

데이터 구조화가 완료된 후에는 테이블을 결합 및 집약해서 비정규화 테이블을 작성한다.

이 때 대화형 쿼리 엔진(ex: Presto)을 사용할지, 배치형 쿼리 엔진(ex: Hive)를 사용할 지 선택해야 한다.

Hive와 같은 배치형 쿼리 엔진은 대량 출력을 수반하는 대규모 데이터 처리에 적합하다.

Presto같은 대화형 쿼리 엔진은 쿼리 실행의 지연을 감소시키는 것을 목적으로 개발된 것이여서 작은 쿼리를 여러번 실행하는 대화형 데이터 처리에 적합하다. 

 

 

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

MPP 데이터베이스

구조화 데이터를 SQL로 집계하는 것 뿐이라면 기존의 데이터 웨어하우스 제품과 클라우드 서비스를 이용하는 것이 좋다. 그러나 대량의 텍스트 처리나 NoSQL 데이터베이스에 저장된 데이터를 집계하고 싶은 경우에는 분산 시스템의 프레임워크가 유리하다.

MPP 데이터베이스는 완성한 비정규화 테이블의 고속 집계에 최적이다.

 

Hive

Hive는 데이터 양에 좌우되지 않는 쿼리 엔진이다.

특히 텍스트 데이터를 가공하거나 열 지향 스토리지를 만드는 등의 무거운 처리는 처리 시간이 오래 걸리는 편이여서 Hive에서 실행하는 것이 적합하다.

분산 시스템의 동향이 인 메모리 데이터 처리로 옮겨가고 있지만, Hive는 앞으로도 데이터양에 좌우되지 않는 쿼리 엔진으로 이용될 것이다.

 

Presto

Presto는 Hive와는 정 반대로 속도 중시, 대화식에 특화된 쿼리 엔진이다. 그래서 쿼리 실행 중 장애가 발생하면 오류가 떠서 처음부터 다시 실행한다. 또 메모리가 부족하면 쿼리를 실행할 수 없는 경우가 발생하기도 한다.
Presto는 윈도우 함수 및 표준 SQL을 준수하기 때문에 일상적인 데이터 분석에 자주 사용되는 쿼리 엔진이다.

 

대화식 쿼리 실행에 특화되어 있기 때문에 ETL 프로세스 및 데이터 구조화에는 적합하지 않다. 
단시간에 대량의 리소스를 소비하기 때문에 시간이 걸리는 배치 처리는 Hive에 맡기거나 클러스트를 나누는 등으로 Presto가 대화식 쿼리를 위해 여유를 갖게 하는 것이 좋다.

 

Spark

Spark는 SQL에 특화된 쿼리 엔진은 아니지만 인 메모리의 데이터 처리가 중심이며 대화형 쿼리 실행에 적합하다.

Spark의 장점은 ETL 프로세스에서 SQL에 이르기까지의 일련의 흐름을 하나의 데이터 파이프라인으로 기술할 수 있다는 점이다.

 

앞서 데이터 마트 구축의 파이프라인을 Hive에 의한 데이터 구조화 후 Presto에 의한 SQL의 실행으로 설명하였는데 Spark는 이 둘을 하나의 스크립트 안에서 실행할 수 있다.

즉, 텍스트 데이터를 읽고 열 지향 스토리지로 변환하고 그것을 SQL로 집계해서 결과를 내보내는 등의 일련의 프로세스를 한 번의 데이터 처리로 기술할 수 있다.

 

데이터 처리를 일종의 프로그래밍으로 생각하고 그것을 위한 실행 환경을 원한다면 Spark를 선택하는 방법이 있다.

그러나 SQL을 사용하고 싶은 것 뿐이라면 처음부터 SQL에 특화된 쿼리 엔진과 MPP 데이터베이스를 선택하는 것이 좋다. 

 

 

728x90