CHAPTER 3 빅데이터의 분산 처리
3-1. 대규모 분산 처리의 프레임워크
3-2. 쿼리 엔진
3-3. 데이터 마트의 구축
3-4. 요약
3장에서는 분산 시스템의 대표적인 프레임워크인 Hadoop과 Spark를 이용한 데이터 처리에 관해 설명한다.
'구조화 데이터'와 '비구조화 데이터'의 차이를 정리하고, Hadoop에서 구조화 데이터를 만들어서 집계할 때까지의 흐름을 설명한다. Hadoop과 Spark의 차이점을 정리한다.
구조화 데이터와 비구조화 데이터
SQL로 데이터를 집계하는 경우, 먼저 테이블의 칼럼 명과 데이터형, 테이블 간의 관계 등을 '스키마(schema)'로 정한다. 스키마가 명확하게 정의된 데이터를 '구조화된 데이터'라고 한다.
빅데이터는 반드시 구조화된 데이터만 있는 것이 아니라 자연 언어로 작성된 텍스트, 이미지, 동영상 등 미디어 데이터도 포함된다. 이러한 스키마가 없는 데이터는 '비구조화 데이터'라고 하고, 이 상태로는 SQL으로 집계할 수 없다.
비구조화 데이터를 분산 스토리지 등에 저장하고 그것을 분산 시스템에서 처리하는 것이 데이터 레이크이다.
스키마리스 데이터
CSV, JSON, XML 등과 같은 데이터는 서식은 정해져 있지만 칼럼 수나 데이터형은 명확하지 않아 '스키마리스 데이터'라고 불린다. 몇몇 NoSQL 데이터베이스는 스키마리스 데이터에 대응하고 있으며 데이터 레이크에서는 대량으로 축적된 스키마리스 데이터를 효율적으로 처리하기도 한다.
데이터 구조화의 파이프라인
각 데이터 소스에서 수집된 비구조화 데이터, 스키마리스 데이터는 처음에 분산 스토리지에 보존된다.
분산 스토리지에 수집된 데이터는 바로 SQL로 집계할 수 없다. 따라서 스키마를 명확하게 한 테이블 형식의 '구조화 데이터'로 변환한다.
구조화 데이터 중 시간에 따라 증가하는 데이터를 팩트 테이블, 그에 따른 부속 데이터를 디멘전 테이블로 취급한다. 데이터를 구조화하여 SQL로 집계 가능한 테이블을 만드는 것을 목적으로 한다.
열 지향 스토리지의 작성
Hadoop에서는 사용자가 직접 열 지향 스토리지의 형식을 선택하고, 자신이 좋아하는 쿼리 엔진에서 그것을 집계할 수 있다. Hadoop에서 사용할 수 있는 열 지향 스토리지는 여러 가지가 있는데, 각 특징이 다르다.
'Apache ORC'는 구조화 데이터를 위한 열 지향 스토리지로 처음에 스키마를 정한 후 데이터를 저장한다. 한편 'Apache Parquet'은 스키마리스에 가가운 데이터 구조로 되어 있어 JSON 같은 뒤얽힌 데이터도 그대로 저장할 수 있다.
이 책에서는 Apache ORC에 의한 스토리지 형식을 Hadoop상에서 열 지향 스토리지로 이용한다.
비구조화 데이터를 읽어 들어 열 지향 스토리지로 변환하는 과정에서 데이터의 가공 및 압축을 위해 많은 컴퓨터 리소스가 소비되는데, 이때 사용되는 것이 Hadoop과 Spark 등의 분산 처리 프레임워크이다.
Hadoop : 분산 데이터 처리의 공통 플랫폼
Hadoop은 단일 소프트웨어가 아닌 분산 시스템을 구성하는 다수의 소프트웨어로 이루어진 집합체이다. 대규모 분산시스템을 구축하기 위한 공통 플랫폼의 역할을 담당하고 있다.
분산 시스템의 구성 요소
Hadoop의 기본 구성 요소는
1) HDFS(Hadoop Distributed File System) - 분산 파일 시스템(distributed file system)
2) YARN(Yet Another Resource Negotiator) - 리소스 관리자(resource manager)
3) MapReduce - 분산 데이터 처리의 기반
의 3가지로 이루어져 있다.
그 외의 프로젝트는 Hadoop 본체와는 독립적으로 개발되어 Hadoop을 이용한 분산 애플리케이션으로 동작한다.
모든 분산 시스템이 Hadoop을 이용하는 것은 아니며 일부만 사용하거나 전혀 사용하지 않는 경우도 있다. 다양한 소프트웨어 중 자신에게 맞는 것을 선택하고 그것을 조합하여 시스템을 구성하는 것이 Hadoop을 중심으로 하는 데이터 처리의 특징이다.
분산 파일 시스템과 리소스 관리자
Hadoop에서 처리되는 데이터는 분산 파일 시스템인 HDFS에 저장된다. CPU나 메모리 등의 계산 리소스는 리소스 매니저인 YARN에 의해 관리된다. YARN은 애플리케이션이 사용하는 CPU 코어와 메모리를 컨테이너라고 불리는 단위로 관리하며, Hadoop에서 분산 애플리케이션을 실행하면 YARN이 클러스터 전체의 부하를 보고 비어 있는 호스트부터 컨테이너를 할당한다.
한정된 리소스로 다수의 분산 애플리케이션이 동시에 실행되면, 리소스 관리자는 어느 애플리케이션에 얼마만큼의 리소스를 할당할 지 관리함으로써 모든 애플리케이션이 차질 없이 실행되도록 제어한다.
리소스 관리자를 통해 애플리케이션마다 실행의 우선순위를 결정할 수 있으며, 우선되는 작업부터 실행함으로써 한정된 리소스를 낭비 없이 활용하여 데이터 처리를 진행한다.
분산 데이터 처리 및 쿼리 엔진
MapReduce도 YARN 상에서 동작하는 분산 애플리케이션 중 하나이며, 분산 시스템에서 데이터 처리를 실행하는 데 사용된다. 이는 자바 프로그램을 실행시킬 수 있어 비구조화 데이터를 가공하는 데 적합하다.
Apache Hive는 SQL 등의 쿼리 언어에 의한 데이터 집계가 가능하며, 쿼리를 자동으로 MapReduce 프로그램으로 변환하는 소프트웨어로 개발되었다.
MapReduce는 대량의 데이터를 배치 처리하기 위한 시스템이다. Hive 또한 시간이 걸리는 배치 처리에 적합하다.
Hive on Tez
Hive를 가속화하기 위해 개발된 것이 Apache Tez다. 이는 기존의 MapReduce를 대체할 목적으로 개발된 프로젝트이며, MapReduce에 있는 몇 가지 단점을 해소함으로써 고속화를 실현하고 있다.
Tez는 프로그램의 종료를 기다리지 않고 처리가 끝난 데이터를 차례대로 후속 처리에 전달함으로써 쿼리 전체의 실행 시간을 단축한다. Hive는 MapReduce뿐만 아니라 Tez를 사용해도 동작하게 재작성되어 있어 Hive on Tez라고 불린다.
대화형 쿼리 엔진
Apache Impala와 Presto는 Hive를 고속화하는 것이 아닌 대화형의 쿼리 실행만 전문으로 하는 쿼리 엔진이다.
대화형 쿼리 엔진은 순간 최대 속도를 높이기 위해 모든 오버헤드가 제거되어 사용할 수 있는 리소스를 최대한 활용하여 쿼리를 실행한다. 그 결과 MPP 데이터베이스와 비교하여도 빠른 응답 시간을 실현하고 있다.
Hadoop에서는 이러한 성질이 다른 쿼리 엔진을 목적에 따라 구분한다.
대량의 비구조화 데이터를 가공하는 무거운 배치 처리는 Hive를 사용하며, 이를 통해 완성한 구조화 데이터를 대화식으로 집계할 때는 Impala와 Presto 등을 사용한다.
Spark : 인 메모리 형의 고속 데이터 처리
Spark는 Hadoop과는 다른 독립된 프로젝트이며, MapReduce보다 더 효율적인 데이터 처리가 가능하다.
Spark의 특징은 대량의 메모리를 활용하여 고속화를 실현한다. MapReduce와 Tez는 처리해야 할 데이터의 양에 비해 적은 메모리를 사용했기 때문에 처리의 대부분을 디스크의 읽고 쓰기에 사용하였다.
그러나 컴퓨터에서 취급하는 메모리 양이 증가하면서, '가능한 한 많은 데이터를 메모리 상에 올린 상태로 두어 디스크에 아무것도 기록하지 않는다'라는 선택이 현실화되었다.
MapReduce 대체하기
Spark는 Hadoop이 아닌 MapReduce를 대체하는 존재이다. Spark의 실행은 자바 런타임이 필요하지만 이에 실행되는 데이터 처리는 스크립트 언어를 사용할 수 있다. 표준으로 자바, 스칼라, 파이썬, R 언어에 대응하고 있어 도입하기 쉽다.
또한 SQL로 쿼리를 실행하기 위한 기능이 포함되어 있어 대화형 쿼리 실행과 실시간 스트림 처리 또한 널리 이용되고 있다.
'AI & 빅데이터 > [Book] 빅데이터를 지탱하는 기술' 카테고리의 다른 글
[책정리] 빅데이터를 지탱하는 기술 : 3-3. 데이터 마트의 구축 (0) | 2022.06.20 |
---|---|
[책정리] 빅데이터를 지탱하는 기술 : 3-2. 쿼리 엔진 (0) | 2022.06.08 |
[책정리] 빅데이터를 지탱하는 기술 : 2-4. 데이터 마트의 기본 구조 (0) | 2022.06.03 |
[책정리] 빅데이터를 지탱하는 기술 : 2-3. 애드 혹 분석과 시각화 도구 (0) | 2022.05.24 |
[책정리] 빅데이터를 지탱하는 기술 : 2-2. 열 지향 스토리지에 의한 고속화 (0) | 2022.05.23 |