데이터로그😎
[Hadoop] HDFS(Hadoop Distributed File System) 본문
🗂️ 분산 파일 시스템 (DFS - Distributed File System)
DFS (Distributed File System)
DFS란?
빅데이터는 여러 클러스터(컴퓨터)에 걸쳐 데이터를 분산하고, 각 클러스터(노드)의 컴퓨팅 파워를 사용하여 정보를 처리하는 것이다. DFS은 네트워크에 연결된 여러 머신의 스토리지를 관리하는 파일 시스템이다.
- 종류: HDFS, GFS, Ceph 등
DFS 작동방식
- Distribution: 전체 데이터를 나눈 블록을 여러 노드에 분산 시킨다. 각 노드는 고유의 컴퓨팅 능력이 있기 때문에, DFS는 데이터 블록을 병렬 처리할 수 있다.
- Replication: DFS는 서로 다른 클러스터에 데이터 블록의 복사본을 만들어 놓는다. 이로 인해, 내결함성과 높은 동시성을 갖는다. 아래의 사진을 예로 들어 Rack #1이 고장났다고 가정해보자. 만약 Rack #1에만 1,2,3,4 파일블록이 저장되어 있다면 Rack #1의 고장으로 1,2,3,4 파일블록이 유실 되었기 때문에 전체 File의 복구가 어렵다. 그러나 DFS에서는 1,2,3,4 파일블록이 Rack #2, #3, #4에 분산되어 저장되었기 때문에 Rack #1이 고장 났더라도 File의 복구가 가능하다.
DFS 장점
- Scalability(확장성) : rack이나 cluster를 system에 더하여 구조를 확장 가능하다.
- Fault Tolerance(내결함성): Cluster, Rack이 고장났거나 Rack이 network로부터 연결이 끊긴 경우에도 큰 문제가 발생하지 않는다.
- High Concurrency(높은 동시성): 여러 클라이언트의 요청을 동시에, 각 노드에서 처리 가능하다.
DFS 문제점
- 네트워크 기반이다 보니 네트워크 상 문제가 발생할 수 있다.
- 여러 머신들 중 하나의 머신에 장애가 발생할 수 있다.
- 따라서 DFS는 하나의 머신에서 장애가 발생하더라도 데이터가 유실되지 않도록 견고한 파일 시스템을 유지해야 한다.
출처: https://www.mindtory.com/an-introduction-to-distributed-file-system/
GFS (Google File System)
- 2003년에 구글에서 발표한 분산 파일 시스템
- HDFS의 모태가 되는 구조
- 특징: Master / Worker 구조를 제안
- GFS Master (Master 역할), Chunk Server (Worker 역할)
🐘 HDFS (Hadoop Distributed File System)
Hadoop (하둡)
하둡은 대규모 데이터 세트를 분산 처리하기 위한 오픈소스 프레임 워크이다. 대용량 데이터를 다수의 머신에 분산하여 처리하고 저장할 수 있는 기능을 제공한다.
구성요소
- HDFS (Hadoop Distributed File System): 데이터를 저장하고 분산 처리하는 파일 시스템.
- MapReduce: 분산 데이터 처리를 위한 프로그래밍 모델 및 프레임워크.
- YARN (Yet Another Resource Negotiator): 클러스터 자원 관리 및 작업 스케줄링을 담당하는 컴퓨팅 클러스터 관리 시스템.
하둡 클러스터
- 클러스터란 여러 대의 컴퓨터들이 연결되어 하나의 시스템처럼 동작하는 컴퓨터들의 집합
- 하둡 클러스터란 단일 서버로 운용되는 것이 아니라, 여러 개의 서버를 하나로 묶어서 클러스터를 구성
- 대용량 데이터를 처리하기 위한 분산 처리 시스템으로 사용됨.
- 하둡은 클러스터 상에서 동작하며, 데이터를 여러 개의 노드에 분산하여 저장하고 처리한다.
- 데이터의 안정성, 가용성 보장. 빠른 처리 가능.
HDFS (Hadoop Distributed File System)
- 범용 하드웨어를 사용하여 분산 파일 시스템 구성
- 클러스터 내에 분산 파일 시스템을 구성하는데, 비싼 서버 대신 일반적인 범용 컴퓨터로도 저렴한 가격에 분산 파일 시스템을 구성할 수 있습니다.
- 블록 단위 저장
- 마스터 / 워커 구조
- 장애 허용 시스템(Fault Tolerance, 내고장성) 제공
- 데이터 복제(Replication)을 제공하여 네트워크나 워커에 장애가 발생하더라도 계속해서 서비스를 제공할 수 있습니다.
- 확장성 제공
- 하드웨어를 추가하면 용량이 선형적으로 그대로 증가하는 선형적인 확장성을 제공합니다.
HDFS Block : 파일 저장 단위
- Block이란 HDFS에서 파일을 저장하는 단위이다.
- HDFS는 블록을 이용해 하나의 거대한 파일을 여러 개의 블록으로 저장한다.
- 블록 사이즈는 128MB이며, 일반적인 분산 시스템보다 훨씬 크다. 실무에서는 128MB보다 더 큰 블록 사이즈를 갖는 경우도 있다.
- 예를 들어 블록 사이즈가 128MB라면, 374MB 는 128MB, 128MB, 118MB 세개의 블록으로 나뉜다.
Master / Worker 아키텍처
하둡의 아키텍처는 Master와 Worker로 구성되어 있다.
아키텍처 | 기능 |
Master | - 관리자의 역할로서 명령만을 내린다. - Worker node들에 대한 메타 데이터를 갖고 있다. - 클라이언트로부터 작업 요청을 받으면, 메타 데이터를 토대로 원하는 데이터를 가지고 있는 Worker node에게 작업을 명령한다. |
Worker | - 데이터에 대한 처리 작업을 실제로 수행한다. |
HDFS 구조
Namenode
메타데이터 관리, 데이터 노드 관리
- 메타데이터 관리
- 네임노드의 메타데이터: 어떤 데이터노드에 어떤 블록이 들어있는지에 대한 정보가 주를 이룬다.
메타데이터 기능 FsImage(파일 시스템 이미지) - 블록의 네임스페이스를 포함한 데이터 블록 등 데이터의 모든 정보
- HDFS가 시작될 때 한 번 생성되면 변경되지 않는다.EditLog - 데이터노드에서 발생한 데이터 변환 내역. HDFS의 파일 생성, 삭제, 수정, 트랜잭션 등에 대한 모든 정보
- 계속해서 증가할 수 있으며, HDFS가 작동하는 동안 변경 사항이 지속적으로 로그에 추가된다.
- 네임노드의 메타데이터: 어떤 데이터노드에 어떤 블록이 들어있는지에 대한 정보가 주를 이룬다.
- 데이터 노드를 관리
- 데이터 노드는 일정 주기마다 네임노드에게 자신의 상태를 알리는 HeartBeat Packet을 전송
- HeartBeat Packet을 통해 네임노드에서 데이터 노드의 상태를 알 수 있다.
- 데이터 노드는 네임 노드에게 블록 리포트도 전송하여 어떤 파일 작업이 일어났는지도 보고한다.
Secondary Namenode
네임노드에 대한 FsImage와 EditLog를 주기적으로 병합하는 체크포인트 과정 수행
- Secondary Namenode는 네임노드의 로그 파일인 EditLog의 크기가 계속해서 증가하는 상황을 관리한다.
- 네임노드가 이중화된 노드가 아니고, 네임노드의 스탠바이 역할이나 백업이 아니다.
- EditLog의 크기를 제어하고 체크포인트 작업을 수행하여 네임노드의 성능을 개선한다.
- 체크포인트 과정: 주기적으로 Secondary Namenode는 Namenode의 FsImage와 EditLog를 합쳐서 새로운 FsImage를 생성하는 과정을 의미한다.
- 새로운 FsImage가 생성되면, EditLog는 초기화되고 비어있는 상태가 된다.
- 이렇게 주기적으로 FsImage와 EditLog를 합쳐서 새로운 FsImage를 생성함으로써, EditLog의 크기를 제어하고 네임노드가 시작될 때 EditLog를 메모리에 로딩하는 시간을 단축할 수 있다.
체크포인트 과정 내용 1. Roll Edits - EditLog에 Rolling을 요청한다.
- Rolling: 현재 로그를 새로운 이름으로 변경하고, 기존의 이름으로 새로운 로그의 파일을 생성하는 것2. Retrieve FsImage and EditLogs from Primary - HDFS에 변경이 일어나 EditLog에 대한 롤링이 발생되면 세컨더리 네임노드는 네임노드로부터 기존의 EditLog와 FsImage를 다운로드 받는다. 3. Merge - 다운로드가 완료되면 세컨더리 네임노드는 기존의 EditLog와 FsImage를 병합한다. 4. Transfer checkpoint to Primary - 병합이 완료되면 완료된 FsImage를 다시 네임노드에 업로드 한다. 5. Roll FsImage.ckpt and Editing - 업로드된 FsImage를 네임노드에서 교체한다.
Datanode
실제 파일을 저장하고, 현재 자기 자신의 상태를 주기적으로 네임노드에게 알려주는 역할
- 실제 파일을 저장하는 역할을 수행
-
- 저장: 파일은 블록 단위로 저장된다.
-
- 현재 자기 자신의 상태를 주기적으로 네임노드에게 알려준다.
- 현재 자기 자신의 상태를 HeartBeat Packet을 통해 주기적으로 네임노드에게 알려준다. 만약 네임노드가 데이터노드의 HeartBeat Packet을 받지 못한다면 데이터노드가 동작하지 않는 것으로 간주하고, 해당 데이터 노드에 데이터를 저장하지 않도록 설정한다.
- 블록 레포트 작성
- 저장하고 있는 블록의 변경사항을 체크하고, 블록 레포트를 작성하여 네임노드에게 전달한다. 네임노드는 이런 블록 레포트를 통해 메타 데이터를 갱신하게 된다.
🗄️HDFS의 저장, 연산 방식
HDFS 저장 방식
예시: 375MB의 데이터를 세 대의 데이터 노드에 저장하는 상황이다. 복제 인수(Rreplication Factor)는 2로 설정했다.
예시와 같은 상황에서는 375MB의 데이터를 128MB의 파일로 나누어야 하기 때문에, 총 128+128+118MB 의 3개의 블록이 생성된다. 이 3개의 블록은 하나의 데이터 노드에 저장되는 것이 아닌 여러 노드에 걸쳐 저장된다. 이 때 복제 인수를 2로 설정했기 때문에 데이터 블록은 2개씩 만들어진다.
HDFS 읽기, 쓰기
HDFS 사용 순서
1. HDFS 클라이언트에 의한 파일 작성/읽기 요청 | 사용자나 응용 프로그램은 HDFS 클라이언트를 통해 HDFS에 파일을 작성하거나 읽는 작업을 수행한다. |
2. Namenode에 파일 생성/읽기 요청 전송 | 클라이언트는 파일을 생성하거나 읽기 위해 네임노드에 요청을 전송한다. |
3. Namenode의 meta data 확인 | Namenode는 해당 파일의 meta data를 확인하고 클라이언트에게 응답한다. Meta data에는 파일 블록 목록, 각 블록 위치, 복제본에 대한 정보 등이 포함되어 있다. |
4. 클라이언트에게 블록 위치 제공 | Namenode가 meta data를 클라이언트에게 전달하면, 클라이언트는 각 블록이 저장도니 데이터 노드의 위치를 알게 된다. |
5. Datanode에 데이터 전송 | 클라이언트는 HDFS에 데이터를 저장하거나 읽기 위해 각 블록을 저장하는 데이터 노드에 직접 연결한다. 데이터 블록이 여러 복제본을 가지고 있으므로, 클라이언트는 복제된 블록 중 하나를 선택하여 데이터를 읽거나 쓸 수 있다. |
6. 데이터 전송과 블록 복제 | 클라이언트에게 데이터가 전송되고, HDFS는 각 블록을 여러 데이터 노드에 복제하여 데이터의 안전성을 보장한다. |
7. 응답 및 작업 완료 | 클라이언트가 데이터를 읽거나 쓴 후, HDFS는 해당 작업이 성공적으로 완료되었음을 클라이언트에게 응답한다. |
'Data Engineering' 카테고리의 다른 글
[Hadoop] Hadoop, Spark 환경 세팅 (2) | 2024.01.21 |
---|---|
[Hadoop] 빅데이터 아키텍처 (0) | 2024.01.21 |
[Linux] 8. Internet, Network, Server ② SSH, Port (0) | 2024.01.18 |
[Linux] 8. Internet, Network, Server ① (0) | 2024.01.17 |
[Linux] 7. 권한 (permission) (0) | 2024.01.16 |