# HDFS ( Hadoop Distributed File System )

1. 개요

        - 4가지 목표

                - 장애복구

                - 스트리밍 방식 데이터 접근 >> batch 작업에 적합

                - 대용량 데이터 저장

                - 데이터 무결성 : 한번 쓴 데이터는 변하지 않는다 >> 수정이 불가능 하다 but append 는 가능하다

        - 기존 대용량 파일 시스템 와 비교

                - DAS  : 서버 - 스토리지          , HBA(HostBasedAdaptor) 를 이용해 스토리지를 연결

                - NAS  : 서버 - 네트워크 스토리지 , 동영상, 문서 등의 공유를 목적으로 한 스토리지, 비용문제+

                - SAN  : 서버 - 네트워크 스위치 - 스토리지 , DAS 의 한계 극복.

                - HDFS : 단일 HDFS 에는 RAID 구성이 필요없다. but 마스터노드 는 RAID1, 10 를 걸어줄 필요가 있다

              cf) RAID 개념 : 단일 시스템에서 동작한다

                        - RAID0 : striping , I/O 성능 좋아짐. but 망가지면 끝

                        - RAID1 : mirroring, 복제본 . but 하나가 망가져도 사용가능

                        - RAID 0+1 : 절때 사용하면 안됨 >> 하나 fail 시 전체 rebuild 필요

                        - RAID 10  : HDFS 가 동작하는 방식가 비슷

        - Oracle RAC (Real application Clusters) : 슈퍼돔 * 4 + SAN , 어마어마한 가격


2. 아키텍처

   

        - 단일 데이터를 여러개의 블락으로 나누어 (128M) 저장한다

                -  why 128 M : memory -bus-> disk (100MB 전달할 수있는 버스가 생겼다)

        - 깨진 데이터는 자동으로 복구하지 못한다 >> ( Client ) 깨진 데이터를 지워준다 >> 자동으로 replica 만큼 생성하여 복사본을 유지한다

        - 슬레이브 ( Datanode ) 가 많다 == 더 많은 병렬처리가 가능하다 ( 이론상 6000대 클러스터 생성가능 )


3. 구성요소 별 데이터 구조

        - Namenode

                - 경로 : {{hadoop_install_path}}/hadoop-data/dfs/name/current

                - 파일 :

                        - fsimage_xxxx : 데이터의 메타정보 저장 : 최초 hadoop 이 구동 할 때 읽어 올라간 뒤 ** 이후에 다시 쓰지 않는다 **

                        - edits_xxxxx : 변화되는 이력을 기록 한다

        - Datanode

                - 경로 : {{hadoop_install_path}}/hadoop-data/dfs/data/current/BP-495131824-192.168.56.101-1432616015420

                - 파일

                        - blk_1073741832            >> 실제 블락

                        - blk_1073741832_1008.meta  >> 블락의 체크썸 ( 상태확인 )

                        ※ BP : Block Pool 로서 하나의 HDFS 에 여러 namenode 를 사용하여 여러개의 pool 로 나누어 사용가능 하다


4. Operation 매커니즘

        - write      

               

                - Datanode 에서 데이터 복제하는 과정은 파이프라인에 의한 병렬처리로 이루어진다 == 복제 갯수만큼 이루어지지 않으면 쓰기 실패이다

                - 블럭의 배치 순서 : 1. 로컬노드 2. 원격 Rack 노드 3. 2번과 같은 Rack 의 다른 노드

        - read

               

                - Namenode 는 client 가 요청하는 data 의 Datanode 와 그 위치 를 알아야한다

                - 복제본을 가지고 있는 Datanode 중에서 가장 여유있는 노드로 유도한다 : Namenode 와 Datanode 는 heart-bit 를 통해 상태를 확인하고 있으므로...


5. 체크포인팅 매커니즘

       


        - 작업 :

                - 세컨터리 네임노드 : 로그롤링 요청

                - 네임노드 : 신규 에디트 로그 작성

                - 세컨더리 네임노드 : 로그를 받아 디스크 동기화 및 파일시스템 이미지 신규작업 전달

                - 네임노드 : 에디트 로그를 유지 ...

        - 구성 시, Namenode 와 Secondary Namenode 는 같은 크기의 메모리를 부여하여 fsimg 를 생성 전달할 수 있도록 한다

        - 상황

                - Namenode 죽었을 시, 마지막 체크포인트 발생 시점까지 복구가 가능하다

                - Secondory Namenode 죽었을 시, 운영은 되지만 edit log 가 무한히 길어지면 namenode 가 죽는다


6. Namenode - Secondary Namenode

        - 설정 (2.0 이후 버전) : etc/hadoop/masters 파일에 secondary name 를 설정한다 . 미작성시 namenode 에 함께 뜬다

        - 데이터

                [hadoop@hadoop01 ~]$ ls hadoop/hadoop-data/dfs/*name*/current/

                seen_txid               VERSION

                edits_0000000000000000001-0000000000000000002  fsimage_0000000000000000115

                edits_0000000000000000003-0000000000000000103  fsimage_0000000000000000115.md5

                edits_0000000000000000104-0000000000000000113  fsimage_0000000000000000117

                edits_0000000000000000114-0000000000000000115  fsimage_0000000000000000117.md5

                edits_0000000000000000116-0000000000000000117  >> 체크포인트 작업으로 사용된 log 로 프리징 되어있다

                edits_inprogress_0000000000000000118    >> 롤링 된 신규 에디트 로그


                [hadoop@hadoop01 ~]$ ls hadoop/hadoop-data/dfs/*namesecondary*/current/

                edits_0000000000000000001-0000000000000000002  fsimage_0000000000000000115

                edits_0000000000000000003-0000000000000000103  fsimage_0000000000000000115.md5

                edits_0000000000000000104-0000000000000000113  fsimage_0000000000000000117

                edits_0000000000000000114-0000000000000000115  fsimage_0000000000000000117.md5

                edits_0000000000000000116-0000000000000000117  VERSION

'BigData' 카테고리의 다른 글

Hadoop - MapReducer  (0) 2016.08.02
Hadoop 설치  (0) 2016.08.01
Hadoop 기초  (0) 2016.08.01
Posted by 감각적신사
,