하둡 Hadoop(High-Availability Distributed Object-Oriented Platform) 뿌시기

먼저… 데이터 엔지니어링 기초

  • 데이터 파이프라인의 주요 3 요소는?
  • 데이터 처리 방법 두가지는?

두 질문에 대답하지 못한다면,

본격적으로 Hadoop 을 알아보자!!

1. 분산 시스템
2. 하둡
3. HDFS
4. 맵 리듀스
5. 하둡 에코 시스템

분산 시스템

It deals with programs that can make calls to objects in different address spaces either on the same machine or on a different machine.

출처: https://medium.com/free-code-camp/a-note-on-distributed-systems-3c796f1eb0a0

빅데이터란 한 대의 컴퓨터로는 저장하거나 연산하기 어려운 규모의 거대 데이터를 의미한다. 따라서 빅데이터 같은 경우는 여러 대의 컴퓨터로 나눠서 일을 처리해야 한다. 이때 필요한 것이 분산 컴퓨팅이다.

생각 넓히기: 빅 데이터를 싱글 컴퓨터에서 돌리면 어떤 일이 일어날까? 빅 데이터는 얼마나 큰 크기를 말하는 걸까?

Hadoop: 프레임워크

The Apache Hadoop software library is a framework that allows for the distributed processing of large data sets across clusters of computers using simple programming models. It is designed to scale up from single servers to thousands of machines, each offering local computation and storage. Rather than rely on hardware to deliver high-availability, the library itself is designed to detect and handle failures at the application layer, so delivering a highly-available service on top of a cluster of computers, each of which may be prone to failures.
(출처: 공식문서 https://hadoop.apache.org/)

  • reliable: 고가용성을 제공하기 위해 하드웨어에 의존하는 대신 응용 프로그램 계층에서 오류를 감지하고 처리하도록 설계되어 각각 오류가 발생하기 쉬운 컴퓨터 클러스터 위에서 고가용성 서비스를 제공
  • scalable: 단일 서버에서 수천 대의 머신으로 확장 가능
  • distributed: 컴퓨터 클러스터에서 대규모 데이터 셋의 분산 처리를 허용

하둡의 Architecture 및 파일 포맷

  • Distributed Data Storage 인 HDFS
  • 리소스 매니저 YARN
  • 하둡의 분산 컴퓨팅을 위한 프레임워크 Map Reduce
  • Cluster Management System Zookeeper

Hadoop V1

2011년에 분산 저장병렬 처리를 목적으로 탄생

분산 저장

  • 네임 노드: 블록 정보를 가지고 있는 메타 데이터, 데이터 노드 관리
  • 데이터 노드: 데이터를 블록 단위로 저장하면서 블록 단위 데이터를 복제하여 데이터 유실에 대비

병렬 처리

  • 잡 트래커(Job Tracker): 전체 진행 상황을 관리하고 자원 관리도 처리
  • 태스크 트래커(Task Tracker): 실제 작업을 처리하는 일
    => 병렬 처리의 작업 단위: 슬롯 (맵 슬롯, 리듀스 슬롯)
    => 병렬 처리를 통해 클러스터당 최대 4000개의 노드 등록 가능

Hadoop V2: Yarn Architecture

A framework for job scheduling and cluster resource management.

V1 의 잡 트래커 병목 현상 문제 제거 => YARN 아키텍처 (Job Tracker의 기능 분리)

  • 자원관리: 리소스 매니저, 노드 매니저 (클러스터 당 만개 데이터 등록 가능)
  • 스케줄링 및 모니터링: 애플리케이션(작업 단위)의 라이프 사이클 관리, 어플리케이션 마스터 (클러스트당 만개 데이터 등록가능)
    => 전역 Resource Manager(RM)과 애플리케이션별 Application Master(AM)을 갖음
    => 어플리케이션은 단일 작업 또는 작업의 DAG

용어 정리

  • 작업 단위: 어플리케이션 (YARN 아키텍처), 잡 (하둡 v1)
  • 작업의 처리 단위: 컨테이너 (YARN 아키텍처), 슬롯 (하둡 v1)
출처: 공식문서 https://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-site/YARN.html

Manager

데이터 계산 프레임워크를 형성

  • ResourceManager: 시스템의 모든 응용 프로그램 간에 리소스를 중재하는 최종 권한
    → Scheduler: 용량, 대기열 등의 친숙한 제약 조건에 따라 실행 중인 다양한 응용 프로그램에 리소스를 할당하는 역할
    → Application Manager: 작업 제출을 수락하고, 응용 프로그램별 ApplicationMaster를 실행하기 위한 첫 번째 컨테이너를 협상하고, 실패 시 ApplicationMaster 컨테이너를 다시 시작하는 서비스를 제공
  • NodeManager: 컨테이너를 담당하고 리소스 사용량(cpu, 메모리, 디스크, 네트워크)을 모니터링하고 이를 ResourceManager/Scheduler에 보고하는 시스템별 프레임워크 에이전트

더 자세한 YARN의 동작 방식→ 링크

Hadoop V3

  • Minimum required Java version increased from Java 7 to Java 8
  • Support for erasure coding in HDFS: 이레이져 코딩은 패리티 블록을 이용하여 1G데이터 저장에 1.5G의 디스크를 사용하게 되고 저장소의 효율성이 증가합니다.
  • MapReduce task-level native optimization
  • Support for more than 2 NameNodes.

HDFS(Hadoop Distributed FileSystem)

A distributed file system that provides high-throughput access to application data.

하둡 분산형 파일시스템(HDFS)는 하둡 네트워크에 연결된 기기에 데이터를 저장하는 분산형 파일시스템으로 실시간 처리보다는 배치처리를 목적으로 설계 → 작업량이 작거나 빠른 데이터 응답이 필요한 작업에서는 부적합

  • HDFS는 내결함성이 높으며 저가 하드웨어에 배포하도록 설계
  • HDFS는 애플리케이션 데이터에 대한 높은 처리량 액세스를 제공하며 대용량 데이터 셋이 있는 애플리케이션에 적합

특징

  1. 데이터를 블록 단위로 나누어 저장: 큰 데이터를 나누어 저장하므로 단일 디스크 보다 큰 파일도 저장이 가능
  2. 블록을 복제하여 중복 저장: 하나의 블록은 3개의 블록으로 복제되어 저장된다.
  3. Simple Coherency Model
    읽기 중심을 목적으로 만들어 졌기 때문에 파일의 수정은 지원 안 함
  4. “Moving Computation is Cheaper than Moving Data”
    맵리듀스(아래에서 나옴)는 HDFS의 데이터의 지역성을 이용해 처리 속도 증가
  5. 높은 이식성: 한 플랫폼에서 다른 플랫폼으로 쉽게 이식할 수 있도록 설계

네임 노드와 데이터 노드 (Distributed, Scalability)

마스터/슬레이브 아키텍처

  • 마스터 서버인 단일 Name Node
    파일 시스템 네임 스페이스를 관리하고 클라이언트의 파일 액세스를 규제
    → 파일 및 디렉토리 열기, 닫기, 이름 바꾸기와 같은 파일 시스템 네임스페이스 작업을 실행(NameNode는 파일 시스템 네임스페이스를 유지관리)
    → DataNode에 대한 블록 매핑을 결정
  • 여러 Data Node
    클러스터의 노드당 하나씩 실행되는 노드에 연결된 스토리지를 관리
    → 파일은 하나 이상의 블록으로 분할되고 이러한 블록은 DataNode 셋에 저장
    → DataNode는 파일 시스템 클라이언트의 읽기 및 쓰기 요청을 처리
    (DataNode는 HDFS 데이터를 로컬 파일 시스템의 파일에 저장)
  • 파일 시스템 네임 스페이스
    기존의 계층적 파일 구성을 지원: 사용자나 응용 프로그램은 디렉터리를 만들고 이 디렉터리 안에 파일을 저장
출처: https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html

파일 시스템 메타 데이터의 지속성

NameNode는 EditLog라는 트랜잭션 로그를 사용하여 파일 시스템 메타데이터에 발생하는 모든 변경 사항을 지속적으로 기록. 마찬가지로 파일의 복제 요소를 변경하면 새 레코드가 EditLog에 삽입. NameNode는 로컬 호스트 OS 파일 시스템의 파일을 사용하여 EditLog를 저장.

Reliability

HDFS의 주요 목표는 오류가 있는 경우에도 데이터를 안정적으로 저장하는 것 → 세 가지 일반적인 실패 유형: NameNode 실패, DataNode 실패 및 네트워크 파티션

  • 데이터 디스크 장애, 하트비트 및 재복재: 각 DataNode는 주기적으로 NameNode에 Heartbeat 메시지를 보냅니다. 네트워크 파티션으로 인해 DataNode의 하위 집합이 NameNode와의 연결이 끊어질 수 있습니다. NameNode는 Heartbeat 메시지가 없을 때 이 조건을 감지합니다.
  • 클러스터 재조정: 스키마는 DataNode의 여유 공간이 특정 임계값 아래로 떨어지면 한 DataNode에서 다른 DataNode로 데이터를 자동으로 이동할 수 있습니다. 특정 파일에 대한 수요가 갑자기 높은 경우 구성표가 동적으로 추가 복제본을 생성하고 클러스터의 다른 데이터 균형을 재조정할 수 있습니다. (아직 구현 안 됨)
  • 데이터 무결성: HDFS 클라이언트 소프트웨어는 HDFS 파일의 내용에 대한 체크섬 검사를 구현합니다. 클라이언트는 HDFS 파일을 생성할 때 파일의 각 블록에 대한 체크섬을 계산하고 이러한 체크섬을 동일한 HDFS 네임스페이스의 별도 숨겨진 파일에 저장합니다. 클라이언트가 파일 내용을 검색할 때 각 DataNode에서 받은 데이터가 연결된 체크섬 파일에 저장된 체크섬과 일치하는지 확인합니다. 그렇지 않은 경우 클라이언트는 해당 블록의 복제본이 있는 다른 DataNode에서 해당 블록을 검색하도록 선택할 수 있습니다.
  • 메타데이터 디스크 오류: FsImage 및 EditLog는 HDFS의 중심 데이터 구조입니다. 이러한 파일이 손상되면 HDFS 인스턴스가 작동하지 않을 수 있습니다. 이러한 이유로 NameNode는 FsImage 및 EditLog의 여러 복사본 유지 관리를 지원하도록 구성할 수 있습니다.
  • 스냅샷: 롤백 지원

HDFS 파일 사용

참고 블로그 링크

출처: http://www.corejavaguru.com/bigdata/hadoop/hdfs-file-read
  1. open() 명령어를 통해 DistributedFileSystem에 있는 FileSystem의 파일을 연다
  2. PRC()를 NameNode를 호출하여 저장되어있는 블록이 저장된 DataNode의 주소를 받는다.
  3. DistributedFileSystem은 client가 데이터를 검색할 수 있도록 검색을 지원하는 입력 스트림인 FSDataInputStream를 client에게 준다. 그러면 그것을 통해 찾고자 하는 datanode와 DFSInputStream이 맵핑된다. 그리고 검색후 read() 명령어를 통해 호출을한다.
  4. datanode 주소가 저장된 DFSInputStream은 datanode와 연결되고, 데이터는 datanode에서 클라이언트로 가게된다. 이러한 형식으로 반복 read()가 호출하여 파일을 읽는다.
  5. 블록 끝에 도달하면 DFSInputStream은 데이터 노드에 대한 열결을 닫고, 다음 블록에 가장 접합한 데이터 노드를 찾는다.
  6. 읽기가 마치면 FSDataInputStram에서 close()를 호출한다.

맵 리듀스

A YARN-based system for parallel processing of large data sets.

MapReduce 작업은 일반적으로 입력 데이터 세트를 완전히 병렬 방식으로 맵 작업 에 의해 처리되는 독립 청크로 분할합니다 . 프레임워크는 맵의 출력을 정렬한 다음 리듀스 작업에 입력됩니다 . 일반적으로 작업의 입력과 출력은 모두 파일 시스템에 저장됩니다. 프레임워크는 작업 일정을 관리하고 모니터링하며 실패한 작업을 다시 실행합니다.

일반적으로 컴퓨팅 노드와 스토리지 노드는 동일합니다. 이 구성을 통해 프레임워크는 데이터가 이미 있는 노드에서 작업을 효과적으로 예약할 수 있으므로 클러스터 전체에서 매우 높은 총 대역폭이 생성됩니다.

구성

  • Resource Manager
  • Node Manager
  • Application 당 MRAppMaster

입력 및 출력

MapReduce 프레임워크는 <key, value> 쌍 에서만 독점적으로 작동합니다 . 즉, 프레임워크는 작업에 대한 입력을 <key, value> 쌍의 집합으로 보고 <key, value> 쌍 의 집합을 출력으로 생성합니다.

Mapper

매퍼 는 입력 키/값 쌍을 중간 키/값 쌍 세트에 매핑합니다.

맵은 입력 레코드를 중간 레코드로 변환하는 개별 작업입니다. 변환된 중간 레코드는 입력 레코드와 동일한 유형일 필요가 없습니다. 주어진 입력 쌍은 0개 또는 많은 출력 쌍에 매핑될 수 있습니다.

Reducer

Reducer 는 키를 더 작은 값 집합으로 공유하는 중간 값 집합을 줄입니다.

Partitioner

Partitioner 는 키 공간을 분할합니다.

Partitioner는 중간 맵 출력 키의 파티셔닝을 제어합니다. 키(또는 키의 하위 집합)는 일반적으로 해시 함수에 의해 파티션을 파생하는 데 사용됩니다 . 총 파티션 수는 작업에 대한 축소 작업 수와 동일합니다. 따라서 이것은 m개의 축소 작업 중 어느 것이 축소를 위해 전송되는 중간 키(따라서 레코드)를 제어합니다.

Counter

Counter 는 MapReduce 애플리케이션이 통계를 보고하는 기능입니다.

하둡 에코 시스템

아파치 하둡 프로젝트는 reliable, scalable, distributed computing 을 위한 오픈소스 소프트웨어를 개발한다.

ㅊ출처: https://fastcampus.co.kr/data_red_bdl
출처: 하둡 프로그래밍(위키북스)

참고 블로그

하둡 인터페이스

  • Hue(Hue, Hadoop User Experience)
    하둡과 하둡 에코시스템의 지원을 위한 웹 인터페이스를 제공하는 오픈 소스. Hive 쿼리를 실행하는 인터페이스를 제공하고, 시각화를 위한 도구를 제공. 잡의 스케줄링을 위한 인터페이스와 잡, HDFS, 등 하둡을 모니터링하기 위한 인터페이스도 제공.
  • Zeppelin
    Notebook 이라고 하는 웹 기반 Workspace에 Spark, Tajo, Hive, ElasticSearch 등 다양한 솔루션의 API, Query 등을 실행하고 결과를 웹에 나타내는 솔루션

수집

  • Flume
  • Sqoop

빅데이터 저장, 활용

  • Hbase: 하둡에서 사용하는 데이터베이스는 관계형 데이터베이스가 아닌 NoSQL(비정형화된 데이터베이스). Hbase는 압축 기능과 자주 사용되는 데이터를 미리 메모리에 캐싱하는 인-메모리(In-Memory)기술을 사용하여 데이터 검색 속도를 높인다. 원초적 데이터를 가져와서 key, value 형태와 같이 가공을 해서 쉽게 가져다 쓸 수 있게 만든 데이터베이스

빅데이터 처리

MapReduce 보다 쉬운 데이터 처리 스크립트 언어

  • Hive: [Facebook] SQL(유사) 구문에서 MapReduce를 자동생성하겠다는 목적으로 만들어짐
  • Pig: [Yahoo] 많은 사람들이 사용할 수 있도록 MapReduce 프로그램을 만들어 주는 고수준 언어를 만들겠다는 목적으로 만들어짐

빅데이터 관리

  • Oozie: 용도에 맞게 데이터 마트를 만들 때, 중간중간에 있는 workflow들을 관리
  • HCatalog: 하둡에 저장된 데이터를 다루는 엔진
  • Zookeeper: 액티브 네임노드에 문제가 발생하는 것을 자동으로 확인하는 것이 어렵기 때문에 보통 주키퍼를 이용하여 장애 발생시 자동으로 스탠바이 네임노드로 변경될 수 있도록 한다. (분산 시스템 간의 정보 공유 및 상태 체크, 동기화를 처리하는 프레임워크로 이러한 시스템을 코디네이션 서비스 시스템이라고 한다. Zookeeper를 많이 사용하는 이유는 기능에 비해 시스템이 단순하기 때문이다.)

추천 책

책 요약 블로그 링크

다음 예고편

  • Hadoop 맵 리듀스 방식의 데이터 처리를 보완한 Spark 등장!
  • 구글 Colab 에서 직접 Spark 로 DAG 만들어보기
    (참고: https://t0-0t.tistory.com/12)
https://www.buymeacoffee.com/soniacomp

--

--

--

Data Engineer interested in constructing Data-Driven Architecture with Cloud Service

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
SoniaComp

SoniaComp

Data Engineer interested in constructing Data-Driven Architecture with Cloud Service

More from Medium

A brief overview of Apache Hadoop

Spark Applications Overview | Use Cases of Apache Spark

A Better Approach to Controlling Modern Data Cloud Costs

Update your Hadoop (Big Data on-premise) to Cloud