
아파치 하둡(Apache Hadoop) : 높은 확장성과 신뢰성을 보유한 분산 스토리지와 분산 처리 기능을 제공하기 위해 다양한 소프트웨어를 밀접하게 통합한 에코시스템. 대표적으로 분산 파일 시스템 HDFS(Hadoop Distributed File System)과 분산 서버 클러스터 환경에서 프로세스를 실행하는 YARN(Yet Another Resource Negotiator)가 있다.
클러스터(Cluster)란?마스터(Master)와 워커(Worker)가 존재하둡 에코시스템은 하둡을 중심으로 만들어진 데이터 엔지니어링 프로젝트와 프레임워크 전부를 의미.
여기서는 프로젝트의 의존 관계를 데이터와 제어 두가지로 구분함.

**HDFS**
**하둡 분산 파일 시스템(Hadoop Distributed File System)**은 확장성과 장애 허용성을 가진 분산 파일 시스템
상당히 긴 순차 접근(Sequential access) 방식을 통해 디스크에 불변 데이터를 저장하는데 최적화돼 있음
데이터를 설정 가능한 크기의 block으로 나눠 저장.
기본은 128MB이며, 데이터 회복성 및 데이터 병렬 처리를 위해 여러대의 서버에 각 블록의 복제본을 저장
클러스터에 있는 워커 노드는 데이터 노드(Data node) 데몬을 실행 새 블록을 전달받아서 로컬디스크에 저장
마스터 서버에서 실행되고 있는 **네임 노드(Name node)**는 파일 자체의 메타 데이터를 관리
불변성을 위해 파일의 일부분 수정을 지원하지 않음.

YARN(Yet Another Resource Negotiator)
작업 스케줄링, 클러스터 리소스 관리를 위한 프레임 워크
워커 노드 안에 노드 매니저(Node Manager)가 리소스 매니저(Resource Manager)에 다양한 정보 전달

ZooKeeper
분산 환경에서 서버들간의 상호 조정이 필요한 다양한 서비스 제공
하나의 서버에서 처리한 결과를 다른 서버들과 동기화(데이터 안정성 보장)
운영(active) 서버에서 문제가 발생하여 서비스 제공할 수 없는 경우 다른 대기중인 서버를 운영서버로 변경하여 중지없이 제공
하나의 서버에만 서비스가 집중되지 않도록 서비스를 분산하여 동시에 처리
중앙 집중식 서비스로 분산처리 및 분산 환경을 구성하는 서버 설정을 통합적으로 관리
지노드(znode) : 데이터를 가지고 있으며, 0개 이상의 자식 노드를 가질수 있음
앙상블(ensemble) : 회복성을 확보하기 위해 인스턴스를 각기 서로 다른 서버에 배포
쿼럼(quorum) : 다수결 원칙에 따라 합의(consensus)를 이끌어 내므로 홀수의 서버에 배포하고 이때 과반수의 서버로 이루어진 그룹

| 프로젝트 | 주키퍼 사용 목적 |
|---|---|
| HDFS | 고가용성 조율 |
| HBase | 메타데이터 관리 및 조율 |
| 솔라 | 메타데이터 관리 및 조율 |
| 카프카 | 메타데이터 관리 및 조율 |
| 얀 | 고가용성 조율 |
| 하이브 | 테이블 및 파티션 잠금 및 고가용성 |
아파치 하이브(Hive) 메타스토어
비정형 바이너리 데이터(unstructured binary data)가 아닌 정형 데이터셋(structured dataset)에 대한 정보를 데이터 셋, 테이블, 뷰 같은 논리적인 위계 구조로 구성해서 관리관리형 테이블(managed table), 외부 테이블(external table)을 지원하둡 맵리듀스(MapReduce)
맵(Map), 셔플(Shuffle), 리듀스(Reduce) 3 단계로 나눠서 처리
아파치 스파크(Spark)
재배치(rearrange), 결합(combine), 가지치기(prune) 사용아파치 하이브(Hive)

아파치 임팔라(Impala)

아파치 HBase
HDFS의 컬럼(열) 기반 데이터베이스
분산 테이블에 cell이라고 불리는 키-값 쌍의 반정형 데이터 형식으로 HDFS에 저장
실시간 랜덤 조회 및 업데이트 가능
각각의 프로세스들은 개인의 데이터를 비동기적(동시성 X)으로 업데이트 할 수 있음. 단 MapReduce는 일괄처리 방식으로 수행!
Hadoop 및 HDFS위에 Bigtable과 같은 기능을 제공
Cell key를 위계 구조(hierarchy)를 가지도록 세분화
로우 키 : Cell의 논리적인 그룹인 로우row를 정의함
컬럼 패밀리 : 메모리와 디스크에 분리되어 저장되고, 컬럼 한정자로 세분화되는데 하나의 로우에 수백만 개의 컬럼 한정자가 있을 수 있음.

버전 : 타임스탬프로 되어 있음.
리전(region) : HBase에서 수평확장의 기본단위이며, 함께 저장되는 테이블의 부분집합

아파치 쿠두(Kudu)
범위 파티셔닝(Range Partitioning) : 각 태블릿은 상한과 하한으로 이뤄진 범위를 갖고 있으며, 범위 내에 들어가는 파티션 키를 가진 모든 레코드는 해당 태블릿에 저장해시 파티셔닝(Hash Partitioning) : 사용자는 테이블 파티셔닝의 기준이 되는 고정된 수의 해시 버킷을 지정할 수 있고 각 행에서 선택된 컬럼의 해시 값을 해시 커빗 수로 나눈 나머지를 기준으로 태블릿에 저장아파치 솔라(Solr)
아파치 카프카(Kafka)
토픽(topic) : 기초가 되는 데이터 구조브로커(broker) : 여러대의 서버프로듀서(producer) : 카프카 토픽의 파티션으로 메시지를 발행컨슈머(consumer) : 토픽에 있는 데이터를 읽음컨슈머 그룹(consumer group) : 확장성을 위해 여러 컨슈머로 묶을 수 있음아파치 플룸(Flume)

아파치 스쿱(Sqoop)
관계형 데이터베이스와 하둡 사이에서 데이터 이관을 지원하는 툴
데이터 임포트
데이터 익스포트

| 프로젝트 이름 | 설명 | 용도 | 의존 관계 |
|---|---|---|---|
| ZooKeeper | 분산 설정 서비스 | 분산 프로세스와 분산 잠금 사이의 메타데이터 공유 | 없음 |
| HDFS | 분산 파일 스토리지 | 불변 데이터를 위한 확장성 있는 스토리지 | ZooKeeper |
| Yarn | 분산 리소스 스케줄링 및 실행 프레임워크 | 확장성 있는 분산 컴퓨팅 자원을 필요로 하는 프레임워크 | ZooKeeper, HDFS |
| MapReduce | 범용 분산 연산 프레임워크 | 배치 연산 작업 | Yarn, HDFS |
| Spark | 범용 분산 연산 프레임워크 | 배치, 분석 SQL, 스트리밍 작업 | 자원 스케줄러(Yarn, Mesos) 및 데이터 소스(HDFS, Kudu 등) |
| Hive | SQL 기반 분석 쿼리 프레임워크 | 분산 SQL 작업 | Yarn, 데이터 소스(HDFS, Kudu) |
| Impala | SQL 기반 대규모 병렬 처리 분산 엔진 | 분석 및 대화형 SQL 작업 | 데이터 소스(HDFS, Kudu, HBase) |
| HBase | 위계 구조를 가진 키-값 데이터 분산/정렬 스토어 | 정형 키를 가진 로우 기반 데이터에 대한 고속 랜덤 읽기/쓰기 | HDFS, ZooKeeper |
| Kudu | 정형 데이터용 분산 스토어 | 랜덤 읽기/쓰기 및 분석 작업 | 없음 |
| Solr | 엔터프라이즈 검색 프레임 워크 | 확장성 있는 도큐먼트 인덱싱 및 임의 필트 쿼리 | HDFS, ZooKeeper |
| Kafka | 분산 발행/구독 메시징 프레임워크 | 데이터 프로세싱 파이프라인의 주기적 또는 실시간 실행 | ZooKeeper |