하둡은 누구나 무료로 사용할 수 있는 오픈소스(Open Source) 소프트웨어. 대량의 데이터 저장소라고 생각하면 된다.
하둡의 코어 프로젝트(Framework)는 HDFS, MapReduce이지만 그 외에도 다양한 서브 프로젝트들이 많다. 하둡 에코 시스템은 그 Framework를 이루고 있는 다양한 서브 프로젝트들의 모임이다.
아래의 그림을 보면 더 쉬울 것이다.
하둡의 코어 프로젝트 : HDFS(분산 데이터 저장), MapReduce(분산 처리)
하둡의 서브 프로젝트 : 나머지 프로젝트들 -> 워크플로우 관리, 데이터 마이닝, 분석, 수집, 직렬화 등등
Zookeeper (분산 코디네이터)
분산 환경에서 서버들간의 상호 조정이 필요한 다양한 서비스 제공
하나의 서버에서 처리한 결과를 다른 서버들과도 동기화
-> 데이터 안정성 보장
운영(active) 서버에서 문제가 발생하여 서비스 제공할 수 없는 경우
-> 다른 대기중인 서버를 운영 서버로 바꿔 서비스 중지없이 제공되게 해줌
분산 동기화 제공(하나의 서버에만 서비스가 집중되지 않도록 서비스를 알맞게 분산하여 동시에 처리)
중앙 집중식 서비스로 알맞은 분산처리 및 분산 환경을 구성하는 서버 설정을 통합적으로 관리
Ooozie (워크플로우 및 코디네이터 시스템)
하둡의 작업을 관리하는 워크플로우 및 코디네이터 시스템
Java servlet 컨테이너에서 실행되는 자바 웹 어플리케이션 서버로, MapReduce 작업이나 Pig 작업 같은 특화된 액션들로 구성된 워크플로우를 제어
Avro (데이터 직렬화)
RPC (Remote Procedure Call)와 데이터 직렬화를 지원하는 Framework
JSON을 이용한 데이터 형식과 프로토콜을 정의
작고 빠른 Binary 포맷으로 데이터를 직렬화한다
YARN
작업 스케줄링, 클러스터 리소스 관리를 위한 Framework
MapReduce, Hive, Impala, Spark 등 다양한 애플리케이션들을 YARN에서 작업 실행
Mesos (Cloud환경에 대한 리소스 관리)
Linux 커널과 동일한 원칙을 사용
컴퓨터에 API(Hadoop, Spark, Kafka, Elasticsearch)를 제공
HCatalog
하둡으로 생성한 데이터를 위한 테이블 및 스토리지 관리 서비스
가장 큰 장점으로는 하둡 에코시스템들간의 상호 운용성의 향상 -> (ex) Hive에서 생성한 테이블이나 데이터 모델을 Pig 나 MapReduce에서 손쉽게 이용할 수 있다.
HBase (분산 DB)
HDFS의 컬럼(열) 기반 데이터베이스
Google Bigtable 논문을 기반으로 개발된 비관계형 DB
실시간 랜덤 조회 및 업데이트 가능
각각의 프로세스들은 개인의 데이터를 비동기적(동시성 X)으로 업데이트 할 수 있다.
단, MapReduce는 일괄처리 방식으로 수행
Hadoop 및 HDFS위에 Bigtable과 같은 기능을 제공
HDFS (분산 파일 데이터 저장)
하둡에서의 저장소 역할
하둡 네트워크에 연결된 기기에 데이터를 저장하는 분산형 파일 시스템
애플리케이션 데이터에 대한 높은 처리량의 액세서를 제공하는 분산 파일 시스템
Kudu (컬럼 기반 스토리지)
속성 기반 스토리지로 하둡 에코 시스템에 새로 추가됐다.
빠르게 변화하는 데이터에 대한 빠른 분석을 위한 설계됨
Cloudera에서 시작된 프로젝트
-> 15년 말 Apache 인큐베이션 프로젝트로 선정
Tajo
고려대학교 정보통신대학 컴퓨터학과 DB연구실 박사 과정학생들이 주도해서 개발한 하둡 기반의 DW 시스템
데이터 저장소는 HDFS를 사용하되, 표준 DB언어인 SQL을 통해 실시간으로 데이터 조회 가능
Hive보다 2~3배 빠르며, 클라우데라의 Impala와는 비슷한 속도를 보여줌 -> Impala는 클라우데라의 하둡을 써야하는 제약이 있지만 Tajo는 특정 업체 솔루션에 종속되지 않는 장점이 있다.
Chukwa
분산 환경에서 생성되는 데이터를 안정적으로 HDFS에 저장하는 Platform
분산된 각 서버에서 agent를 실행
-> collector가 agent로부터 데이터를 받아 HDFS에 저장
(collector는 100개의 agent당 하나씩 구동되며, 데이터 중복 제거 등의 작업은 MapReduce로 처리)
대규모 분산 시스템을 Monitoring하기 위한 시스템
HDFS 및 MapReduce에 구축되어 수집된 데이터를 최대한 활용하기 위한 Monitoring 및 유연한 툴킷을 포함
Flume
Chukwa 처럼 분산된 서버에 agent가 설치
-> 마찬가지로 Collector가 agent로부터 데이터를 전달받는 형식으로 구성
vs Chukwa : 전체 데이터의 흐름을 관리하는 Master Server 가 있어서 데이터를 어디서 수집하고, 어떤 방식으로 전송하고, 어디에 저장할지를 동적으로 변경가능
많은 양의 데이터를 수집, 집계 및 이동하기 위한 분산형 서비스
Scribe
페이스북에서 개발한 데이터 수집 Platform
vs Chukwa : 데이터를 중앙서버 로 전송하는 방식, 최종 데이터는 HDFS외에 다양한 저장소를 활용 가능 (HDFS에 저장하기 위해서는 JNI (Java Native Interface)를 이용해야한다.)
설치와 구성이 쉽고, 다양한 프로그래밍 언어를 지원
Kafka
분산 스트리밍 플랫폼으로, 데이터 파이프 라인을 구축할 때 주로 사용되는 오픈소스 솔루션
데이터 Stream(흐름)을 실시간으로 관리하기 위한 분산 시스템
대용량 실시간 로그처리에 특화되어 있는 솔루션
-> 데이터를 유실없이 안전하게 전달하는 것이 주목적!
고장 방지(Fault-Tolerant)와 안정적인 아키텍처와 빠른 퍼포먼스로 데이터를 처리할 수 있다.
Sqoop
대용량 데이터 전송 솔루션
HDFS, RDBMS, DW, NoSQL 등 다양한 저장소에 대용량 데이터를 신속하게 전송할 수 있는 방법을 제공
Oracle, MS-SQL, DB2 등과 같은 상용 RDBMS와 MySQL, PostgreSQL과 같은 오픈소스 RDBMS등을 지원
Hiho
Sqoop과 같은 대용량 데이터 전송 솔루션
현재 github에서 공개되어 있음
하둡에서 데이터를 가져오기 위한 SQL을 지정할 수 있고, JDBC 인터페이스를 지원
Pig
하둡에 저장된 데이터를 MapReduce Program을 만들지 않고 SQL과 유사한 스크립트를 이용하여 데이터를 처리
복잡한 MapReduce 프로그래밍을 대체할 Pig Latin이라는 자체 언어를 제공
MapReduce API를 매우 단순화한 형태로 설계한 것 (SQL과 유사한 형태임)
Mahout
하둡 기반 데이터 마이닝 알고리즘을 구현한 오픈소스
분석 머신러닝에 필요한 알고리즘을 구축하기 위한 오픈소스 Framework
현재 {분류, 군집, 추천 및 협업 필터링, 패턴 마이닝, 회귀 분석, 차원 축소, 진화 알고리즘 등} 주요한 알고리즘을 지원
Mahout 그대로 사용할 수 있지만, 자신의 비즈니스 환경에 맞게 최적화하여 사용하는 경우가 대부분
Spark
대규모 데이터 처리를 위한 빠른 속도로 실행시켜 주는 엔진
병렬 애플리케이션을 쉽게 만들 수 있는 80개 이상의 고급 연산자를 제공
Python, R 등에서 대화형(인터프리터)으로 사용 가능
Impala
Cloudera에서 개발한 하둡 기반의 실시간 SQL 질의 시스템
하둡 기반 분산 엔진으로, MapReduce를 사용하지 않고 C++로 개발한 인메모리 엔진(자체 개발한 엔진)을 사용하여 성능을 높여줌
Impala는 데이터 조회를 위한 인터페이스로 HiveQL을 사용하며, 수초 내에 SQL 질의 결과를 확인할 수 있으며, HBase와도 연동이 가능
Hive
하둡 기반의 데이터 웨어하우징용 솔루션
Facebook에서 개발
하둡 기반 데이터 솔루션으로 Java를 몰라도 데이터 분석을 할 수 있게 도와준다.
SQL과 유사한 HiveQL이라는 언어를 이용하여 데이터 분석을 쉽게 할 수 있도록 도와준다 (.hql 파일)
-> HiveQL은 내부적으로 MapReduce Job으로 변환되어 실행된다.
MapReduce
대용량 데이터를 분산 처리하기 위한 프로그래밍 모델 (소프트웨어 Framework)
정렬된 데이터를 분산 처리(Map)하고 이를 다시 합치는(Reduce) 과정을 수행
MapReduce Framework를 이용하면 대규모 분산 컴퓨팅 환경에서, 대량의 데이터를 병렬로 분석 가능
하둡에서 대용량 처리를 위한 기술들 중 가장 인기있다.
Fault Tolerance(내결함성)
시스템내의 어느 한 부품 또는 어느 한 모듈에 장애가 발생하더라도 시스템운영에 전혀 지장을 주지 않도록 설계된 것
Load Balancing - Distributed/Resiliency
분산 처리라는 부분에서 필수적인 부분이다.
Data Loss
머신에 장애가 있더라도 데이터는 살아있어야 한다.
Resilience
실패에 대한 회복력
Hadoop 사용의 주요 이점은 내결함성이다.
데이터가 개별 노드로 전송되면 해당 데이터는 클러스터의 다른 노드에도 복제된다.
즉, 장애가 발생할 경우 사용할 수 있는 다른 복사본이 있는 것이다.
Scalability
많은 양의 데이터를 처리를 하도록 확장할 수 없는 기존의 관계형 데이터베이스 시스템(RDBMS)과 달리 Hadoop을 사용하면 수천 테라바이트의 데이터가 포함된 수천 개의 노드에서 애플리케이션을 실행할 수 있다.
Low Cost
Hadoop은 기업의 폭발적인 데이터 세트를 위한 비용 효율적인 스토리지 솔루션을 제공한다. 전통적인 관계형 데이터베이스 관리 시스템의 문제는 그러한 방대한 양의 데이터를 처리하기 위해 그정도로 확장하는 것이 극도로 비용이 많이 든다는 것이었다.
비용을 줄이기 위해 과거의 많은 기업은 데이터를 다운샘플링하고 어떤 데이터가 가장 가치가 있는지에 대한 특정 가정을 기반으로 분류해야 했다.
원시 데이터는 유지하기에 너무 많은 비용이 들기 때문에 삭제된다.
이 접근 방식이 단기적으로는 효과가 있었을 수도 있지만, 이는 비즈니스 우선 순위가 변경되었을 때 저장하기에 너무 비쌌기 때문에 완전한 원시 데이터 세트를 사용할 수 없었다.
반면에 Hadoop은 나중에 사용할 수 있도록 회사의 모든 데이터를 저렴하게 저장할 수 있는 확장 아키텍처로 설계되었다.
Speed
Hadoop의 고유한 저장 방법은 기본적으로 데이터가 클러스터에 있는 모든 위치에 데이터를 '매핑'하는 분산 파일 시스템을 기반으로 한다.
데이터 처리 도구는 종종 데이터가 있는 동일한 서버에 있으므로 훨씬 빠른 데이터 처리가 가능
Flexible
Hadoop을 통해 기업은 새로운 데이터 소스에 쉽게 액세스하고
다양한 유형의 데이터(정형 및 비정형)를 활용하여 해당 데이터에서 가치를 생성할 수 있다.
[Hadoop-Echosystem 참고]
[Hadoop five benefit 참고]