Hadoop ecosystem이란?

dddwsd·2022년 4월 18일
0
post-thumbnail

Hadoop이란

  • Hadoop은 Reliable Scalable하게 분산처리를 하기 위한 오픈소스 소프트웨어이다.
  • Map-Reduce라는 데이터 처리 모델을 사용함으로써 여러 대의 컴퓨터를 통해 손쉽게 대규모 데이터를 처리한다.
  • 분산 파일 시스템인 HDFS에 데이터를 저장하여 처리한다.
    (이런 방식은 Disk I/O에 의해 성능 저하를 유발하며, 추후에 In-memory 기반의 spark가 등장)

Hadoop 구조


Hadoop에서 수행하는 역할은 크게 HDFS에 파일을 저장하는 역할과 데이터를 처리하는 역할로 나누어진다.

  • MapReduce Layer: MapReduce를 수행하기 위한 Layer
    • Job Tracker: 사용자로부터 Job을 요청받고 Task Tracker에 작업 할당
    • Task Tracker: Job Tracker로부터 할당 받은 작업을 Map-Reduce하여 결과 반환.
  • HDFS Layer: 파일을 저장하기 위한 Layer
    • Namenode: 작업을 해야하는 파일을 block으로 나누어 datanode에 전달
    • datanode: 전달받은 파일의 읽기/쓰기 등을 실제로 수행

Hadoop은 기본적으로 Master-Slave 구조를 지니며, Master 노드는 1대의 노드로 구성된다.

  • Master Node: DFS(분산 파일 시스템)에 대한 정보들을 지니고 있으며, 자원 할당을 조절한다. Master Node는 2가지 Daemon을 통해 이를 처리한다.
    • Namenode: DFS를 관리하고, 어떤 Data block이 클러스터에 저장되어 있는지 알려준다.
    • resource manager: 스케줄링 및 slave node의 처리를 실행한다.
  • Slave node: 실제 데이터를 가지고 있으며, job을 수행하는데 datanode와 node manager를 통해 이를 처리한다.
    • Datanode: Namenode에 물리적으로 저장된 실제 데이터를 관리한다.
    • node manager: 노드의 task를 실행한다.

Hadoop ecosystem

hadoop ecosystem은 hadoop framework를 이루고 있는 다양한 project들의 모임을 의미한다.

data ingestion

Kafka

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

Flume

  • 다양한 source에서 중앙 집중식 데이터 저장소로 대량의 로그 데이터를 효율적으로 수집, 집계, 이동시킨다.
  • service server에서 수집되는 로그를 flume agent에 보내면, 다시 flume collector에게 보내고 설정값을 통해 sink하는 방식.
  • HDFS, Kafka, Hive, Avro 등 다양한 종류로 sink할 수 있다.

Sqoop

  • SQL-to-Hadoop의 약자로 일반적으로 사용하는 RDBMS와 Hadoop 사이의 데이터 전송을 위한 솔루션이다.
  • Hadoop 저장소를 기준으로 import(RDBMS -> Hadoop), export(Hadoop -> RDBMS) 기능을 제공하며, MapReduce 방식으로 동작한다.
  • default로 text file 형식으로 저장하고, 설정을 통해 avro, parquet와 같은 형식을 지원한다.

data storage

HDFS - Hadoop Distributed File System

  • 대용량 파일을 분산된 서버에 저장하고, 그 저장된 데이터를 빠르게 처리할 수 있게 하는 파일 시스템.

Hbase

  • HDFS위에 만들어진 column 기반의 데이터베이스
  • 구조화된 대용량의 빅데이터에 빠른 임의접근을 제공하는 google Bigtable를 기반으로 개발된 비관계형 DB
  • HDFS 데이터에 대한 실시간 랜덤 읽기 쓰기 제공
  • 각각의 프로세스들은 개인의 데이터를 비동기적으로 업데이트 할 수 있다.
  • MapReduce는 일괄처리 방식으로 수행된다.

Resource management

Yarn

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

동작원리


1. client가 resource manager에게 application에 대한 요청을 전송
2. resource manager는 application master와 함께 application 등록(이때 application ID가 생성되며, 후에 client에게 반환된다.)
3. resource manager는 각각의 분리된 container에서 application master를 구동한다. 만약 container가 구동 불가능하다면, 적합한 container를 찾을 때까지 기다린다.
4. application master는 node manager에게 container의 실행명령을 전달한다.
5. application 코드가 container에서 실행된다.
6. client는 application 상태를 모니터링하기위해 resource manager/application manager와 주고 받는다.
7. application master가 resource manager에서 등록 해지된다.

Mesos

  • 분산 시스템 커널로써, 네트워크로 묶여있는 여러개의 컴퓨터의 자원(CPU, memory, disk)을 하나로 묶어서 resource pool을 만들어서 마치 하나의 컴퓨터에서 동작하는 것처럼 실행.
  • 커널로서 작동하기 위한 기능인 스케줄러와 application 관리 기능을 더해서, 분산 커널을 만든다.
  • 유저가 application 실행을 요청하면, 자원이 넉넉한 인스턴스를 할당하고 application을 실행하면 된다.

Scheduling

Oozie

  • hadoop의 job을 관리하기 위한 서버 기반의 workflow scheduling 시스템
  • 반복적이면서 복잡한 후처리 job을 처리하기 위해 DAG로 정의해서 job에 시작, 처리, 분기, 종료점 등의 action으로 구성하는 workflow가 필요해서 탄생하게 되었다.
  • schduling
    • 특정 시간에 action 수행
    • 주기적인 간격 이후에 액션 수행
    • 이벤트가 발생하면 액션 수행
  • coordinating
    • 이전 액션이 성공적으로 끝나면 다음 액션 시작
  • managing
    • 액션이 성공하거나 실패했을 때 이메일 발송
    • 액션 수행시간이나 액션의 단계를 저장.

Airflow

  • airflow pipeline을 python을 통해 구성하기 때문에 동적인 구성 가능
  • python을 이용해 operator, executor을 사용해 사용자 환경에 맞게 확장 사용 가능
  • 간결하고 명시적이며 jinja template을 통해 parameter를 전달하고 파이프라인을 생성할 수 있음
  • 분산구조와 메세지큐를 이용해 scale out과 worker간의 협업을 지원

Coordination

Zookeeper

  • 분산 애플리케이션을 위한 coordination 시스템
  • 분산 애플리케이션이 안정적인 서비스를 할 수 있도록 분산되어 있는 각 애플리케이션의 정보를 중앙에 집중하고 구성관리, 그룹관리 네이밍, 동기화 등의 서비스를 제공한다.
  • 서버 여러 대를 앙상블(클러스터)로 구성하고, 분산 애플리케이션들이 각각 클라이언트(ex kafka)가 되어 주키퍼 서버들과 커넥션을 맺은 후 상태 정보를 주고 받는다.

management & monitoring

Ambari

  • 사용하기 쉬운 web UI를 제공하여 Hadoop 관리를 단순화한다.
  • hadoop 클러스터를 관리 및 모니터링 할 수 있다.
  • ambari rest api를 사용하여 자신의 애플리케이션에 기능을 통합할 수 있다.

data processing

(추후 포스팅에서 진행)
1. MapReduce
2. Spark
3. Hive

profile
Github - https://github.com/dddwsd

0개의 댓글