독서

[빅데이터를 지탱하는 기술] 3.빅데이터의 분산처리-대규모 분산 처리의 프레임워크

StoneSeller 2022. 4. 25. 17:52

다수의 컴퓨터에서 데이터 분산 처리를 위해서는 그 실행을 관리하기 위한 프레임워크가 필요하다.

 

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

기존의 데이터 웨어하우스에서는 데이터는 항상 구조화된 데이터로 축적하는 것이 일반적이다.

스키마가 명확하게 정의된 데이터를 구조화된 데이터라고 한다.

빅데이터의 경우에는 구조화된 데이터 뿐만 아니라 텍스트,이미지 등의 스키마가 없는 비구조화 데이터도 존재한다.

이런 비구조화 데이터를 분산 스토리지 등에 저장하고 그것을 분산 시스템에서 처리하는 것이 데이터 레이크의 개념이다.

 

 

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

데이터 소스에서 수집된 비구조화 데이터, 스키마리스 데이터는 분산 스토리지에 보존된다.

분산 스토리지에 수집된 데이터는 명확한 스키마를 갖지 않은 것도 많으므로 기존 상태로는 SQL로 집계할 수 없다.

따라서 스키마를 명확하게 한 테이블 형식의 구조화 데이터로 변환하는 과정이 필요하다.

 

비구조화 데이터를 읽어 열 지향 스토리지로 변환하는 과정에서는 데이터 가공 및 압축을 위해 많은 컴퓨터 리소스가 소비된다. 그래서 사용하는 것이 Hadoop과 Spark 등의 분산 처리 프레임워크이다.

 

 

Hadoop

Hadoop은 단일 소프트웨어가 아니라 분산 시스템을 구성하는 다수의 소프트웨어로 이루어진 집합체이다.

Hadoop의 기본 구성 요소

  • '분산 파일 시스템인 HDFS(Hadoop Distributed File System)
  • '리소스 관리자인 YARN(Yet Another Resource Navigator'
  • '분산 데이터 처리의 기반인 MapReduce' 

그 외의 프로젝트는 Hadoop 본체와는 독립적으로 개발되어 Hadoop을 이용한 분산 애플리케이션으로 동작한다.

Hadoop을 중심하는 데이터 처리는 다양한 소프트웨어 중에서 자신에게 맞는 것을 선택하고 그것들을 조합할 수 있다는 것이 특징이다.

(분산 파일 시스템으로 HDFS, 리소스 관리자는 Mesos, 분산 데이터 처리에는 Spark를 구성할 수 있다.)

 

 

분산 파일 시스템과 리소스 관리자

Hadoop에서 처리되는 데이터 대부분은 분산 파일 시스템인 HDFS에 저장된다.

네트워크에 연결된 파일 서버와 같은 존재이지만, 다수의 컴퓨터에 파일을 복사하여 중복성을 높인다는 특징이 있다.

 

리소스 관리자인 YARN은 CPU나 메모리 등의 계산 리소스를 관리한다.YARN은 애플리케이션이 사용하는 CPU코어와 메모리를 컨테이너 단위로 관리한다.Hadoop에서 분산 애플리케이션을 실행하면 YARN이 클러스터 전체의 부하를 보고 비어있는 호스트부터 컨테이너를 할당한다.

 

YARN 컨테이너
컨테이너라고 하면 가상화 기술 Docker를 떠올릴 수 있겠지만
YARN 컨테이너는 OS 수준의 가상화 기술이 아니라 어떤 호스트에서 어떤 프로세스를 실행시킬 것인지 결정하는 애플리케이션 수준의 기술이다.

리소스 관리자를 사용하면 애플리케이션마다 실행의 우선순위를 결정하여 리소스 낭비 없이 데이터 처리를 진행하는 것이 가능하다.

 

 

분산 데이터 처리 및 쿼리 엔진

MapReduce도 YARN 상에서 동작하는 분산 애플리케이션 중 하나이며, 분산 시스템에서 데이터 처리를 실행하는데 사용된다.

MapReduce는 임의의 자바 프로그램을 실행시킬 수 있기 때문에 비구조화 데이터를 가공하는데 적합하다.

 

SQL 등의 쿼리 언어에 의한 데이터 집계가 목적이라면 그것을 위해 설계된 쿼리 엔진을 사용한다.

Apache Hive는 쿼리를 자동으로 MapReduce 프로그램으로 변환하는 소프트웨어로 개발되었다.

 

MapReduce는 원래 대량의 데이터를 배치 처리하기 위한 시스템이다. 그렇기 때문에 작은 프로그램을 실행하려면 오버헤드가 너무 크기 때문에 쿼리 실행에는 적합하지 않다.

MapReduce를 계승한 Hive도 시간이 걸리는 배치 처리에는 적합하나, 애드 혹 쿼리를 여러번 실행하는 데는 부적합하다.

 

 

Hive on Tez

Hive를 가속화하기 위해 개발된 것이 Apache Tez이다.

MapReduce는 1회의 MapReduce 스테이지가 끝날 때까지 다음의 처리를 진행할 수 없으나

Tez의 경우 스테이지의 종료를 기다리지 않고 처리가 끝난 데이터를 차례대로 후속 처리에 전달함으로써 쿼리의 전체 실행 시간을 단축한다. 

 

현재의 Hive는 MapReduce뿐만 아니라 Tez를 사용해도 동작하게 되어있어 Hive on Tez, Hive on MR로 구분된다.

 

 

대화형 쿼리 엔진

Hive를 고속화 하는 것이 아니라 처음부터 대화형 쿼리 실행만 전문으로 하는 쿼리 엔진도 존재한다.

  • Apache Impala
  • Presto

MapReduce와 Tez는 장시간의 배치 처리를 가정해 한정된 리소스를 유효하게 활용하도록 설계되어있다.

대화형 쿼리 엔진은 순간 최대 속도를 높이기 위해 모든 오버헤드가 제거되어, 사용할 수 있는 리소스를 최대한 활용하여 쿼리를 실행한다.

  • Hive: 대량의 비구조화 데이터를 가공하는 무거운 배치 처리에는 높은 처리량으로 리소스를 활용할 수 있는 쿼리 엔진
  • Impala, Presto: 완성된 구조화 데이터를 대화식으로 집계할 때 사용하는 쿼리엔진

 

 

Spark

Hadoop의 연장선 위에 있는 Tez와 달리 Spark는 Hadoop과는 독립된 프로젝트이다.

Spark의 특징은 대량의 메모리를 활용하여 고속화를 실현하는 것이다.

 

컴퓨터에서 취급하는 메모리의 양이 증가함에 따라 가능한 많은 데이터를 메모리상에 올린 상태로 두어 디스크에는 아무것도 기록하지 않는 것이 가능하게 되었다.

MapReduce가 개발된 시절에는 훨씬 적은 메모리를 사용할 수 밖에 없었기에 처리의 대부분을 디스크의 읽고 쓰기에 사용하였다.

그러나 Spark는 중간 데이터를 디스크에 쓰지 않고 메모리에 보존한다. 그렇기 때문에 프로그램 실행 중에는 많은 메모리가 필요하지만 실행시간은 단축된다. 장애 등으로 메모리 상의 중간 데이터를 잃어버리면 중간까지 처리한 중간 데이터는 사라져버리지만 처리를 다시 시도하여 잃어버린 중간 데이터를 다시 만들 수 있다.

 

Spark는 Hadoop을 대체하는 것이 아닌 MapReduce를 대체하는 존재이다.

  • 분산 파일 시스템인 HDFS나 리소스 관리자인 YARN은 Spark에서 그대로 사용 할 수 있다.
  • Hadoop을 이용하지 않는 구성도 가능하며 분산 스토리지로 Amazon S3를 이용하거나 분산 데이터베이스인 카산드라를 읽어 들이는 것도 가능하다.

Spark의 실행은 자바 런타임이 필요하지만 Spark 상에서 실행되는 데이터 처리는 스크립트 언어를 사용할 수 있다는 것이 특징이다.

 

728x90