하둡(Hadoop)

김하영·2021년 3월 2일
1

1. 하둡의 개념

  • 하둡(Hadoop)이란?

하나의 성능 좋은 컴퓨터를 이용하여 데이터를 처리하는 대신 적당한 성능의 범용 컴퓨터 여러 대를 클러스터화하고 큰 크기의 데이터를 클러스터에서 병렬로 동시에 처리하여 처리 속도를 높이는 것을 목적으로 하는 분산처리를 위한 오픈소스 프레임워크.

하둡 소프트웨어 라이브러리는 간단한 프로그래밍 모델을 사용하여 여러대의 컴퓨터 클러스터에 대규모 데이터세트를 분산 처리 할 수 있게 해주는 프레임워크다.

단일 서버에 수천대의 머신으로 확장할 수 있도록 설계되었다.

일반적으로 하둡파일시스템(HDFS)과 맵리듀스(MapReduce) 프레임워크로 시작되었으나
여러 데이터 저장, 실행 엔진, 프로그래밍 및 데이터 처리와 같은 하둡 생태계 (Hadoop Ecosystem) 전반을 포함하는 의미로 확장되었다.

  1. 하둡 코어 프로젝트 : HDFS(분산 데이터 저장), MapReduce(분산 처리)
  • HDFS(분산파일시스템)와 MapReduce(분산처리시스템)는 보통 물리적으로 한대의 서버에 구성한다.
  • 두 시스템 모두 하나의 마스터와 다중 슬레이브 구조를 갖는데 다중 슬레이브들의 경우 각 서버마다 HDFS슬레이브와 MapReduce슬레이브가 같이 놓인다.
  1. 하둡 서브 프로젝트 : 나머지 프로젝트 > 데이터 마이닝, 수집, 분석 등을 수행한다.

2. 하둡의 아키텍처

  • HDFS의 경우 마스터를 네임노드라 부르고 슬레이브를 데이터노드라고 한다.
  • MapReduce의 경우 마스터를 리소스매니저라고 부르고 슬레이브를 노드매니저라고 부른다.
  • MapReduce프로그램을 실행하면 리소스매니저가 노드매니저에 일을 나눠주어 병렬로 실행하는 형태로 진행한다.
  • MapReduce프로그램은 처리할 입력데이터를 HDFS에서 읽어들이고 처리된 데이터를 다시 HDFS에 출력한다.
  • HDFS자체는 혼자서 독립적으로 분산파일시스템으로 쓰일 수 있지만 MapReduce프레임워크는 HDFS를 데이터 읽기/쓰기를 위해 필요하다.

3. 하둡의 구성 요소와 역할

하둡은 4개의 주요 모듈로 구성됩니다.

하둡은 효율적인 데이터 처리와 분석을 위해 맵리듀스, 분산형 파일시스템 말고도 많은 구성요소로 포함된다. 제시된 그림처럼 피그(돼지), 하이브(벌집) 등 동물이름의 프레임워크가 눈에 띈다. 흡사 하둡 생태계를 표현하고 있는 것 같다. 하둡의 핵심 전략이 'Easy to Use'인 만큼 각 툴들은 여러 회사에서 인용할 때 활용성을 더하기 위한 소프트웨어 들이다. 이를 하둡 에코시스템이라고 한다.

1. 하둡 분산형 파일 시스템 (Hadoop Distributed File System, HDFS)

하둡 네트워크에 연결된 기기의 데이터를 저장하는 분산형 파일 시스템.

하둡 분산 파일 시스템은 하둡 프레임워크를 위해 자바 언어로 작성된 분산 확장 파일 시스템이다.
HDFS는 여러 기계에 대용량 파일을 나눠서 저장을 한다.
데이터들을 여러 서버에 중복해서 저장함으로써 데이터 안정성을 얻는다.

  • 특징
  1. HDFS는 데이터를 저장하면 다수의 노드에 복제 데이터도 함께 저장해서 데이터 유실을 방지한다.
  2. HDFS에 파일을 저장하거나, 저장된 파일을 조회하려면 스트리밍 방식으로 데이터에 접근해야한다.
  3. 한번 저장한 데이터는 수정할 수 없고, 읽기만 가능해서 데이터 무결성을 유지한다.
  4. 데이터 수정은 불가능하지만 파일 이동, 삭제, 복사할 수 있는 인터페이스를 제공한다.
  • 아키텍처

HDFS는 마스터/슬레이브(master/slave)구조를 가진다.
HDFS 클러스터는 하나의 네임 노드와 파일 시스템을 관리하고 클라이언트의 접근을 통제하는 마스터 서버로 구성된다. 게다가 클러스터의 각 노드에는 데이터 노드가 하나씩 존재하고, 이 데이터 노드는 실행될 때 마다 노드에 추가되는 스토리지를 관리한다.
HDFS는 네임스페이스를 공개해서 유저 데이터가 파일에 저장되는 것을 허락한다.

네임노드는 파일과 디렉터리의 읽기(open), 닫기(close), 이름 바꾸기(rename) 등 파일 시스템의 네임프세이스의 여러 기능을 수행한다.

또한 데이터 노드와 블록들의 맵핑을 결정한다.

데이터노드는 파일 시스템의 클라이언트가 요구하는 읽기(read), 쓰기(write) 기능을 담당한다.
또한 데이터 노드는 네임 노드에서의 생성, 삭제, 복제 등과 같은 기능도 수행한다.

네임노드와 데이터노드는 GNU/Linux OS를 기반으로 하는 상용 버신에서 실행하기 위해 디자인된 스프트웨어의 일부다. HDFS는 자바 언어를 사용하므로 자바가 동작하는 어떠한 컴퓨터에서나 네임노드나 데이터노드 소프트웨어를 실행할 수 있다.

  • 파일 저장 플로우
  1. 어플리케이션이 HDFS 클라이언트에게 파일 저장을 요청하면, 클라이언트는 네임 노드에게 파일 블록들이 저장될 경로 생성 요청한다. 네임 노드는 해당 파일 경로가 존재하지 않으면 경로 생성 후 다른 클라이언트가 해당 경로를 수정하지 못하게 lock을 한다. 그리고 클라이언트에게 해당 파일 블록들을 저장할 데이터 노드의 목록을 반환한다.
  2. 클라이언트는 첫번째 데이터 노드에게 데이터 전송한다.
  3. 첫번째 데이터 노드는 데이터를 로컬에 저장한 후 데이터를 두번째 데이터 노드로 전송한다.
  4. 이후 계속 전달한다.
  5. 로컬에 데이터를 저장하면 자기에게 넘겨준 데이터 노드에게 데이터 로컬 저장이 완료되었음을 응답한다.(ack)
  6. 이후 계속 응답한다.
  7. 첫번째 데이터 노드는 클라이언트에게 데이터 저장이 완료되었음을 응답한다.
  • 파일 읽기 플로우
  1. 어플리케이션이 클라이언트에게 파일 읽기 요청한다.
  2. 클라이언트는 네임 노드에게 요청된 파일이 어떤 블록에 저장되어있는지 정보 요청한다.
  3. 메타 데이터를 통해 파일이 저장된 블록 리스트를 반환한다.
  4. 클라이언트는 데이터 노드에 접근하여 블록 조회 요청한다.
  5. 데이터 노드는 클라이언트에게 요정된 블록을 전송한다.
  6. 클라이언트는 어플리케이션에 데이터를 전달한다.
  • 하트비트(heartbeat)
    데이터 노드는 네임노드에게 하트비트를 3초마다 보낸다.
    하트비트에는 디스크 가용 공간 정보, 데이터 이동, 적재량 등의 정보가 들어있다.
    핸드 셰이킹에 사용된다. 10초 이상 못받으면 사용하지 못한다고 인식한다.

2. 맵리듀스(MapReduce)

대용량의 데이터 처리를 위한 분산 프로그래밍 모델, 소프트웨어 프레임워크.

맵 리듀스 프레임워크를 이용하면 대규모 분산 컴퓨팅 환경에서 대량의 데이터를 병렬로 분석 가능하다. 프로그래머가 직접 작성하는 맵과 리듀스라는 두개의 메소드로 구성되어있다.

흩어져있는 데이터를 수직화하여 그 데이터를 각각의 종류별로 모으고(Map) -> 필터링과 sorting을 거쳐 데이터를 뽑아내는(Reduce) 분산처리 기술과 관련 프레임워크를 의미한다.

  1. 맵(Map)
    흩어져 있는 데이터를 연관성 있는 데이터들로 분류하는 작업. (key, value의 형태)

  2. 리듀스(Reduce)
    Map에서 출력된 데이터에서 중복 데이터를 제거하고 원하는 데이터를 추출하는 작업

  • 맵리듀스 잡(MapReduce Job) : Client 수행 작업 단위

클라이언트가 수행하려는 작업 단위로써, 입력 데이터, 맵리듀스 프로그램, 설정 정보로 구성되어있다.
하둡은 Job을 Map Task와 Reduce Task로 작업을 나누어서 실행한다.

맵 리듀스 시스템은 Client, JobTracker, TaskTracker로 구성된다.

  1. 클라이언트 : 분석하고자 하는 데이터를 잡(JOB)의 형태로 JobTracker에게 전달한다.
  2. 잡 트래커 : 네임노드에 위치. 하둡 클러스터에 등록된 전체 잡(job)을 스케줄링하고 모니터링한다.
  3. 태스크 트래커 : 데이터노드에서 실행되는 데몬. Task를 수행하고, 잡 트래커에게 상황 보고한다.

3. 하둡 에코시스템(Hadoop EcoSystem)

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

분산 코디네이터

  • Zookeeper

분산환경에서 서버간의 상호 조정이 필요한 다양한 서비스를 제공하는 시스템이다.
분산 동기화를 제공하고 그룹 서비스를 제공하는 중앙 집중식 서비스로 알맞은 분산처리 및 분산 환경을 구성하는 서버 설정을 통합적으로 관리 한다.

분산 리소스관리

  • YARN

작업 스케줄링 및 클러스터 리소스 관리를 위한 프레임워크로 맵리듀스, 하이브, 임팔라, 스파크 등 다양한 애플리케이션들은 얀에서 작업을 실행한다.

  • Mesos (클라우드환경에대한 리소스관리)

Mesos는 Linux커널과 동일한 원칙을 사용하며 컴퓨터에 API(예:Hadoop,Spark,Kafka,Elasticsearch)를 제공한다. 페이스북, 트위터, 이베이등 다양한 기업들이 메소스 클러스터 자원을 관리하고 있다.

데이터저장

  • HBase (분산 데이터베이스)

HBase는 구글 Bigtable을 기반으로 개발된 비관계형 데이터베이스이며, Hadoop및 HDFS위에 Bigtable과 같은 기능을 제공하게 된다. 네이버 라인 메신져에 HBase를 적용한 시스템 아키텍쳐를 발표 하기도 했다.

  • HDFS (분산파일데이터저장)

애플리케이션 데이터에 대한 높은 처리량의 액세스를 제공하는 분산 파일 시스템

  • Kudu (컬럼기반 스토리지)

컬럼기반 스토리지로 하둡 에코 시스템에 새로 추가되어 급변하는 데이터에 대한 빠른 분석을 위해 설계되었다. 클라우데라에서 시작된 프로젝트로, 15년말 아파치 인큐베이션 프로젝트로 선정 되었다.

데이터수집

  • Chukwa

Chukwa는 분산 환경에서 생성되는 데이터를 안정적으로 HDFS에 저장하는 플랫폼이다.
대규모 분산 시스템을 모니터링 하기 위한 시스템으로, HDFS및 MapReduce 에 구축되어 수집된 데이터를 최대한 활용하기 위한 모니터링 및 유연한 툴킷을 포함한다.

  • Flume

Flume은 많은 양의 데이터를 수집, 집계 및 이동하기위한 분산형 서비스이다.

  • Scribe

페이스북에서 개발한 데이터 수집 플랫폼이며, Chukwa와 다르게 데이터를 중앙서버로 전송하는 방식이며, 최종 데이터는 다양한 저장소로 활용할 수 있다.

  • Kafka

카프카는 데이터 스트림을 실시간으로 관리하기 위한 분산 시스템으로, 대용량 이벤트 처리를 위해 개발 되었다.

데이터처리

  • Pig

하둡에 저장된 데이터를 맵리듀스 프로그램을 만들지 않고 SQL과 유사한 스크립트를 이용해 데이터를 처리, 맵리듀스 API를 매우 단순화한 형태로 설계 되었다.

  • Mahout

분석 기계학습에 필요한 알고리즘을 구축하기위한 오픈소스 프레임워크이며, 클러스터링, 필터링, 마이닝, 회귀분석 등 중요 알고리즘을 지원해 준다.

  • Spark

대규모 데이터 처리를 위한 빠른 속도로 실행시켜 주는 엔진이다.
스파크는 병렬 애플리케이션을 쉽게 만들수 있는 80개 이상의 고급 연산자를 제공하며 파이썬,R등에서 대화형으로 사용할 수 있다.

  • Impale

임팔라는 하둡기반 분산 엔진으로, 맵리듀스를 사용하지 않고 C++로 개발한 인메모리 엔진을 사용해 빠른 성능을 보여준다.

  • Hive

하둡기반 데이터 솔루션으로, 페이스북에서 개발한 오픈소스로 자바를 몰라도 데이터분석을 할수 있게 도와 준다. SQL과 유사한 HiveQL이라는 언어를 제공하여 쉽게 데이터 분석을 할 수 있게 도와 준다.

  • MapReduce

MapReduce는 대용량 데이터를 분산 처리 하기위한 프로그램으로 정렬된 데이터를 분산처리한다.
Map하고 이를 다시 합치는 Reduce 과정을 거친다.하둡에서 대용량 데이터 처리를 위한 기술중 큰 인기를 누리고 있다.

4. 하둡의 장단점

  • 장점
  1. 오픈소스로 라이선스에 대한 비용 부담이 적다.
  2. 시스템을 중단하지 않고, 장비의 추가가 용이(Scale Out)하다.
  3. 일부 장비에 장애가 발생하더라도 전체 시스템 사용성에 영향이 적다.(Fault Tolerance)
  • FT : 장애에도 영향이 없다!
  • HA : 어느정도 지연이 있는 장애 대책법
  1. 저렴한 구축 비용과 비용대비 빠른 데이터 처리
  2. 오프라인 배치 프로세싱에 최적화
  • 단점
  1. HDFS에 저장된 데이터를 변경 불가하다.
  2. 실시간 데이터 분석 같이 신속하게 처리해야 하는 작업에는 부적합하다.
  3. 너무 많은 버전과 부실한 서포트
  4. 설정의 어렵다.
profile
Back-end Developer

0개의 댓글