Hadoop이란 하나의 성능 좋은 컴퓨터를 이용하여 데이터를 처리하는 대신 적당한 성능의 범용 컴퓨터 여러대를 클러스터화하고 큰 크기의 데이터를 클러스터에서 병렬로 동시에 처리하여 처리 속도를 높이는 것을 목적으로 하는 분산처리를 위한 오픈소스 프레임워크이다.
2000년대 구글은 빠르게 성장 중이였지만 큰 문제에 빠져있었다. 검색을 하기 위한 색인 시스템이 멈추고, 검색에 대한 결과로 5달이나 지난 결과를 반환하는 것이였다. 그 결과를 찾기 위해 코드를 살펴봐도 논리적으로 버그는 없었다.
결국 세밀한 분석 끝에 구글의 엔지니어들은 그 원인이 하드웨어 이상 동작이라는 것을 알았다. 인터넷이 급격히 성장하면서 검색엔진이 감당해야 할 문서가 매우 많아졌고 그 결과 범용 컴퓨터에서는 크고 작은 물리적 결함들이 발생하게 되었다. 그래서 구글은 신뢰성이 낮은 컴퓨터에서도 많은 양의 문서를 처리할 수 있는 소프트웨어 기술을 개발하게 되었고 이것이 Hadoop의 시작이 되었다.
HDFS와 MapReduce는 하둡을 구성하는 각각의 요소들이다. HDFS는 하둡의 스토리지, MapReduce는 하둡의 연산을 담당한다.
HDFS는 하둡 분산 파일 시스템 (Hadoop Distributed File System)이다. 네트워크로 연결된 여러 머신의 스토리지를 관리하는 하둡의 저장소 역할을 한다.
수백 메가바이트, 기가바이트 또는 테라바이트 크기의 매우 큰 파일들을 여러 머신에 나누어 저장하기 위해 만들어졌다. 한 번 쓰고 여러 번 읽는 것에 중점을 두어 설계되었다.

네임 노드와 데이터 노드로 이루어져 있다. 네임 노드는 HDFS에서 마스터 역할을 하며 서버 한 대로 구성된다. 네임 노드는 파일 시스템 트리와 모든 파일과 디렉터리에 대한 메타데이터를 유지한다.
데이터 노드는 슬레이브 역할을 하며 여러 대로 구성된다. 클라이언트와 네임 노드의 요청으로 인한 블록 저장과 탐색을 담당한다.
맵리듀스는 데이터 처리를 위한 프로그래밍 모델이다. 대용량 데이터 처리를 분산 병렬 컴퓨팅에서 처리하기 위한 목적으로 만들어졌다. 맵 리듀스는 하둡의 계산을 담당한다.
맵리듀스는 맵과 리듀스 단계로 나누어진다.
Input -> Splitting -> Mapping -> Shuffling -> Reducing -> Final Result


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


분산 환경에서 서버들간에 상호 조정이 필요한 다양한 서비스를 제공하는 시스템.
1. 하나의 서버에만 서비스가 집중되지 않도록 서비스를 알맞게 분산하여 동시에 처리하게 해줌
2. 하나의 서버에서 처리한 결과를 다른 서버들과도 동기화 -> 데이터 안정성 보장
3. 운영(active) 서버에서 문제가 발생해 서비스를 제공할 수 없는 경우, 다른 대기중인 서버를 운영 서버로 바꿔 서비스가 중지없이 제공되게 해줌
4. 분산 환경을 구성하는 서버들의 환경설정을 통합적으로 관리
공식 사이트 : http://zookeeper.apache.org/
HDFS의 칼럼 기반 데이터베이스
구글의 BigTable 논문을 기반으로 개발된 것으로, 실시간 랜덤 조회 및 업데이트가 가능하며, 각각의 프로세스들은 개인의 데이터를 비동기적으로 업데이트 할 수 있다. 단, MapReduce는 일괄처리 방식으로 수행된다.
공식 사이트 : http://hbase.apache.org
하둡 기반의 데이터웨어하우징용 솔루션
페이스북에서 만든 오픈소스로, SQL과 매우 유사한 HiveQL이라는 쿼리를 제공한다. 그래서 자바를 잘 모르는 데이터 분석가들도 쉽게 하둡 데이터를 분석할 수 있게 도와준다.
HiveQL은 내부적으로 MapReduce 잡으로 변환되어 실행된다.
공식 사이트 : http://hive.apache.org
클라우드데라에서 개발한 하둡 기반의 실시간 SQL 질의 시스템
맵리듀스를 사용하지 않고, 자체 개발한 엔진을 사용해 빠른 성능을 보여준다.
임팔라(Impala)는 데이터 조회를 위한 인터페이스로, HiveQL을 사용합니다. 수초 내에 SQL 질의 결과를 확인할 수 있으며, HBase와도 연동이 가능하다.
공식 사이트 : https://github.com/cloudera/impala)

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

빠른 성능을 위해 인메모리 캐싱과 최적화 된 실행을 사용하고 일반 배치처리, 스트리밍 분석, 머신러닝, 그래프 데이터 베이스 및 임시 쿼리를 지원한다.
데이터 레이크는 대량의 데이터를 원래 형식으로 수집하고 저장하는 중앙 집중식 저장소이다. 그런 다음 데이터를 처리하고 다양한 분석 요구 사항에 대한 기초로 사용할 수 있다. 확장성이 뛰어난 개방형 아키텍처로 인해 데이터 레이크는 정형(데이터베이스 테이블, Excel 시트), 반정형(XML 파일, 웹 페이지), 비정형(이미지, 오디오 파일, 트윗)까지 모든 원본의 모든 데이터 형식을 저장할 수 있다. 데이터 파일은 일반적으로 미리 구성된 영역(원시, 정리 및 큐레이팅)에 저장되므로 다양한 유형의 사용자가 다양한 형식의 데이터를 사용하여 요구 사항을 충족할 수 있다. 데이터 레이크는 다양한 애플리케이션에서 핵심 데이터 일관성을 제공하여 빅 데이터 분석, 기계 학습, 예측 분석 및 기타 형태의 지능형 작업을 지원한다.
| 데이터 레이크 | 데이터 웨어하우스 | |
|---|---|---|
| 유형 | 정형, 반정형, 비정형 | 정형 |
| 관계형, 비관계형 | 관계형 | |
| 스키마 | 읽기 시 스키마 | 쓰기 시 스키마 |
| Format | 원시, 필터링되지 않음 | 처리됨, 점검됨 |
| 원본 | 빅 데이터, IoT, 소셜 미디어, 스트리밍 데이터 | 응용 프로그램, 비즈니스, 트랜잭션 데이터, 일괄 처리 보고 |
| 확장성 | 저렴한 비용으로 손쉽게 스케일링 | 스케일링이 어렵고 비용이 많이 듦 |
| 사용자 | 데이터 과학자, 데이터 엔지니어 | 데이터 웨어하우스 전문가, 비즈니스 분석가 |
| 사용 사례 | 기계 학습, 예측 분석, 실시간 분석 | 핵심 보고, BI |
데이터 레이크와 데이터 웨어하우스의 가장 큰 차이는 데이터를 저장하고 읽는 방식이다. 데이터 레이크는 정형부터 비정형 데이터 까지 다양하게 원시 데이터의 형태로 저장하고 있기 때문에 쓰기 시에 스키마가 필요없고 나중에 읽을 때 스키마가 필요하다(Schema on read). 반면 데이터 웨어하우스는 쓰기 스키마(Schema on write)이 필요하다.
데이터 레이크는 조직에서 수집한 정형~비정형 데이터를 원시 형태로 저장하는 단일한 데이터 저장소이다. 데이터 레이크는 온프레미스, 클라우드, 환경에서 모두 구축할 수 있다. 하둡, RDMS 클라우드 기반 저장소를 플랫폼으로 쓸 수 있지만 대부분은 클라우드를 이용한다.
데이터 레이크는 데이터 웨어하우스를 대체하는 역할이 아닌 보완하는 역할이다. 최근에는 데이터 레이크와 웨어하우스의 장점을 결합한 플랫폼인 데이터 레이크하우스도 떠오르고 있다.
맵리듀스 논문
하둡(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
하둡과 데이터 레이크
빅데이터로 가치를 만드는 호수 ‘데이터 레이크’ 이야기 | 인사이트리포트 | 삼성SDS
데이터 레이크란? 데이터 레이크 및 웨어하우스 | Microsoft Azure