Hadoop 이란?
Apache Hadoop 소프트웨어는 간단한 프로그래밍 모델을 사용하여 컴퓨터의 클러스터에서 대규모 데이터 세트를 분산 저장 및 처리할 수 있는 오픈소스 프레임워크입니다. Hadoop은 단일 컴퓨터에서 시작해 수천 대의 클러스터된 컴퓨터로까지 수직 확장할 수 있도록 설계되었으며 각 머신은 로컬 계산 기능과 스토리지를 제공합니다. 일반적으로 하둡 분산처리시스템(HDFS)과 맵리듀스(MapReduce) 프레임워크로 시작되었으나, 여러 데이터 저장, 실행 엔진, 프로그래밍 및 데이터 처리 같은 하둡 생태계 전반을 포함하는 의미로 확장, 발전되고 있습니다.
Apache Hadoop의 개요
기본 Hadoop 프레임워크는 다음과 같은 4개의 모듈로 구성되며 이러한 모듈이 함께 작동하여 Hadoop 생태계를 형성합니다.
Hadoop 분산 파일 시스템(HDFS): Hadoop 생태계의 주요 구성요소인 HDFS는 스키마를 미리 정의하지 않고도 애플리케이션 데이터에 높은 처리량으로 액세스할 수 있게 해주는 분산 파일 시스템입니다.
Yet Another Resource Negotiator(YARN): YARN은 클러스터에서 컴퓨팅 리소스를 관리하고 이를 사용하여 사용자의 애플리케이션을 예약하는 리소스 관리 플랫폼입니다. 이 모듈은 Hadoop 시스템 전체에서 예약 및 리소스 할당을 수행합니다.
맵리듀스: 맵리듀스는 대규모 데이터 처리를 위한 프로그래밍 모델입니다. 분산 및 병렬 계산 알고리즘을 사용하는 맵리듀스는 처리 로직을 전달할 수 있게 해주며, 큰 데이터 세트를 하나의 관리 가능한 세트로 변환하는 애플리케이션을 작성하는 데 유용합니다.
Hadoop Common: Hadoop Common에는 다른 Hadoop 모듈이 사용 및 공유하는 라이브러리와 유틸리티가 포함됩니다.
모든 Hadoop 모듈의 설계 근간에는 개별 머신 또는 머신 랙의 하드웨어 오류가 일반적인 것이며 프레임워크에 의해 소프트웨어에서 자동으로 처리되어야 한다는 가정이 전제되어 있습니다. Apache Hadoop 맵리듀스 및 HDFS 구성요소는 원래 Google 맵리듀스 및 Google 파일 시스템(GFS) 문서에서 파생되었습니다.
전체 Hadoop 오픈소스 생태계는 계속 발전하고 있으며 HDFS, YARN, 맵리듀스 외에도 빅데이터의 수집, 저장, 처리, 분석, 관리에 유용한 많은 도구와 애플리케이션을 포함합니다. 여기에는 Apache Pig, Apache Hive, Apache HBase, Apache Spark, Presto 및 Apache Zeppelin이 포함됩니다.
Hadoop Eco-System (하둡 에코시스템)
하둡의 코어 프로젝트는 HDFS와 MapReduce지만 그 외에도 다양한 서브 프로젝트들이 많습니다.
하둡 에코시스템은 프레임워크를 이루고 있는 다양한 서브 프로젝트들의 모임이라고 볼 수 있습니다.
아래 그림들은 하둡 에코시스템을 나타낸 것 입니다.
- 하둡의 코어 프로젝트 : HDFS(분산 데이터 저장), MapReduce(분산 처리)
- 하둡의 서브 프로젝트 : 워크플로우 관리, 데이터 마이닝, 분석, 수집, 직렬화 등
구성 요소 (하둡의 코어 프로젝트)
1. 하둡 분산형 파일 시스템 (Hadoop Distributed File System, HDFS)
하둡 네트워크에 연결된 기기에 데이터를 저장하는 분상형 파일 시스템
하둡 분산 파일 시스템은 하둡 프레임워크를 위해 자바 언어로 작성된 분산 확장 파일 시스템입니다.
HDFS는 여러 기계에 대용량 파일을 나눠서 저장을 합니다.
데이터들을 여러 서버에 중복해서 저장함으로써 데이터 안정성을 얻을 수 있습니다.
특징
- HDFS는 데이터를 저장하면, 다수의 노드에 복제 데이터도 함께 저장해서 데이터 유실을 방지합니다.
- HDFS에 파일을 저장하거나, 저장된 파일을 조회하려면 스트리밍 방식으로 데이터에 접근해야 합니다.
- 한 번 저장된 데이터는 수정할 수 없고, 읽기만 가능하여 데이터의 무결성을 유지합니다.
- 데이터 수정은 불가능하지만 파일 이동, 삭제, 복사를 진행할 수 있는 인터페이스를 제공합니다.
아키텍쳐
HDFS는 마스터(Master)/슬레이브(Slave) 구조를 가집니다. HDFS 클러스터는 하나의 네임 노드와 파일 시스템을 관리하고,
클라이언트의 접근을 통제하는 마스터 서버로 구성됩니다. 클러스터의 각 노드에는 데이터 노드가 하나씩 존재하고, 이 데이터 노드는 실행될 때마다 노드에 추가되는 스토리지를 관리합니다. HDFS는 네임 스페이스를 공개해서 유저 데이터가 파일에 저장되는 것을 허락합니다.
네임노드는 파일과 디렉토리 읽기, 닫기, 이름 바꾸기 등 파일 시스템 내 네임스페이스의 여러 기능을 수행합니다.
또한 데이터 노드와 블록들의 매핑을 결정합니다. 데이터 노드는 파일 시스템의 클라이언트가 요구하는 읽기, 쓰기 기능을 담당합니다.
데이터 노드는 네임 노드에서 생성, 삭제, 복데 등과 같은 기능도 수행합니다.
네임 노드와 데이터 노드는 GNU/Linux OS를 기반으로 디자인된 소프트웨어의 일부입니다. HDFS는 자바 언어를 사용하므로 자바가 동작하는 어떤 컴퓨터에서나 네임노드와 데이터노드 소프트웨어를 실행할 수 있습니다.
파일 저장 플로우
- 어플리케이션이 HDFS 클라이언트에게 파일 저장을 요청합니다. 클라이언트는 네임 노드에게 파일 블록들이 저장될 경로 생성을 요청하고, 네임 노드는 해당 파일 경로가 존재하지 않으면 경로를 생성하고 다른 클라이언트가 해당 경로를 수정하지 못하게 lock을 시킵니다. 이후 네임노드는 클라이언트에게 해당 파일 블록들을 저장할 데이터 노드의 목록을 반환합니다.
- 클라이언트는 첫번째 데이터 노드에게 데이터를 전송합니다.
- 첫번째 데이터 노드는 데이터를 로컬에 저장합니다. 저장한 뒤 두번째 데이터 노드로 전송합니다.
- 두번째 노드도 마찬가지로 로컬에 저장하고, 세번째 데이터 노드로 전송합니다.
- 세번째 노드에서 마지막으로 로컬에 저장이 완료되면 두번째 데이터 노드에게 로컬 저장이 완료됨을 응답합니다.(ack)
- 두번째 노드에서는 세번째 노드에서 온 응답을 통하여 첫번째 데이터 노드에게 응답합니다. (ack)
- 첫번째 데이터 노드에서는 클라이언트에게 데이터 저장이 완료되었음을 응답합니다.
파일 읽기 플로우
- 어플리케이션이 HDFS 클라이언트에게 파일 읽기를 요청합니다.
- 클라이언트는 네임 노드에게 요청된 파일이 어떤 블록에 저장되어있는지 정보를 요청합니다.
- 메타 데이터를 통해 파일이 저장된 블록 리스트를 클라이언트에게 반환합니다.
- 클라이언트는 데이터 노드에 접근하여 블록 조회를 요청합니다.
- 데이터 노드는 클라이언트에게 요청된 블록을 전송합니다.
- 클라이언트는 어플리케이션에 조회된 데이터를 전송합니다.
하트비트(Heartbeat)
- 데이터 노드는 네임노드에게 하트비트를 3초마다 보냅니다. 하트비트에는 디스크 가용 공간 정보, 데이터 이동, 적재량 등의 정보가 들어있습니다.
- 핸드 셰이킹에 사용됩니다. 10초이상 못받으면 사용하지 못한다고 인식합니다.
2. 맵리듀스(MapReduce)
대용량의 데이터 처리를 위한 분산 프로그래밍 모델, 소프트웨어 프레임워크입니다.
맵 리듀스 프레임워크를 이용하면 대규모 분산 컴퓨팅 환경에서 대량의 데이터를 병렬로 분석이 가능해집니다.
프로그래머가 직접 작성하는 맵과 리듀스라는 두개의 메소드로 구성되어 있습니다.
흩어져있는 데이터를 수직화하여, 그 데이터를 각각의 종류별로 모으고(Map) > Filtering과 Sorting을 거쳐 데이터를 뽑아내는 (Reduce) 분산 처리 기술과 관련 프레임워크를 의미합니다.
맵(Map)
흩어져 있는 데이터를 연관성 있는 데이터로 분류하는 작업입니다. (key, value의 형태를 갖고 있습니다.)
리듀스(Reduce)
Map에서 출력된 데이터에서 중복 데이터를 제거하고 원하는 데이터를 추출하는 작업입니다.
맵리듀스 잡(MapReduce Job)
클라이언트가 수행하려는 작업의 단위로써 입력데이터, 맵리듀스 프로그램, 설정 정보로 구성되어 있습니다.
하둡에서는 Job을 Map Task와, Reduce Task로 Job을 나누어 실행합니다.
맵 리듀스 시스템은 Client, JobTracker, TaskTracker로 구성됩니다.
- 클라이언트 : 분석하고자 하는 데이터를 Job의 형태로 JobTracker에게 전달합니다.
- 잡 트래커 : 네임노드에 위치하며, 하둡 클러스터에 등록된 전체 Job을 스케줄링하고 모니터링 합니다.
- 태스크 트래커 : 데이터 노드에서 실행되는 데몬이며, Task를 수행하고 잡 트래커에게 상황을 보고합니다.
출처
- https://butter-shower.tistory.com/71
- https://m.blog.naver.com/acornedu/222069158703
- https://cloud.google.com/learn/what-is-hadoop?hl=ko
'Infra Engineering > Apache' 카테고리의 다른 글
[Apache] Hadoop (2) - 하둡 에코시스템 (Hadoop-Ecosystem) (0) | 2021.09.13 |
---|
댓글