스테코더
HDFS 본문
HDFS 특징
- 파일을 여러개의 블록으로 나눠 저장 (블록사이즈 : 기본 64MB)
→ 블록 사이즈 metadata 사이즈 작음 (한번 쓰고 바뀌지 않으니까) - 하드웨어 고장에 견고
- 한 데이터 블록을 보통 3군데 (Replication factor)에 저장(하나가 끊어지면 다른 rack에서 처리할 수 있도록)
→ 같은 rack 2개, 다른 rack에 1개 저장
- 한 데이터 블록을 보통 3군데 (Replication factor)에 저장(하나가 끊어지면 다른 rack에서 처리할 수 있도록)
- Write One Read Many → 쓰기 한번 읽기 여러번 발생
- Append 작업은 가능하지만 내용을 바꾸기 위해서는 파일 전체를 새로 써야함
- 스트리밍 데이터 액세스 → 배치잡에 최적화
- MapReduce나 HBase와 같은 시스템의 기본구성블록으로 사용
- 계층 구조의 파일 시스템 제공
HDFS 구조
NameNode 마스터노드
- HDFS마다 단 하나만 존재
- HDFS의 마스터 노드로 저장되는 각종 파일들의 메타정보를 관리하고 실제 데이터는 다수의 DataNode에 분산 저장
- 파일이 블록단위(기본 64MB)로 나뉘어 저장되고 보통 세군데(replication factor)의 DataNode에 중복 저장
- Rack awareness
→ 중복 저장 시 Rack의 위치를 유념하여 한 rack에 모든 복제블록이 놓이지 않도록 함
- Data Node들이 계속적으로 통신 (Heartbeat)
- 주기적으로 heartbeat 주고 받음
→ 일정시간 동안 주고받지 않으면 dead node로 마킹 → 데이터를 migration - 문제 DataNode가 감지되면 그 노드의 블록들을 다른 노드들에 복제
- 주로 3초마다 일어남
- 주기적으로 heartbeat 주고 받음
- A single point of failure
→ file/directory 구조와 metadata를 담고 있어서 전원 off나 네트워크 단절되면 전체 하둡 클러스터에 HDFS로 접근이 불가능해짐
Data 읽기
- 클라이언트는 먼저 NameNode와 통신하여 해당 파일의 데이터블록 위치 리스트의(DataNode와 블록ID)를 얻음
→ 파일의 크기가 데이터블록 크기 (기본 64MB)보다 작다면 한쌍의 DataNode/블록 ID로 충분 - 클라이언트는 DataNode들과 직접 통신하여 블록 데이터들을 차례대로 읽어들임
Data 쓰기
- 클라이언트는 HDFS 파일을 생성하고자 먼저 로컬파일시스템에 파일을 생성
- 파일 생성이 끝나거나 크기가 데이터블록의 크기보다 커지면 NameNode를 컨택
→ NameNode는 파일생성요청을 메모리 meta정보와 EditLog에 저장 - NameNode는 Replication factor만큼의 DataNode와 블럭ID를 클라이언트에 전송
- 클라이언트는 이 중 첫번째 Datanode에 데이터를 쓰면서 replication이 벌어져야하는 나머지 DataNode들의 리스트를 같이 넘김
→ client와 서버가 네트워크 상으로 각 서버간의 사이보다 멀기 때문 - 첫번째 DataNode는 데이터를 복제 받으면서 두번째 DataNode로 복제를 시작
- 마지막 DataNode에서 블록의 복제가 완료되면 이 시점에서 해당 데이터블록의 생성은 완료된 것으로 간주
→ 이 프로세스를 Replication pipelining이라 함 - 클라이언트에서 파일에 써야할 데이터가 더 있으면 다시 3으로 가서 반복
'Data Engineering' 카테고리의 다른 글
MapReduce (0) | 2023.06.04 |
---|---|
하둡 Intro (0) | 2023.06.03 |
Comments