-
[Hadoop] 빅데이터 - 하둡이란? - HDFSDB/HADOOP 2022. 8. 6. 18:52
해당 게시글은 비전공자이자 초보 개발자 지망생이 작성한 글로 정확하지 않을 수 있으니 참고해주시길 바랍니다!
피드백과 정보 정정 댓글은 환영입니다 :)
출처: https://wikidocs.net/book/2203
빅데이터 - 하둡, 하이브로 시작하기
이 책은 하둡을 처음 시작하는 사람들을 대상으로 작성하였습니다. **하둡**은 빅데이터 기술의 시작점입니다. 하둡이 맵리듀스와 HDFS 기술을 소개하면서 빅데이터를 ...
wikidocs.net
1 - 하둡이란?
하둡은 하나의 고성능 컴퓨터로 모든 데이터를 처리하지 않고, 적당한 성능의 컴퓨터 여러 대를 클러스터화(여러 컴퓨터를 논리적으로 결합하여 전체를 한 대의 컴퓨터처럼 이용할 수 있게 하는 시스템 구축 기술. 구성 요소인 각각의 컴퓨터를 노드라고 하며, 어떤 노드가 고장이 나더라도 다른 노드가 그 처리를 넘겨받아 서버의 처리를 계속할 수 있다. 수리와 교환이 쉽고, 가용성과 성능을 높일 수 있다.) 하고, 큰 크기의 데이터를 클러스터에서 여러 대의 컴퓨터를 통해 동시에 처리하여 속도를 높이는 것을 목적으로 하는, 분산 처리를 위한 오픈소스 프레임워크이다.
하둡은 다음과 같은 주요 모듈로 구성된다.
1. Hadoop Common
- 하둡의 다른 모듈을 지원하기 위한 공통 컴포넌트 모듈
2. Hadoop HDFS (저장)
- 분산저장을 처리하기 위한 모듈, 여러 개의 서버를 하나의 서버처럼 묶어서 데이터 저장
3. Hadoop YARN (데이터 처리 순서 조율)
- 병렬처리를 위한 클러스터 자원관리 및 스케줄링 담당
4. Hadoop Mapreduce (처리)
- 분산되어 저장된 데이터를 처리할 수 있게 해주는 분산 처리 모듈
5. Hadoop Ozone
- 저장소
2 - HDFS
HDFS(Hadoop Distributed File System)은 분산 파일 시스템을 목표로 하며 실시간 처리가 아니라 배치 처리(특정 기간동안 쌓인 데이터 처리)를 위해 설계되었다. 따라서 빠른 실행시간을 요하는 작업에는 적합하지 않다. 또한, 네임노드가 단일 실패 지점(해당 요소가 작동하지 않으면 전체 시스템이 중단됨)이 되기에 네임 노드 관리가 중요하다.
HDFS의 특징은 다음과 같다.
1. 블록 단위의 저장
- 블록 단위로 나누어 데이터를 저장한다. 블록사이즈보다 큰 블록은 쪼개어져서, 작은 블록은 기존 파일의 사이즈 그대로 저장하게 된다.
2. 블록 복제를 이용한 장애 복구
- HDFS는 해당 블록을 작업할 때 생기는 문제점에 대비하여 각 블록을 3개의 블록으로 복제하여 저장한다. 같은 서버뿐만 아니라 다른 서버에도 복제되어 저장된다. 즉, 1G의 데이터를 저장하기 위해서는 3G의 저장공간이 필요하다. (1G*3=3G)
3. 읽기 중심
- 데이터를 한 번 쓰면 여러 번 읽는 것을 목적으로 한다. 따라서 파일의 수정은 지원하지 않는데, 이렇게 수정을 제한하여 데이터 읽기의 속도를 높여준다.
4. 데이터 지역성
데이터 분석을 위해 데이터를 별도로 이동시키지 않으며, 저장된 장소에서 알고리즘을 처리하기 때문에 데이터 이동 비용을 최소화 할 수 있다. 해당 특징에서 클라우드와 비교했을 때의 이점이 드러난다.
2-1-구조(Architecture)
HDFS에는 하나의 네임노드와 여러 개의 데이터 노드들이 존재한다. 마스터 슬레이브 구조를 갖고 있으며, 네임노드는 데이터 노드들의 메타데이터를, 저장되어야 하는 데이터들은 쪼개어져 블록 단위로 데이터노드에 저장이 된다. 네임노드를 통해 데이터를 쓰고 읽을 수 있다.
네임노드는 주로 데이터 노드들의 메타데이터를 관리하고 데이터 노드를 관리한다. 메타데이터는 파일의 이름, 크기, 생성시간, 접근 권한, 소유자, 위치 등으로 구성된다. 메타데이터의 파일 종류에는
1. Fsimage 파일
네임스페이스(개체를 구분할 수 있는 범위를 나타내는 말로 일반적으로 하나의 이름 공간에서는 하나의 이름이 단 하나의 개체만을 가리키게 된다)와 블록 정보
2. Edits 파일
파일의 생성, 삭제에 대한 트랜잭션 로그
메모리에 저장하다가 주기적으로 생성
가 존재한다.
네임노드의 메타 데이터 네임노드는 하트비트(3초마다 생성)와 블록리포트(6시간마다 생성)을 이용하여 데이터 노드를 관리한다. 하트비트가 전달되지 않으면 데이터 노드가 동작중이지 않은 것으로 간주하고 파일의 수정(IO)이 이루어지지 않도록 조치한다. 하트 비트에는 디스크 가용 공간 정보, 데이터 이동, 적재량 등의 정보가 들어있다.
블록 리포트는 HDFS에 저장된 파일에 대한 최신 정보를 유지하게끔 한다. 데이터노드에 저장된 블록 목록과 저장 위치를 담고 있다.
데이터 노드는 파일을 저장하는 노드이다. 블록 단위로 파일이 저장되고 네임노드에 하트비트와 블록리포트를 전달한다.
데이터 노드는 두 가지 정보를 통해 상태를 나타낸다. 첫 번째로 하트비트를 통해 활성 상태를 파악할 수 있다. 두 번째로 운영 상태를 파악할 수 있다. 데이터 노드를 업그레이드하거나 등의 작업을 위해 서비스를 잠시 멈추어야 하는 경우가 있다. 이때 블록을 안전하게 보관하기 위해 설정할 수 있는 상태는 다음과 같다.
- NORMAL: 서비스 상태
- DECOMMISSIONED: 서비스 중단 상태
- DECOMMISSION_INPROGRESS: 서비스 중단 상태로 진행 중
- IN_MAINTENANCE: 정비 상태
- ENTERING_MAINTENANCE: 정비 상태로 진행 중
dfs.hosts 파일(DataNodeAdmin)에 노드의 상태를 json 형태로 기술하여 운영중에 서비스를 잠시 멈추고 정비를 한 후 다시 진행할 수 있습니다.
>> 이해 필요
네임노드는 Fsimage와 Edits를 읽어 작업을 처리하는데 순서는 다음과 같다.
- Fsimage를 읽어 메모리에 적재
- Edits 파일을 읽어와서 변경내역 반영
- 현재 메모리 상태를 스냅샷으로 생성하여 Fsimage 파일 생성
- 데이터 노드로부터 블록리포트 수신하여 매핑 정보 생성
- 서비스 시작
HDFS에서 파일을 읽기 위해서는 네임 노드에 파일이 보관된 블록 위치를 요청한 후, 이것이 위치를 반환하면 각 데이터 노드에 파일 블록을 요청한다. 이 과정에서 블록이 깨져 있으면 복제된 다른 블록을 확인한다.
파일 읽기 1. Open: HDFS 클라이언트가 파일이 보관된 블록 위치를 요청
2. Get block locations: 파일이 보관된 블록 위치를 네임노드가 반환
3,4,5 Read: 반환된 위치를 바탕으로 블록 읽기. 이때 블록이 깨지거나 손상됐다면 복제된 다른 블록 읽기.
6: Close: 파일 닫기
파일을 쓸 때는 첫 번째, 네임노드에 파일 정보를 전송 후 파일 블록을 써야 할 노드 목록 요청후에 네임노드가 저장할 목록을 반환하면 다시 데이터 노드에 파일 쓰기를 요청한다. 이후 데이터 노드간 복제가 진행된다.
파일 쓰기 1. Create: 네임 노드에 파일 정보 전송
2. Create: 네임노드가 저장할 목록 반환
3. Write: 반환한 목록을 토대로 작성 요청
4. Write packet: 반환한 목록을 토대로 작성
5. Ack packet: 새로 작성한 파일 복제
6. Close: 파일 닫기
7. Complete: 새로운 파일에 대한 메타데이터 네임노드로 전송
2-1-1-블록
데이터 노드에 저장된 블록 중, 자주 읽는 블록은 블록 캐시라는 데이터 노드의 메모리에 명시적으로 캐싱할 수 있다. 이를 통해 읽기 성능을 높일 수 있다.
2-1-2-세컨더리 네임노드 (보조 네임노드)
네임노드가 구동되면 Edits 파일(트랜잭션 로그)이 주기적으로 생성된다. 이것이 빈번해지면 로그 파일이 많이 쌓여 네임노드의 디스크 공간이 부족해지기도, 구동 시간을 늘리기도 한다. 그래서 세컨더리 네임노드의 도입을 통해 Fsimage 파일과 Edits 파일을 주기적으로 합병하게끔 한다. 파일을 머지함으로써 Edits 파일을 삭제하기 때문에 디스크 공간 확보가 가능하다. 또한 보조 네임노드는 네임노드가 장애가 발생할 것을 대비해 복제본을 보관하는 역할도 맡는다.
블록 캐싱 Roll: Roll means closing the current file and writing coming events to a new file.
1. Roll Edits: 새로운 edits 파일 네임노드에 등록(?)
2. Retrieve fsimage and edits from primary: 기존 프라이머리 노드에 있던 이전 fsimage와 edits 파일 second node로 가져오기
3. Merge: 가져온 fsimage과 edits merge
4. Transer checkpoint to primary: 합친 fsimage.ckpt 네임노드로 옮기기
5. Roll fsimage.ckpt and edits.new: 가져온 ckpt 파일과 edits 파일 네임노드에 등록 (roll)
'DB > HADOOP' 카테고리의 다른 글
[Hadoop] Mac OS에서 의사 분산 모드로 Hadoop 실행 (1) 2022.09.07