이 글은 Tricore에서 2017년 7월 10일에 처음 게재되었습니다.
Apache™ Hadoop®는 분산 컴퓨팅 환경에서 방대한 양의 데이터를 처리하도록 설계된 오픈소스 Java 기반 프레임워크입니다. 더그 커팅(Doug Cutting)과 마이크 카파렐라(Mike Cafarella)가 개발한 하둡은 2005년에 공개되었습니다.
하둡은 범용(commodity) 하드웨어 위에서 동작하며, "하드웨어 장애는 언제나 발생할 수 있다"는 전제를 바탕으로 설계되었습니다. 하둡 프레임워크는 이러한 장애를 스스로 감내하고 처리할 수 있도록 만들어졌습니다.
두 부분으로 구성된 이 시리즈의 1부에서는 빅데이터의 개념, 하둡 에코시스템, 그리고 하둡 프레임워크의 핵심 구성 요소들을 살펴보겠습니다.
그 어느 때보다 거대해진 데이터
데이터는 모든 조직에 필수적인 자산이며, 빅데이터는 가치 있는 비즈니스 인사이트로 이어질 수 있는 새로운 분석 기회를 열어주고 있습니다. 빅데이터란 한 조직의 저장 용량과 처리 능력을 초과하는 데이터를 의미합니다.
빅데이터는 소셜 네트워크, CCTV(폐쇄회로 텔레비전) 카메라, 각종 센서, 온라인 쇼핑몰, 숙박업 데이터, GPS(위성 위치 확인 시스템), 자동차 산업 등 막대한 정보를 생성하는 다양한 출처에서 발생합니다.
빅데이터에는 세 가지 주요 측면이 있으며, 모두 놀라운 속도로 진화하고 있습니다:
- 볼륨(Volume): 빅데이터의 양은 기가바이트에서 테라바이트, 페타바이트급으로 빠르게 증가하고 있습니다. 이를 저장하려면 상당한 디스크 공간이 필요합니다.
- 속도(Velocity): 빅데이터는 일반적으로 데이터 센터에 저장됩니다. 데이터를 로컬 워크스테이션까지 전달하려면 고속 데이터 프로세서가 필요합니다.
- 다양성(Variety): 데이터는 크게 구조화(structured), 비구조화(unstructured), 반구조화(semi-structured) 데이터로 분류할 수 있습니다.
빅데이터는 다음과 같은 식으로 요약할 수 있습니다.
빅데이터 = 데이터의 (볼륨 + 속도 + 다양성)
아래 이미지는 이러한 개념을 시각적으로 보여줍니다.
이미지 출처: 3Vs (volume, variety and velocity)
하둡 에코시스템이란?
하둡 에코시스템(Hadoop Ecosystem)이란 Apache Hadoop 소프트웨어 라이브러리를 구성하는 다양한 구성 요소들을 통칭하는 용어입니다. 이 에코시스템은 서로 상호작용하는 여러 모듈의 집합으로 이루어져 있으며, 빅데이터 처리 과정에서 요구되는 고유한 작업들을 해결하기 위한 도구와 유틸리티를 제공합니다. 에코시스템에는 아래에서 다룰 하둡 프레임워크의 핵심 구성 요소뿐만 아니라 다양한 추가(add-on) 모듈까지 포함됩니다.
하둡 프레임워크의 구성 요소
하둡 프레임워크에는 다음과 같은 핵심 구성 요소가 포함되어 있습니다.
분산 스토리지(Distributed Storage)
여러 구성 요소들이 결합하여 하둡의 분산 스토리지를 가능하게 합니다.
HDFS(하둡 분산 파일 시스템)
하둡에서 분산 스토리지를 담당하는 것은 HDFS(Hadoop Distributed File System)입니다. HDFS는 중복 저장 기능을 제공하며 다음과 같은 특징을 가집니다:
- 범용 하드웨어 위에 안정적으로 데이터를 저장하도록 설계되었습니다.
- 하드웨어 장애 발생을 전제로 만들어졌습니다.
- 대용량 파일과 배치 삽입에 적합합니다. (한 번 쓰고, 여러 번 읽는 방식)
HBase
HBase는 분산형 칼럼 지향(column-oriented) NoSQL 데이터베이스입니다. HBase는 내부 저장소로 HDFS를 사용하며, MapReduce 기반의 배치 연산과 포인트 쿼리(랜덤 읽기)를 모두 지원합니다.
HBase가 수행하는 주요 작업은 다음과 같습니다:
- 범용 하드웨어 클러스터 위에 대규모 데이터(수십억 개 행까지)를 저장합니다.
- 로그, 문서, 실시간 활동 피드, 원본 가져오기(imported) 데이터 등을 대량으로 저장합니다.
- 하둡 애플리케이션이 사용하는 데이터에 대해 일관된 성능의 읽기·쓰기를 수행합니다.
- MapReduce 기능을 활용해 저장된 데이터를 집계하거나 처리할 수 있게 합니다.
- 분석 및 머신 러닝을 위한 데이터 플랫폼 역할을 합니다.
HCatalog
HCatalog는 하둡을 위한 테이블 및 스토리지 관리 계층으로, Pig™, MapReduce, Hive™ 같은 하둡 애플리케이션이 파일 단위가 아닌 테이블 형식으로 데이터를 읽고 쓸 수 있게 해줍니다.
HCatalog는 다음과 같은 기능도 제공합니다:
- 하둡 애플리케이션이 사용하는 데이터를 중앙 집중식으로 저장하는 공간입니다.
- 순차적·반복적으로 실행되는 하둡 작업을 위해 재사용 가능한 데이터 저장소를 제공합니다.
- 관계형 추상화(relational abstraction) 형태로 데이터를 저장합니다.
- 메타데이터를 관리합니다.
분산 처리(Distributed Processing)
하둡은 MapReduce와 YARN(Yet Another Resource Negotiator)을 통해 분산 처리를 구현합니다.
MapReduce
MapReduce는 범용 머신으로 구성된 대규모 클러스터에서 실행되는 분산 데이터 처리 모델이자 실행 환경입니다. MapReduce를 사용하면 저장된 데이터로부터 인사이트를 도출할 수 있으며, 모든 연산을 Map 또는 Reduce 함수로 분해해 처리합니다.
MapReduce의 장점은 다음과 같습니다:
- 대규모 이기종 데이터셋에 대한 집계(카운팅, 정렬, 필터링)
- Map 또는 Reduce 태스크의 확장 가능한 병렬 처리
- 분산 방식의 태스크 실행
YARN
YARN은 Apache Hadoop 에코시스템의 클러스터 및 리소스 관리 계층입니다. 2세대 하둡 프레임워크의 주요 특징 중 하나입니다.
YARN이 제공하는 기능은 다음과 같습니다:
- 애플리케이션의 스케줄링을 통해 작업 우선순위를 정하고 빅데이터 분석 시스템을 유지 관리합니다.
- 전체 아키텍처의 한 부분으로서, 데이터를 집계·정렬하여 특정 조회(query)를 위한 데이터 검색을 수행합니다.
- 특정 애플리케이션에 리소스를 할당하고, 그 외 다양한 리소스 모니터링 작업을 관리합니다.
머신 러닝(Machine Learning)
하둡은 Apache Mahout을 통해 머신 러닝을 지원합니다. Mahout은 확장 가능한(scalable) 머신 러닝 알고리즘을 개발하기 위한 오픈소스 프로젝트입니다. Mahout은 데이터 마이닝 프레임워크로, 일반적으로 백그라운드에서 하둡 인프라와 함께 실행되며 대량의 데이터를 관리합니다.
Mahout이 제공하는 기능은 다음과 같습니다:
- 대용량 데이터에 대한 데이터 마이닝 작업을 바로 수행할 수 있는 사용 준비 완료 프레임워크
- 하둡 위에 구현된 알고리즘으로, 분산 환경에서 원활하게 동작합니다.
- 대규모 데이터셋의 신속한 분석
- 진화형 프로그래밍(evolutionary programming)을 위한 분산 피트니스 함수 기능. 행렬 및 벡터 라이브러리도 함께 제공됩니다.
워크플로우 모니터링 및 스케줄링
Oozie는 하둡의 잡(job) 관리 시스템입니다. 이 워크플로우 스케줄러는 서로 의존 관계에 있는 잡들로 구성된 워크플로우를 실행합니다. Oozie를 사용하면 하둡에서 병렬 및 순차 잡을 실행하는 DAG(방향성 비순환 그래프) 형태의 워크플로우를 만들 수 있습니다.
Oozie는 매우 유연해서 잡을 쉽게 시작, 중단, 일시 중지, 재실행할 수 있습니다. 실패한 워크플로우도 손쉽게 다시 실행할 수 있습니다.
Oozie는 확장성이 뛰어나며, 하둡 클러스터에서 수천 개의 워크플로우(각각 수십 개의 잡으로 구성)를 제시간에 실행하도록 관리할 수 있습니다.
스크립팅(Scripting)
개발자는 Apache Pig를 사용해 하둡에서 스크립팅을 할 수 있습니다. Pig는 SQL 기반 언어와 실행 환경을 제공하여 복잡한 MapReduce 변환 작업을 생성합니다. Pig는 Pig Latin이라는 코딩 언어로 작성되지만, 실행 가능한 MapReduce 잡으로 변환됩니다. 또한 Java를 사용해 확장 함수 또는 사용자 정의 함수(UDF)를 만들 수도 있습니다.
Pig가 제공하는 기능은 다음과 같습니다:
- HDFS의 원시(raw) 데이터에 대해 ETL(Extract-Transform-Load) 작업과 절차를 실행하기 위한 스크립팅 환경
- 복잡한 MapReduce 함수를 생성·실행하기 위한 SQL 기반 언어
- 대규모 이기종 데이터셋에 대한 데이터 처리, 결합(stitching), 스키마화(schematizing)
- 고수준(high-level) 데이터 흐름 언어
- 데이터 처리에 집중할 수 있게 해주는 추상화 계층
마무리
하둡과 MapReduce 프레임워크는 이미 바이오인포매틱스 커뮤니티, 특히 차세대 염기서열 분석(next-generation sequencing analysis) 분야에서 상당한 사용자층을 확보하고 있습니다. 이 분야에서 하둡이 인기를 얻은 데에는 견고하고 장애 허용(fault-tolerant)적인 HDFS가 한몫했습니다.
HBase는 HDFS 파일 시스템 위에 구축된 분산형·장애 허용형·확장 가능한 데이터베이스로, 데이터에 대한 랜덤 실시간 읽기·쓰기 접근을 제공합니다. 확장 가능한 머신 러닝 라이브러리를 구축하려면 Mahout을, 배치(batch) 데이터 처리에는 Pig를 활용해 보는 것도 좋습니다.
이 시리즈의 2부에서는 하둡 에코시스템의 더 많은 구성 요소들을 다룰 예정입니다.
궁금한 점이나 의견이 있다면 피드백 탭을 이용해 남겨주세요.