Hadoop과 Data Lake

박태현 Taehyun Park·2024년 1월 21일

Hadoop과 Hadoop Ecosystem

Hadoop이란?

Hadoop이란 하나의 성능 좋은 컴퓨터를 이용하여 데이터를 처리하는 대신 적당한 성능의 범용 컴퓨터 여러대를 클러스터화하고 큰 크기의 데이터를 클러스터에서 병렬로 동시에 처리하여 처리 속도를 높이는 것을 목적으로 하는 분산처리를 위한 오픈소스 프레임워크이다.

Hadoop의 개발 배경

2000년대 구글은 빠르게 성장 중이였지만 큰 문제에 빠져있었다. 검색을 하기 위한 색인 시스템이 멈추고, 검색에 대한 결과로 5달이나 지난 결과를 반환하는 것이였다. 그 결과를 찾기 위해 코드를 살펴봐도 논리적으로 버그는 없었다.
결국 세밀한 분석 끝에 구글의 엔지니어들은 그 원인이 하드웨어 이상 동작이라는 것을 알았다. 인터넷이 급격히 성장하면서 검색엔진이 감당해야 할 문서가 매우 많아졌고 그 결과 범용 컴퓨터에서는 크고 작은 물리적 결함들이 발생하게 되었다. 그래서 구글은 신뢰성이 낮은 컴퓨터에서도 많은 양의 문서를 처리할 수 있는 소프트웨어 기술을 개발하게 되었고 이것이 Hadoop의 시작이 되었다.

Hadoop의 Core Component(HDFS & MapReduce)

HDFS와 MapReduce는 하둡을 구성하는 각각의 요소들이다. HDFS는 하둡의 스토리지, MapReduce는 하둡의 연산을 담당한다.

HDFS(Hadoop Distributed File System)

HDFS는 하둡 분산 파일 시스템 (Hadoop Distributed File System)이다. 네트워크로 연결된 여러 머신의 스토리지를 관리하는 하둡의 저장소 역할을 한다.
수백 메가바이트, 기가바이트 또는 테라바이트 크기의 매우 큰 파일들을 여러 머신에 나누어 저장하기 위해 만들어졌다. 한 번 쓰고 여러 번 읽는 것에 중점을 두어 설계되었다.

네임 노드와 데이터 노드로 이루어져 있다. 네임 노드는 HDFS에서 마스터 역할을 하며 서버 한 대로 구성된다. 네임 노드는 파일 시스템 트리와 모든 파일과 디렉터리에 대한 메타데이터를 유지한다. 
데이터 노드는 슬레이브 역할을 하며 여러 대로 구성된다. 클라이언트와 네임 노드의 요청으로 인한 블록 저장과 탐색을 담당한다.

MapReduce

맵리듀스는 데이터 처리를 위한 프로그래밍 모델이다. 대용량 데이터 처리를 분산 병렬 컴퓨팅에서 처리하기 위한 목적으로 만들어졌다. 맵 리듀스는 하둡의 계산을 담당한다.

맵리듀스는 맵과 리듀스 단계로 나누어진다.
Input -> Splitting -> Mapping -> Shuffling -> Reducing -> Final Result

  • Map 단계
    맵 단계는 입력 데이터를 가공하여 사용자가 원하는 정보를 key-value 쌍으로 변환한다. 이때 맵 리듀스 잡의 입력 크기를 스플릿이라고 한다. 하둡은 각 스플릿 마다 하나의 맵 태스크를 생성하게 된다. 만들어진 맵 태스크는 스플릿의 레코드를 Map 함수로 처리한다. 그러면 key-value 구조를 가지는 중간 산출물이 생성된다.
  • Reduce 단계
    중간 산출물을 key 기준으로 각 리듀스로 분배하고, 사용자가 정의한 방법으로 각 key 관련된 정보를 추출하는 단계이다. 중간 산출물을 정렬하고 하나로 합쳐 리듀스 태스크로 생성하고, 사용자 정의 리듀스 함수로 전달 된다. 만들어진 결과물은 안정성을 위해 일반적으로 HDFS에 저장된다.

Hadoop Ecosystem

하둡의 코어 프로젝트는 HDFS와 MapReduce지만 그 외에도 다양한 서브 프로젝트들이 많이 있다. 하둡 에코시스템은 바로 그 프레임워크를 이루고 있는 다양한 서브 프로젝트들의 모임이라고 볼 수 있다. 아래 크림들은 하둡 에코시스템을 나타낸 것이다.

Zookeeper

분산 환경에서 서버들간에 상호 조정이 필요한 다양한 서비스를 제공하는 시스템.
1. 하나의 서버에만 서비스가 집중되지 않도록 서비스를 알맞게 분산하여 동시에 처리하게 해줌
2. 하나의 서버에서 처리한 결과를 다른 서버들과도 동기화 -> 데이터 안정성 보장
3. 운영(active) 서버에서 문제가 발생해 서비스를 제공할 수 없는 경우, 다른 대기중인 서버를 운영 서버로 바꿔 서비스가 중지없이 제공되게 해줌
4. 분산 환경을 구성하는 서버들의 환경설정을 통합적으로 관리
공식 사이트 : http://zookeeper.apache.org/

HBase

HDFS의 칼럼 기반 데이터베이스
구글의 BigTable 논문을 기반으로 개발된 것으로, 실시간 랜덤 조회 및 업데이트가 가능하며, 각각의 프로세스들은 개인의 데이터를 비동기적으로 업데이트 할 수 있다. 단, MapReduce는 일괄처리 방식으로 수행된다. 
공식 사이트 : http://hbase.apache.org

Hive

하둡 기반의 데이터웨어하우징용 솔루션
페이스북에서 만든 오픈소스로, SQL과 매우 유사한 HiveQL이라는 쿼리를 제공한다. 그래서 자바를 잘 모르는 데이터 분석가들도 쉽게 하둡 데이터를 분석할 수 있게 도와준다.
HiveQL은 내부적으로 MapReduce 잡으로 변환되어 실행된다.
공식 사이트 : http://hive.apache.org

Impala

클라우드데라에서 개발한 하둡 기반의 실시간 SQL 질의 시스템
맵리듀스를 사용하지 않고, 자체 개발한 엔진을 사용해 빠른 성능을 보여준다. 
임팔라(Impala)는 데이터 조회를 위한 인터페이스로, HiveQL을 사용합니다. 수초 내에 SQL 질의 결과를 확인할 수 있으며, HBase와도 연동이 가능하다.
공식 사이트 :  https://github.com/cloudera/impala)

Kafka

  • 분산 메시징 시스템으로 데이터 파이프라인 구축 시 주로 사용
  • 대용량 실시간 로그처리에 특화되어 있음.
  • 데이터를 안전하게 전달하는 것이 주 목적.
  • fault-tolerant + 빠르게 데이터 처리 가능
  • publisher가 message를 topic에 맞게 broker에게 전달하면 consumer가 요청을 통해 가져가는 방식.

YARN

Hadoop에서 자원관리 및 작업 스케줄링에 대한 책임을 YARN에게 넘겨 주어 YARN을 바탕으로 실시간 처리를 위한 Spark, SQL 전용의 Hive, NoSQL 전용의 HBase등 다양한 도구를 사용할 수 있도록 하였다.

  • HDFS의 상단에서 빅데이터용 애플리케이션들을 실행하는 대용량 분산 운영체제 역할을 수행한다.
  • 구성
    • resource manager : 클러스터 전체를 관리하는 마스터 서버의 역할을 담당하며, 응용 프로그램의 요청을 처리한다.
    • node manager : 노드당 하나씩 존재하며, slave node의 자원을 모니터링하고 관리하는 역할을 수행한다.
    • application master : node manager와 함께 번들로 제공되며, 작업당 하나씩 생성이 되며, 컨테이너를 사용하여 작업 모니터링과 실행을 관리한다.
    • container : CPU, disk, memory등과 같은 resource를 모아둔 패키지.

Spark

빠른 성능을 위해 인메모리 캐싱과 최적화 된 실행을 사용하고 일반 배치처리, 스트리밍 분석, 머신러닝, 그래프 데이터 베이스 및 임시 쿼리를 지원한다.

  • 인메모리 데이터 엔진을 통해 초기 맵리듀스의 성능상 한계를 크게 극복케 함
  • 스파크가 하둡에 비해 10배 정도 속도가 더 빠르다
  • 하둡 기반으로 구동하는 것을 목적으로 만들어짐
  • 스파크나 하둡이나 비슷한 역할을 하기 때문에 하둡이 꼭 필요하진 않음
  • 탄력적 분산 데이터셋을 이용하여 데이터 객체들을 클러스터 전반에 분산해서 사고 시 완벽 복구 가능
  • JAVA, Python, R 등 다양한 언어를 사용해 스파크와 연동 가능
    Hadoop + Spark를 같이 사용하여 하둡의 YARN 위에 스파크를 얹고, 실시간성이 필요한 데이터는 스파크로 처리하는 방식으로 아키텍처를 구성하여 동작한다.

Data Lake

Data Lake와 Data Warehouse

데이터 레이크는 대량의 데이터를 원래 형식으로 수집하고 저장하는 중앙 집중식 저장소이다. 그런 다음 데이터를 처리하고 다양한 분석 요구 사항에 대한 기초로 사용할 수 있다. 확장성이 뛰어난 개방형 아키텍처로 인해 데이터 레이크는 정형(데이터베이스 테이블, Excel 시트), 반정형(XML 파일, 웹 페이지), 비정형(이미지, 오디오 파일, 트윗)까지 모든 원본의 모든 데이터 형식을 저장할 수 있다. 데이터 파일은 일반적으로 미리 구성된 영역(원시, 정리 및 큐레이팅)에 저장되므로 다양한 유형의 사용자가 다양한 형식의 데이터를 사용하여 요구 사항을 충족할 수 있다. 데이터 레이크는 다양한 애플리케이션에서 핵심 데이터 일관성을 제공하여  빅 데이터 분석,  기계 학습, 예측 분석 및 기타 형태의 지능형 작업을 지원한다.

데이터 레이크데이터 웨어하우스
유형정형, 반정형, 비정형정형
관계형, 비관계형관계형
스키마읽기 시 스키마쓰기 시 스키마
Format원시, 필터링되지 않음처리됨, 점검됨
원본빅 데이터, IoT, 소셜 미디어, 스트리밍 데이터응용 프로그램, 비즈니스, 트랜잭션 데이터, 일괄 처리 보고
확장성저렴한 비용으로 손쉽게 스케일링스케일링이 어렵고 비용이 많이 듦
사용자데이터 과학자, 데이터 엔지니어데이터 웨어하우스 전문가, 비즈니스 분석가
사용 사례기계 학습, 예측 분석, 실시간 분석핵심 보고, BI

데이터 레이크와 데이터 웨어하우스의 가장 큰 차이는 데이터를 저장하고 읽는 방식이다. 데이터 레이크는 정형부터 비정형 데이터 까지 다양하게 원시 데이터의 형태로 저장하고 있기 때문에 쓰기 시에 스키마가 필요없고 나중에 읽을 때 스키마가 필요하다(Schema on read). 반면 데이터 웨어하우스는 쓰기 스키마(Schema on write)이 필요하다.

Data Lake의 특징

  1. 데이터를 저장할 때 데이터를 정제하지 않는다.
  2. 정형, 반정형, 비정형 데이터를 저장 할 수 있다.
  3. 미리 정의된 목적이 없는 데이터를 저장한다.
  4. 즉시 데이터를 수집 할 수 있다.(ETL과정이 없거나 줄어든다.)
  5. 환경설정이 유연하다.
  6. 부서별, 분야별로 흩어진 데이터를 한데 모아 조직에서 시너지를 강화하도록 지원한다.

Data Lake의 한계

  1. Data Lake를 잘못관리하면 Data Swamp(데이터 늪)이 될 수 있다.
    -> 데이터 거버넌스와 감독, 데이터의 메타데이터를 잘 관리 해야한다.
  2. 보안과 엑세스 제어 -> 데이터를 삭제하고 업데이트하는 것이 까다롭다.
  3. 데이터 레이크에 저장된 데이터 규모가 커질 수록 전통 쿼리 엔진성능이 저하된다.

마무리

데이터 레이크는 조직에서 수집한 정형~비정형 데이터를 원시 형태로 저장하는 단일한 데이터 저장소이다. 데이터 레이크는 온프레미스, 클라우드, 환경에서 모두 구축할 수 있다. 하둡, RDMS 클라우드 기반 저장소를 플랫폼으로 쓸 수 있지만 대부분은 클라우드를 이용한다.
데이터 레이크는 데이터 웨어하우스를 대체하는 역할이 아닌 보완하는 역할이다. 최근에는 데이터 레이크와 웨어하우스의 장점을 결합한 플랫폼인 데이터 레이크하우스도 떠오르고 있다.

Reference

Hadoop

맵리듀스 논문
하둡(Hadoop) (velog.io)
하둡 & 하둡 에코시스템 (tistory.com)
(skt아카데미) 빅데이터란? HDFS란? (tistory.com)
The Friendship That Made Google Huge | The New Yorker
하둡 에코시스템(Hadoop-Ecosystem)이란 (tistory.com)
Hadoop ecosystem이란? (velog.io)
하둡 에코시스템 (Hadoop ecosystem) (velog.io)
Cloudera products - HDFS, MapReduce
Cloudera products

Data Lake

하둡과 데이터 레이크
빅데이터로 가치를 만드는 호수 ‘데이터 레이크’ 이야기 | 인사이트리포트 | 삼성SDS
데이터 레이크란? 데이터 레이크 및 웨어하우스 | Microsoft Azure

profile
개발자 줄기세포입니다.

0개의 댓글