소품집

HDFS (Hadoop Distributed File System) 본문

Hadoop

HDFS (Hadoop Distributed File System)

sodayeong 2020. 5. 12. 16:06

1. HDFS 기초


Hadoop Distributed File System

기존 대용량 파일 시스템

HDFS 설계 목표

  1. 장애복구
    • 디스크 오류로 인한 데이터 저장 실패 및 유실과 같은 장애를 빠른 시간에 감지하고 대처
    • 데이터를 저장하면, 복제 데이터도 함께 저장해서 데이터 유실을 방지
    • 분산 서버 간 주기적인 상태 체크
  2. 스트리밍 방식의 데이터 접근
    • 랜덤 엑세스 방식과 반대되는 개념
    • 순차적으로 데이터에 접근하는 방식
    • 낮은 접근 지연시간보다는 높은 데이터 처리율에 중점
    • 파일 저장 및 조회를 위해 스트리밍 방식으로 데이터에 접근해야 함
    • 배치 작업과 높은 데이터 처리량을 위해 스트리밍 방식을 사용
  3. 대용량 데이터 저장
    • 하나의 파일이 기가바이트에서 테라바이트 이상의 사이즈로 저장될 수 있게 설계
    • 높은 데이터 전송 대역폭, 하나의 클러스트에서 수백 대의 노드를 지원
    • 하나의 인스턴스에서 수백만 개 이상의 파일을 지원
  4. 데이터 무결성
    • 한 번 저장한 데이터를 수정할 수 없음(읽기만 가능)
    • 파일이동, 삭제, 복사할 수 있는 인터페이스 제공

HDFS의 특징

  1. 대용량 데이터를 범용 서버로만으로도 처리 가능
    • 데이터 파일 크기나 개별 장비의 파일 시스템 크기에 제한이 없음
  2. 용량 확장성
    • 데이터가 증가하면 노드 추가로 처리 가능
  3. 높은 처리량을 실현
    • 데이터의 부분 수정 불가, 랜덤 접근 불가, 큰 불록 크기 → 고속처리가 가능
  4. 슬레이브 노드의 일부가 고장 나도 데이터 손실을 방지 가능
    • 복수개의 노드에 데이터 복제 유지

2. HDFS 아키텍처


블록 구조 파일 시스템

기본 블록 크기 64MB(하둡1.0), 128MB(하둡 2.0)

  • 데이터 위치를 찾는 시간 감소
  • 데이터 관리 정보(블록위치, 파일명, 디렉터리 구조, 권한) 크기 감소

블록의 수가 늘어날수록 노드의 수는 줄어든다

 

 

네임노드와 데이터노드

Q. 왜 클라이언트는 데이터 노드에 직접 요청하지 않고, 네임 노드에 제어를 요청할까?

A. 클라이언트는 데이터가 어디에 저장되어 있는지 모른다^__^

 

 

 

NameNode의 역할

  1. 메타 데이터 관리

    • 파일 속성 정보나 파일 시스템 정보
    • 디스크가 아닌 메모리에서 관리하므로 빠른 응답 가능 (Ram : 임시 저장소 (휘발))
  2. HDFS 사용 상황 확인

    • DataNode의 용량이 다 차면 다른 DataNode로 블록을 이동. 데이터 노드는 자신의 블록 자체만 관리
    • 블록 복제본 수(count)도 관리 (새로 만들거나 삭제)
  3. 클라이언트의 HDFS 처리 요청 접수

    • 클라이언트가 HDFS에 대해 파일 접근 요청

    • NameNode가 메타 데이터를 바탕으로 대상 블록을 보유한 DataNode 리스트를 클라이언트에게 전달 → 위치 index 전달

    • 클라이언트가 해당 DataNode와 직접 통신

  4. DataNode 다운 여부 감시

    • DataNode가 NameNode에게 주기적으로 Heartbeat 송신 (만약 신호가 없으면, '꺼졌구나!')

메타데이터에 포함되는 정보

  1. 파일명
  2. 디렉터리 (DataNode중에서도 '위치')
  3. 데이터 블록 크기
  4. 소유자: 소속그룹
  5. 파일 속성
  6. DataNode와 블록 대응 정보
    • 블록 ID와 해당 블록을 보유하고 있는 DataNode 정보 → Mapping 된 상태로 저장되어 있음
    • DataNode가 하트비트를 3초 간격으로 전송할 때, 자신이 관리하는 블록 정보를 통지(block report)
    • 이를 바탕으로 전체 블록 정보를 구축하고 복제수가 충분한지 판단

fsimage (fs이미지)

  • 메모리 상에 관리되고 있는 메타데이터 내의 파일 시스템 이미지 (메모리는 '휘발성'이기 때문에, 메모리의 용량 한계 문제 때문에 주기적으로 저장해 둠)
  • 체크 포인트라고 불리는 타이밍에 NamNode의 로컬 파일 시스템에 생성
  • DataNode와 블록 대응 정보는 포함하지 않음
  • 저장주기가 길다 (실시간이 아님!!)

edits (fs이미지 보완 ver.)

  • 파일 처리 시 로컬 파일 시스템에 생성되는 편집 로그 (fs이미지보다 저장 주기가 짧다!!)
  • 이 로그를 메모리 상에서 관리되고 있는 파일 시스템 이미지에 적용

 

SecondaryNameNode

  • HA 클러스터(엑티브 네임노드+스탠바이 네임노드) 구성을 사용하지 않는 Hadoop 클러스터에서 사용
  • 주기적으로 NameNode에서 fsimage와 edits를 받아서 이들을 합치고, HDFS에 대한 갱신내용을 반영한 새로운 fsimage를 생성
  • 생성한 fsimage를 NameNode에 전송
  • 체크 포인트를 실시하여 fsimage에 적용 완료한 edits를 삭제함(NameNode edits → 용량절약)으로써 디스크 공간 절약
  • NameNode 재시작 시 fsimage에 대한 edits 적용 크기를 줄일 수 있어서 재시작시 시간 단축
  • NameNode에 장애가 발생한 경우, 메타 데이터를 보존함으로써 완전 데이터 손실을 방지

HDFS의 파일 저장

  1. 클라이언트가 네임노드에게 파일 저장 요청

 

2. 클라이언트가 데이터 노드에게 패킷을 전송

 

3. 클라이언트가 파일 저장을 완료

스트림 : 파일저장 요청을 위한 제어정보

네임노드가 스트리머한테 데이터 목록을 반환한다!

 

 

HDFS의 파일읽기

1. 클라이언트가 HDFS에 저장된 블록 위치 조회

노드가 망가지면 복사본 노드를 사용한다. 근데 클라이언트들은 그 사실을 모르잖아?

그래서! 읽을 때 마다 어디에 저장되어있는지 확인한다 !!

 

2. 클라이언트가 HDFS에 저장된 실제 블록을 조회

4,5번 과정은 한 번더 체크하기 위해 추가요청을 함!

 

 

3. 클라이언트가 모든 블록을 읽은 후 입력 스트림을 닫음

Client끼리 충돌을 막기 위해 블록 읽기를 마치면 스트림을 닫음! ex) 전화받을 때 처럼

 

 

 

 

3. HDFS 명령어


사용법

  • 해당 명령을 적용할 폴더로 이동 후
  • hadoop fs - 명령어

파일 목록 보기

ls - 지정한 디렉터리에 있는 파일 정보 출력, 특정 파일 정보 출력

lsr - 지정한 디렉터리 및 하위 디렉터리 정보까지 출력

파일용량 확인

du - 지정한 디렉터리나 파일의 사용량을 확인. 바이트 단위로 출력

dus - 전체 합계 용량만 출력

파일 내용 보기

cat : 지정한 파일의 내용을 출력 (텍스트 파일만 가능하다!!)

  • ex) hadoop fs -cat conf/hadoop-env.sh

text : zip 형태로 압축된 파일도 출력 가능

  • ex) hadoop fs -text conf/hadoop-env.sh

디렉터리 생성

mkdir

  1. 지정한 경로에 디렉터리 생성
  2. hadoop fs -mkdir testDir
  3. hadoop fs -ls
  4. 이미 존재하는 디렉터리 생성시 오류 발생

파일복사

put (=copyFromLocal)

  • 지정한 로컬 파일 시스템의 파일 및 디렉터리(실제 하드디스크)를 목적지 경로(하둡)로 복사

    ex) hadoop fs -put conf testDir, hadoop fs-ls testDir

get(=copyTolocal)

  • HDFS에 저장된 데이터를 로컬 파일 시스템으로 복사
  • 무결성 확인을 위해 checksum 기능 사용 가능 (주고받는 과정에서 데이터가 깨질 것을 고려하여 몇 byte를 더 해줌) Q. 다 더 했을 때 0이 되는가? A. Yes. 성공한 거임!
  • hadoop fs –getmerge wordcount_output/_logs/history wordcount_log
  • head -5 wordcount_log

getmerge: 지정한 경로에 있는 모든 파일의 내용을 합친 후, 로컬 파일 시스템에 하나의 파일로 복사

  • hadoop fs -getmerge wordcount_output/_logs/history wordcount_log
  • head -5 wordcount_log

cp: 지정한 소스 디렉터리 및 파일을 목적지 경로롤 복사

  • hadoop fs -cp conf/hadoop-env,sh conf/hadoop-env.bak
  • hadoop fs -ls conf

파일이동

mv: 소스디렉터리 및 파일을 목적지 경로로 이동

  • hadoop fs -mv conf conf2
  • hadoop fs -ls conf2

moveFromLocal : 지정한 로컬 파일 시스템의 파일 및 디렉터리를 목적지 경로로 복사 후 소스 경로의 파일은 삭제

파일삭제

rm : 지정한디렉터리나 파일을 삭제. 디렉터리는 반드시 비어있는 경우에만 삭제 가능

  • hadoop fs -rm conf2/hadoop-env.sh

rmr : 지정한 디렉터리 및 파일을 삭제. 비어있지 않은 디렉터리도 삭제 가능

  • hadoop fs -rmr test*
728x90

'Hadoop' 카테고리의 다른 글

HADOOP - MapReduce  (0) 2020.05.22
Hadoop 이란? 기본 동작구성과 프레임워크  (0) 2020.05.12
Hadoop 이란  (0) 2020.04.01
Comments