본문 바로가기
데이터엔지니어링/빅데이터

Hadoop 도입

by 잼있는잼니 2023. 2. 17.

 

Hadoop은 분산 데이터 처리의 공통 플랫폼으로, 다음과 같은 구조로 다양한 소프트웨어로 구성되어 있다.

{"originWidth":816,"originHeight":639,"style":"alignCenter","caption":"Hadoop Ecosystem

 

Hadoop의 기본 구성 요소는 '분산 파일 시스템(distributed file system)'인 'HDFS(Hadoop Distributed File System)', '리소스 관리자(resource manager)'인 'YARN(Yet Another Resource Negotiator)' 그리고 '분산 데이터 처리(distributed data processing)'의 기반인 'MapReduce'로 이루어져 있으며, 이 외의 프로젝트는 Hadoop과 독립적으로 개발되어 Hadoop을 이용한 분산 어플리케이션으로 동작한다

 

즉, 모든 분산 시스템Hadoop에 의존적인것이 아니라, Hadoop을 일부만 이용하거나 전혀 이용하지 않는 구성도 존재한다는 의미이다

예를 들면, HDFS(분산 파일 시스템)를 사용하며, Mesos(리소스 관리자)를 사용하고, Spark(분산 데이터 처리)를 사용하는 구성도 가능하다는 의미이며, 자신에게 맞는 소프트웨어를 선택해 조합하여 사용하는것이 Hadoop 중심 데이터 처리의 특징이다

 

분산 파일 시스템과 리소스 관리자(HDFS, YARN)

 

Hadoop에서 처리되는 데이터들은 대부분 HDFS에 저장이 되며, 네트워크에 연결된 파일 서버와 같은 존재이지만, 다수의 컴퓨터에 파일을 복사하여 중복성을 높이는 특징이 있다.

 

아래는 HDFS의 아키텍쳐이다.

 

Namenode를 클러스터로 둔 상태에서 데이터들을 네트워크상에서 분산시켜 저장하고, 스트리밍 방식의 데이터 접근해서 데이터를 이용할 수 있는 방식이며, 일반적으로 데이터를 읽고, 쓰는 방식과 같다.

 

네트워크 방식 분산 시스템이라서 네트워크 복잡성을 생각해 주어야 한다.

Apache Hadoop 3.3.4 – HDFS Architecture

 

CPU나 메모리 등의 리소스는 리소스 매니저인 YARN을 통해 관리하며, YARN은 애플리케이션이 사용하는 CPU코어나 Memory를 '컨테이너'라 불리는 단위로 관리를 한다.

 

YARN이 애플리케이션이 실행되면, 클러스터의 부하를 보고 비어있는 호스트부터 컨테이너를 할당한다.

 

리소스 관리자를 사용하면 애플리케이션마다 실행의 우선순위를 결정할 수 있어, 한정된 리소스를 낭비 없이 활용하면서 데이터 처리를 진행하는게 가능하다.

 

아래는 YARN의 아키텍쳐이다.

 

클라이언트가 태스크를 리소스 관리자에게 보내면, 클러스터내의 노드들의 상태를 받고, 컨테이너들의 순위를 정하여 작동하게 한다.

Apache Hadoop 3.3.4 – Apache Hadoop YARN

여기서, YARN의 컨테이너는 어떤 노드에서 어떤 프로세스를 실행시킬 것인지 결정하는 애플리케이션 수준이라, Docker의 컨테이너와는 전혀 다른 컨테이너이다.

 

분산 데이터 처리 및 쿼리 엔진 (MapReduce, Hive)

 

MapReduce도 YARN 상에서 동작하는 분산 애플리케이션 중 하나이고, 분산 시스템에서 데이터 처리를 실행하는 데 사용한다. MapReduce는 자바 프로그램을 실행할 수 있어서 비구조화 데이터를 가공하는데 적합하다.

 

SQL등의 쿼리 언어에 의한 데이터 집계가 목적이라면 Hive를 사용한다.

MapReduce가 원래 대량의 데이터를 배치 처리하기 위한 시스템으로 개발이 되어서 작은 프로그램을 실행할 때 비효율적인데, Apache Hive 또한 MapReduce의 성질을 따르기 때문에 시간이 걸리는 배치 처리에 적합하지만, 애드 혹 쿼리를 여러 번 실행하는 데는 부적합하다.

Apache Tez – Welcome to Apache TEZ®

 

Hive on Tez

 

Hive를 가속화하기 위해 개발되었으며, MapReduce의 단점을 몇 가지 해소하여 고속화를 실현했다.

Apache Tez – Welcome to Apache TEZ®

MapReduce 프로그램에서는 1회의 MapReduce 스테이지가 끝날 때까지 다음의 처리를 진행할 수 없는데, Tez의 경우 스테이지 종료를 기다리지 않고 처리가 끝난 데이터를 차례대로 후속 처리에 전달함으로써 실행 시간을 단축한다.

 

대화형 쿼리 엔진 (Impala, Presto)

 

대화형의 쿼리 실행만 전문으로 하는 쿼리 엔진도 개발되고있으며, Impala와 Presto가 대표적이다.

MapReduce와 Tez는 장시간의 배치 처리를 가정해 한정된 리소스를 유효하게 활용하도록 설계되어 있으나, 대화형 쿼리 엔진은 순간 최대 속도를 높이기 위해 모든 리소스를 최대한 활용하여 쿼리를 실행한다. 그 결과로 대화형 쿼리 엔진은 MPP 데이터베이스와 비교해도 손색없는 응답 시간을 실현하고 있다.

 

Hadoop에서는 목적에 따라 다른 쿼리 엔진을 사용하며, 대량의 비구조화 데이터 가공하는 배치 처리에는 Hive를, 완성한 구조화 데이터를 대화식으로 집계시는 지연이 적은 Impala와 Presto를 사용한다

 

아래는 Impala와 Presto의 아키텍쳐이다.

Impala (apache.org)

 

 

Apache Presto - Architecture (tutorialspoint.com)

 

Spark (인 메모리 형의 고속 데이터 처리)

 

Spark는 Hadoop과는 다른 독립된 프로젝트이다.

Spark의 특징대량의 메모리를 활용하여 고속화를 실현하는 것으로, 디스크에 저장하는 것이 아니라 가능한 많은 데이터를 메모리상에 올려둔 상태로 작업을 진행하는 방식이다.

비정상 종료시 처리한 중간 데이터는 사라져 버리지만, 그때는 처리를 재시도하여 잃어버린 중간 데이터를 다시 만드는 것Spark의 개념이다.

 

Spark는 MapReduce를 대체하는 존재로, Hadoop을 이용하지 않는 구성도 가능하고, Hadoop 시스템을 이용하는 구성도 가능하며, Amazone S3이용하거나 카산드라에서 데이터를 읽어 들이는 것도 가능하다.

 

Spark의 실행은 자바 런타임이 필요하나, Spark 상에서 실행되는 데이터 처리는 스크립트 언어를 사용할 수 있기에, 자바, 스칼라, 파이썬, R 언어까지 대응이 되어 도입하기가 쉽다.

Spark는 SQL로 쿼리를 실행하기 위한 Spark SQL과 스트림 처리를 수행하기 위한 Spark Streaming이라는 기능이 처음부터 포함이 되어 있으며, 대규모 배치 뿐만 아니라 SQL에 의한 대화형 쿼리 실행실시간 스트림 처리까지 이용할 수 있다.

 

Cluster Mode Overview - Spark 3.3.2 Documentation (apache.org)

 

'데이터엔지니어링 > 빅데이터' 카테고리의 다른 글

Hive, Presto, Impala  (0) 2023.02.24
데이터 웨어하우스, 레이크, 마트, ETL  (0) 2023.02.06

댓글