Hadoop 2. HDFS

skh951225·2023년 4월 10일
0

Hadoop 입문

목록 보기
2/14

HDFS

HDFS 개요

  • Hadoop을 지탱하는 데이터 저장소
  • large file을 handling 하는데 최적화됨
  • reliable manner로 big data(from sensor,webserver...)를 저장
  • application이 data를 빠르고 reliable하게 데이터에 접근하게 해줌

HDFS의 장점

  1. large file을 block 단위(128MB)로 나눠서 분산 저장
    → single hard drive의 용량을 넘겨서 저장가능
  2. 분산처리로 효율적인 데이터 처리 가능
  3. block을 하나만 저장하는 것이 아니라 복제해서 여러개 저장
    → failure handling이 쉬움
    → 굳이 high availablity를 가진 장비를 사용하지 않아도 됨

HDFS의 동작

HDFS의 구성

  • client node
    • 사용자를 대신해 name node와 data node에 통신하고 파일시스템에 접근
    • POSIX와 유사한 파일 시스템 인터페이스를 제공해서 name node, data node에 관련된 함수를 몰라도 코드 작성 가능
  • name node
    • 저장되는 데이터에 대한 메타데이터 정보를 담고있다.
    • 메타데이터 정보는 edit log 와 namespace image(fsimage)에 나눠 저장됨
    • namespace image는 파일시스템 데이터의 영속적인 체크포인트 파일, 하지만 개별 쓰기 동작 때마다 갱신되지는 않는다.
    • edit log는 파일의 변경사항이 있을 때 transaction log를 기록하는 곳
    • 파일의 정확한 위치는 디스크에 저장하지 않고 시스템이 시작될때 data node로 부터 위치정보를 받는다.
  • data node
    • client 나 name node의 요청이 있을때 그 요청을 처리하는 실질적인 일꾼
    • 저장하고 있는 블록의 목록을 name node에게 주기적으로 보고한다.

Read

  • client node가 name node에게 읽으려는 파일의 위치를 요청
  • name node로부터 받은 위치정보를 이용해서 client node는 data node로부터 데이터를 가져옴

Write

  • client node가 name node에게 쓰기를 시작하겠다고 알림
  • client node는 해당 file을 data node에게 전달
  • data node는 data node들끼리 정보를 공유하며 파일을 분산해서 저장(파일의 복사본 포함)
  • 쓰기 작업이 완료되면 client node에 성공적으로 끝났다고 알림
  • client node는 이어서 name node에게 해당 파일이 replicated manner로 잘 저장되었다고 알림

Namenode resilience

  • Back up Metadata : Namenode에 저장되는 정보를 local, NFS에 동시에 백업
  • Secondary Namenode
    • Primary Namenode의 edit log가 일정 용량에 도달하거나 일정 주기에 맞춰 namespace image와 edit log를 Secondary namenode에 보낸다.
    • Secondary namenode는 namespace image를 edit log를 통해 최신화하고 namesapce image를 다시 주 네임노드에 보냄
    • 주 네임노드의 edit log 용량을 관리해주고 동시에 백업의 역할도 함
  • HDFS Federation
    • 저장된 파일의 개수가 늘어나면 단일 네임노드로 운영이 힘들어짐
    • 파일시스템을 여러개의 namespace volume으로 나누고 각 namespace에 하나의 네임노드를 배정하는 방식
    • namenode가 failure되도 전체의 데이터가 날아간게 아니라 일부만 날아간다는 장점
  • HDFS HA(High Availablity)
    • Primary Namenode의 메모리에는 namespace image, edit log 외에 블록 매핑 정보도 담고있다.
    • 그래서 단순히 namesapce image를 복구하는 것만으로 장애에 즉각적으로 대응하기 어려움
    • Standby namenode를 둬서 Primary namenode와 동기화 한다.(메모리에 있는 정보까지)
      • 공유 스토리지에 shared edit log를 저장해서 두 네임노드가 edit log를 공유
      • data node의 block report를 두 네임노드 모두에게 보냄
    • Standby namenode는 Secondary namenode의 역할까지 수행해서 활성 네임노드 namespace image를 checkpoint 작업도 주기적으로 실행한다.
    • Active namenode가 다운되면 바로 standby namenode로 즉각적으로 대체가능
    • standby namenode를 사용하는 경우 두 개의 namenode가 활성화되어 있다고 다른 노드들이 착각을 할 수 도있다.
    • 이런 경우를 대비해 Hadoop HA는 zookeeper에게 활성 네임노드가 어떤 노드인지 확인하고 다른 네임노드의 전원을 꺼버린다.

HDFS 사용법

  • UI : 파일을 단순히 복사하고 HDFS의 디렉터리 구조를 시각화하고 싶을때 사용
  • CLI : HDFS 명령어를 입력하는 방식
  • HTTP
    • HTTP로 HDFS를 직접 or proxy 서버를 통해 다룰 수 있음
    • proxy 서버는 HDFS 머신과 클라이언트 사이에 위치
    • 데이터를 분석하기 위해 스크립트를 작성하거나 애플리케이션 개발을 위해 이 프락시 서버에 웹 인터페이스를 구성할 수도 있음
  • Java interface
    • 대부분의 언어들은 자바 코드와 소통할 수 있기 때문에 C나 Python 혹은 Scala 등을 사용해도 무관
    • hadoop은 java로 작성되어서 관련 기술들에는 java client가 모두 있음
  • NFS Gateway
    • NFS는 네트워크 파일 시스템, remote file system을 server에 mount
    • NFS 게이트웨이를 통해 HDFS를 리눅스 박스에 연결할 수 있음
    • 그러면 하드 드라이브에 또 다른 마운트 지점이 생긴 것처럼 보이고 HDFS와 전혀 관련 없는 프로그램들도 사용할 수 있게 됨

명령어 실습

xshell or putty 와 같은 treminal emulator를 통해 hortworks가 설치된 VM에 SSH접속
maria_dev@127.0.0.1:2222

hadoop fs -{명령어}

hadoop fs -ls : 파일 시스템의 목록을 보여줌
hadoop fs -mkdir {dir_name}

wget http://media.sundog-soft.com/hadoop/ml-100k/u.data
wget : 웹에서 파일 다운로드를 도와주는 리눅스 command

hadoop fs -copyFromLocal {local_file_path} {hdfs_file_path}
hadoop fs -rm {hdfs_file_path}
hadoop fs -rmdir {hdfs_dir_path}
hadoop fs : 명령어 help

0개의 댓글