20
HDFS 훑어보기 최범균 (2013-12-05)

하둡 HDFS 훑어보기

Embed Size (px)

DESCRIPTION

하둡을 잘 모르는 사람을 위한 하둡 HDFS 훑어보기 자료입니다.

Citation preview

Page 1: 하둡 HDFS 훑어보기

HDFS 훑어보기최범균 (2013-12-05)

Page 2: 하둡 HDFS 훑어보기

목적

● HDFS의 기본 동작 방식 이해○ 구조○ 데이터 흐름○ 장애 상황

Page 3: 하둡 HDFS 훑어보기

HDFS

● Hadoop Distributed FileSystem○ 기본적으로 파일 시스템

● 주요 특징○ 블록 단위 파일 보관

■ 파일을 블록 단위로 나눠서 보관 (기본설정: 64M)○ 분산 파일 시스템

■ 블록을 다중 노드에 분산해서 보관○ 리플리케이션

■ 하나의 블록은 여러 노드에 복제■ 특정 노드 장애에 무정지 대응

○ 범용 장비 사용

Page 4: 하둡 HDFS 훑어보기

HDFS는 파일 시스템

● 파일 시스템에 접근하기 위한 쉘스크립트(명령행 인터페이스) 제공

● 클라이언트○ 쉘 스크립트, 자바 API, HTTP 등 제공

$ hadoop fs -copyFromLocal typesafe-activator-1.0.0.zip hdfs://localhost/typesafe.zip

$ hadoop fs -ls hdfs://localhost/Found 2 items-rw-r--r-- 1 madvirus supergroup 125491 2013-12-02 18:00 /passion.jpg-rw-r--r-- 1 madvirus supergroup 264523514 2013-12-02 18:01 /typesafe.zip

$ hadoop fs -copyToLocal hdfs://localhost/img/passion.jpg passion2.jpg

Page 5: 하둡 HDFS 훑어보기

HDFS 블록

● 블록○ HDFS에서의 파일은 블록 크기로 분리되어 저장○ 기본 블록 크기는 64MB (128MB로 많이 사용)○ 파일 분리 예

■ 256MB 파일은 64M 네 개의 블록으로 분리되어 저장 (즉, 4개의 파일로 분리되어 저장)

■ 블록 크기보다 작은 파일은 단일 블록으로 저장● 이 경우, 블록 파일의 크기는 실제 파일 크기임

○ 단일 디스크보다 더 큰 파일을 보관할 수 있음○ 복제 단위

■ 노드 간 데이터 복사는 블록 단위로 됨

Page 6: 하둡 HDFS 훑어보기

HDFS의 구조

네임노드

데이터노드

데이터노드

데이터노드

하둡 클라이언트

- 파일 시스템 관리 (디렉토리/파일 정보)- 파일-블록-데이터노드 매핑 정보- SPOF

Heart Beat, 블록 정보(리스트) 보고

파일 읽기/쓰기

- 블록들을 저장 (즉, 파일의 일부씩 보관)- 하나의 완전한 파일은 여러 노드에 블록으로 분리되어 보관

RPC

RPCStreaming

Page 7: 하둡 HDFS 훑어보기

파일 읽기

네임노드

데이터노드

데이터노드

데이터노드

하둡 클라이언트

3. 파일 읽기

1. 파일의 블록들이 보관된 노드 위치 구하기

2. 블록을 보관한 노드 위치 제공.

4. 파일 읽기

하둡 클라이언트는 데이터 노드로 연결이 안 되거나 읽은 블록이 깨져 있을 경우, 네임노드에 해당 블록과 데이터노드를 통지하고, 다른 데이터노드에서 블록 읽기를 시도

클라이언트 위치와 데이터 노드 위치를 고려해서 노드 목록 제공

Page 8: 하둡 HDFS 훑어보기

파일 쓰기

네임노드

데이터노드

데이터노드

데이터노드

하둡 클라이언트

4.목록 첫 번째 노드에 쓰기

1. 파일 생성 정보 전송 (첫 번째 블록 크기 만큼 로컬에 쌓이면)

2. 블록을 보관할 노드 목록 요청

3. 블록을 보관할 노드 목록 제공

5. 복제 5. 복제

6.완료

* 모든 블록을 처리할 때 까지 2-5 과정 반복

Page 9: 하둡 HDFS 훑어보기

블록을 보관할 노드 선택은?

● 한 랙에 동일 블록 복제본이 존재하지 않도록○ 첫 번째 replica는 가까운 노드(랙)에 보관 또는 임의 노드 선택○ 두 번째와 세 번째는 첫 번째와 다른 랙에 보관

■ 두 번째/세 번째는 동일 랙에 보관

● 데이터 가용성, 읽기/쓰기 성능 고려○ 한 랙이 장애나더라도 서비스 가능○ 쓰기 과정에서 블록 복제 시, 랙 간 데이터 이동은 1회

랙1

데이터노드1-1

랙2

데이터노드2-1

데이터노드2-2

Page 10: 하둡 HDFS 훑어보기

랙을 아는 방법

● 마스터 노드 네트워크 위상(topology) 관리○ 외부 설정(+스크립트)을 주로 이용

■ 커스텀 구현도 가능

● 트리 구조로 거리 구함

dnode1 /dc1/rack1dnode2 /dc1/rack1dnode3 /dc1/rack2

dc1

rack1 rack2

dnode1 dnode2 dnode3

Page 11: 하둡 HDFS 훑어보기

네임노드 데이터

● 메모리○ 파일 시스템 메타 데이터

■ 디렉토리, 파일명, 블록, 블록-데이터노드 매핑 정보■ 톰 화이트, “경험상 백만 블록 당1,000MB 메모리 사용(보수적)”

● 파일○ 두 개의 파일

■ edits: 변경 내역■ fsimage: 특정 시점의 데이터 스냅샷

● 디렉토리, 파일명, 블록, 상태 정보● 블록-데이터노드 매핑 정보는 포함하지 않음

○ 이 정보는 네임노드 구동 시점에, 데이터노드로부터 받음

Page 12: 하둡 HDFS 훑어보기

네임노드 구동 과정

1. 파일로부터 메모리에 데이터 생성a. fsimage를 메모리에 로딩b. edits를 읽어와 메모리에 변경 내역 반영

2. 스냅샷 생성a. 현재의 메모리 상태를 fsimage로 내림 b. 빈 edits 생성

3. 데이터 노드로부터 블록 정보 수신a. 메모리에 블록-데이터노드 매핑 정보 생성

4. 정상 서비스 시작안전모드: 1~3 과정, 네임 노드 서비스 안 됨

Page 13: 하둡 HDFS 훑어보기

보조 네임노드

● edits는 최초 재시작 할 때만 빔(empty)○ 운영 중 상태에서 edits가 무한정 커지게 됨

● 보조 네임노드 → edits 크기 정리

네임노드 보조 네임노드edits fsimage

edits fsimage

출처: 하둡 완벽 가이드

edits.new

edits

fsimage.ckptfsimage.ckpt

fsimage

1. edits 순환2. 복사(HTTP)

3. 병합

4. 전송(HTTP)5. fsimage 반영

edits.new를 edits로

Page 14: 하둡 HDFS 훑어보기

HDFS 장애

● 블록 깨짐● 데이터 노드 장애● 네임 노드 장애

Page 15: 하둡 HDFS 훑어보기

HDFS 장애: 블록 깨짐

● 체크섬 파일: 블록과 함께 생성○ 체크섬 파일은 데이터 노드에 함께 보관

● 데이터노드:○ 주기적으로 블록 스캐너 실행 (체크섬 오류 확인)

■ 문제 있는 블록을 네임노드에 통지● 클라이언트

○ 블록을 읽을 때 체크섬도 읽어와 오류 확인○ 오류 있을 시, 네임노드에 해당 블록 오류 통지

● 네임노드○ 통지받은 오류 블록에 해당하는 다른 복제본 복사○ 오류 블록 소유 데이터 노드에 삭제 지시

Page 16: 하둡 HDFS 훑어보기

HDFS 장애 대응: 데이터노드 장애

● 데이터노드 → 네임노드: heart beat 전송○ 주기적으로 전송

● 네임노드○ 데이터노드의 heart beat이 없으면 장애로 판단○ 장애 데이터노드를 서비스 대상에서 제외○ 장애 데이터노드가 포함한 블록들에 대한 복제 수행해서 복제본 개수를 맞춤

Page 17: 하둡 HDFS 훑어보기

HDFS 장애 대응: 네임노드

● 하둡1○ SPOF○ 수동 처리

● 최소○ 공유파일 시스템(NFS 같은 것)에 edits와 fsimage 보관

○ 노드 장애 발생시, 다른 장비를 네임노드로 사용■ 데이터노드로부터 블록 정보 수신 필요

● 업체 별 지원○ CDH4 Auto-Failover, ZooKeeper 저널

■ Active-Standby로 구성 (하둡2 방식과 동일?)

Page 18: 하둡 HDFS 훑어보기

HDFS 장애 대응: 네임노드

● 하둡2: HA 지원 (Active-Standby), 수동 처리

네임노드Active

네임노드Standby

저널노드(Journal)

Active 네임노드의 변경 내역을 Standby 네임노드에 복사

- 보조 네임노드 역할 수행

데이터노드클라이언트

(ConfiguredFailoverProxyProvider)

- 양쪽에 heartbeat, 블록 정보 보냄

haadmin 도구- 도구를 이용해서 수동으로 네임노드의 상태를 변경

Active 상태의 네임노드와 통신

* 저널노드 대신 NAS같은 NFS를 이용 가능

Page 19: 하둡 HDFS 훑어보기

HDFS 장애 대응: 네임노드

● 하둡2: HA 지원 (Active-Standby), 자동 처리

네임노드Active

네임노드Standby

저널노드(Journal)

ZKFailoverController

ZKFailoverController

ZooKeeperZookeeper/ZKFC가 Active 네임노드 장애시 Standby 네임노드 상태를 Active로 전환 처리

Page 20: 하둡 HDFS 훑어보기

기타

● 밸런서○ 사용률이 높은 데이터노드의 블록을 사용률이 낮은 데이터노드로 이동

○ 하둡 클러스터에서 백그라운드로 동작● 하둡 아카이브

○ 하둡에 보관된 여러 파일을 아카이브(1개 파일)로 묶음

○ 아카이브에 포함된 파일을 조회/접근 가능○ 작은 파일들을 1개 파일로 전환해서 네임노드의 메모리 사용량 감소