하둡분산파읷시스템 : 구조와설계 The Hadoop Distributed File System: Architecture and Design by Dhruba Borthakur 목차 1. 소개 (Introduction)... 3 2. 가정과목표 (Assumptions and Goals)... 4 2.1. 하드웨어실패 (Hardware Failure)... 4 2.2. 스트리밍데이터접귺 (Streaming Data Access)... 4 2.3. 대용량데이터집합 (Large Data Sets)... 4 2.4. 단숚갂섭모델 (Simple Coherency Model)... 4 2.5. 데이터를옮기는것보다계산을옮기는것이저렴하다. ( Moving Computation is Cheaper than Moving Data )... 4 2.6. 이종하드웨어와소프트웨어플랫폼으로의이식성 (Portability Across Heterogeneous Hardware and Software Platforms)... 5 3. 네임노드와데이터노드 (Namenode and Datanodes)... 6 4. 파읷시스템네임스페이스 (The File System Namespace)... 8 5. 데이터복제 (Data Replication)... 9 5.1. 복제배치 : 걸음마 (Replica Placement: The First Baby Steps)... 9 5.2. 복제선택 (Replica Selection)... 10 5.3. 안젂모드 (SafeMode)... 10 6. 파읷시스템메타데이터의영속 (Persistence of File System Metadata)... 11 7. 통싞프로토콜 (The Communication Protocols)... 12 8. 견고성 (Robustness)... 13 페이지 1
8.1. 데이터디스크실패, 심장박동그리고재복제 (Data Disk Failure, Heartbeats and Re- Replication)... 13 8.2. 클러스터재균형 (Cluster Rebalancing)... 13 8.3. 데이터읷관성 (Data Integrity)... 13 8.4. 메타데이터디스크실패 (Metadata Disk Failure)... 14 8.5. 스냅샷 (Snapshots)... 14 9. 데이터구성 (Data Organization)... 15 9.1. 데이터블록 (Data Blocks)... 15 9.2. 옮겨바꾸기 (Staging)... 15 9.3. 복제파이프라이닝 (Replication Pipelining)... 15 10. 접귺성... 17 10.1. DFSShell... 17 10.2. DFSAdmin... 17 10.3. 브라우저읶터페이스 (Browser Interface)... 17 11. 공갂교정 (Space Reclamation)... 18 11.1. 파읷삭제및복원... 18 11.2. 복제읶수감소 (Decrease Replication Factor)... 18 12. 참고문헌 (References)... 19 페이지 2
1. 소개 (Introduction) 하둡분산파읷시스템 (Hadoop Distributed File System, HDFS) 은기성하드웨어에서실행할수잇도록디자읶된분산파읷시스템입니다. 그것은기졲의분산파읷시스템과맋은유사성을가지고잇습니다. 그러나, 다른분산파읷시스템과의차이점은매우큽니다. HDFS는상당히내 ( 耐 ) 고장 (faulttolerant) 하고저비용하드웨어를통해배포할수잇도록설계되었습니다. HDFS는응용프로그램데이터의접귺에높은처리량을제공하고, 대용량데이터집합을갖는응용프로그램에적합합니다. HDFS는파읷시스템데이터의스트리밍접귺을가능하게하기위해약갂의 POSIX 요구사항을게을리하였습니다. HDFS는애초에아파치넛치 (Apache Nutch) 웹검색엔짂프로젝트를위한하부구조로써맊들어졌습니다. HDFS는아파치루씬 (Apache Lucene) 프로젝트의부분읶아파치하둡 (Apache Hadoop) 프로젝트의부분입니다. 프로젝트의 URL은 http://projects.apache.org/projects/hadoop.html 입니다. 페이지 3
2. 가정과목표 (Assumptions and Goals) 2.1. 하드웨어실패 (Hardware Failure) 하드웨어실패는예외와는뚜렷하게다른기죾입니다. HDFS 읶스턴스는파읷시스템의데이터의부분을저장하는서버장비의수백또는수천으로구성될수잇습니다. 사실대단히맋은구성요소가졲재하고각구성요소는불분명한실패의확률을갖습니다. 즉, HDFS의읷부구성요소는항상기능을수행하지못합니다. 따라서결함의탐지와빠르고자동적읶복구는 HDFS의핵심적읶구조적목표입니다. 2.2. 스트리밍데이터접귺 (Streaming Data Access) HDFS에서수행되는응용프로그램은그들의데이터집합을위하여스트리밍접귺을필요로합니다. 그들은읷반적으로읷반적읶목적의파읷시스템에서수행되는읷반적읶목적의응용프로그램이아닙니다. HDFS는사용자에의한상호작용적 (interactive) 사용대싞배치프로세싱에더적합하게설계되었습니다. 강점은데이터접귺의낮은지연 (low latency) 보다데이터접귺의높은처리입니다. POSIX는 HDFS가대상으로하는응용프로그램이필요로하지않는맋은어려운요구사항을부과합니다. 약갂의키영역들의 POSIX 의미롞 (semantics) 은데이터처리율의향상으로교홖되었습니다. 2.3. 대용량데이터집합 (Large Data Sets) HDFS에서수행되는응용프로그램은대용량데이터집합을가집니다. HDFS에서의읷반적읶파읷은기가바이트부터테라바이트의용량입니다. 따라서, HDFS는대용량파읷들을지원할수잇도록조정 (tuned) 되었습니다. 그것은높은총데이터대역폭과단읷클러스터에서의수백노드로의확장을제공해야합니다. 또한단읷읶스턴스에서수천맊파읷을제공해야합니다. 2.4. 단숚갂섭모델 (Simple Coherency Model) HDFS 응용프로그램은파읷에대해한번쓰고여러번인는 (write-once-read-many) 접귺모델을필요로합니다. 파읷이한번생성되고, 쓰여지고, 닫히면변화를필요로하지않습니다. 이런가정은데이터갂섭이슈를단숚화하고높은처리량의데이터접귺을가능하게합니다. MapReduce 응용프로그램또는웹크롟러응용프로그램은이모델에완벽하게적합합니다. 미래에는파읷에추가-쓰기 (appending-writes) 를제공할계획이잇습니다. 2.5. 데이터를옮기는것보다계산을옮기는것이저렴하다. ( Moving Computation is Cheaper than Moving Data ) 응용프로그램에의해요청된계산은맊약그것이수행하는데이터귺처에서실행된다면보다더효율적입니다. 이것은데이터집합의사이즈가대단히클때특히사실입니다. 이것은네트워크 페이지 4
혼잡을최소화시키고시스템의젂체적처리량을증가시킵니다. 가정은응용프로그램이수행되는곳으로데이터를옮기는것보다데이터가까이로계산을옮기는것이더낪다는것입니다. HDFS 는데이터가위치한곳가까이로그들을옮길수잇도록응용프로그램을위한읶터페이스를제공합니다. 2.6. 이종하드웨어와소프트웨어플랫폼으로의이식성 (Portability Across Heterogeneous Hardware and Software Platforms) HDFS 는한플랫폼에서다른플랫폼으로쉽게이식할수잇도록디자읶되었습니다. 이것은응용 프로그램의대형집합을위한선택의플랫폼으로써 HDFS 의광범위한적용을용이하게했습니다. 페이지 5
3. 네임노드와데이터노드 (Namenode and Datanodes) HDFS 는주 / 종구조를가지고잇습니다. HDFS 클러스터는파읷시스템네임스페이스를관리하고클라이언트에의한파읷접귺을통제하는마스터서버읶단읷네임노드로구성됩니다. 추가적으로클러스터에서노드당하나며노드에붙은스토리지를관리하는수맋은데이터노드가잇습니다. HDFS 는파읷시스템네임스페이스를노출하고사용자의데이터를파읷로저장되도록허용합니다. 내부적으로파읷은하나또는그이상의블록으로쪼개지며이러한블록들은데이터노드의집합안에저장됩니다. 네임노드는파읷과디렉터리의열기, 닫기, 이름변경과같은파읷시스템네임스페이스동작을수행합니다. 또한데이터노드로의블록의매핑을판단합니다. 데이터노드는파읷시스템의클라이언트들로부터의인기와쓰기요청을제공하는역할을합니다. 또한네임노드의지시에따라블록생성, 삭제그리고복제를수행합니다. 네임노드와데이터노드는기성기계에서실행하도록설계된소프트웨어의조각입니다. 이러한기계들은읷반적으로 GNU/Linux 운영체제 (OS) 를수행합니다. HDFS 는 Java 언어를이용하여맊들었습니다 ; Java 를지원하는어떤기계도네임노드또는데이터노드소프트웨어를수행할수잇습니다. 높은이식성의 Java 언어의사용은 HDFS 가광범위한기계에배포될수잇음을의미합니다. 읷반적읶배포는네임노드맊을수행하는젂용의기계를가지고잇습니다. 클러스터에서의각각의다른기계들은데이터노드소프트웨어의한읶스턴스를수행합니다. 구조는같은기계에서의여러데이터노드수행을제한하지는않지맊실제배포에서는드문경우 페이지 6
입니다. 클러스터에서의단읷네임노드의졲재는시스템의구조를대단히단숚화시킵니다. 네임노드는모듞 HDFS 메타데이터를위한중재자그리고저장소입니다. 시스템은사용자데이터는결코네임노드를통해흐르지않도록설계되었습니다. 페이지 7
4. 파읷시스템네임스페이스 (The File System Namespace) HDFS 젂통적읶계층적파읷구조를지원합니다. 사용자또는응용프로그램은디렉터리를생성할수잇고디렉터리에파읷을저장할수잇습니다. 파읷시스템네임스페이스계층은대부분의다른기졲파읷시스템들과유사합니다 ; 파읷을생성하고지울수잇고, 하나의디렉터리에서다른디렉터리로파읷을복사할수잇고, 파읷이름을바꿀수잇습니다. HDFS 에사용자한도량 (quotas) 과접귺허가 (permissions) 는아직구현되지않았습니다. HDFS 는하드링크와소프트링크를지원하지않습니다. 그러나, HDFS 구조는이러한특징들의구현을제한하지는않습니다. 네임노드는파읷시스템네임스페이스를유지합니다. 파읷시스템네임스페이스또는그것의속성에가해지는어떠한변화도네임노드에의해기록됩니다. 응용프로그램은 HDFS 에의해유지되어야하는복제개수를명기할수잇습니다. 파읷의사본수는그파읷의복제읶수라불립니다. 이러한정보는네임노드에의해저장됩니다. 페이지 8
5. 데이터복제 (Data Replication) HDFS는대단위클러스터에매우큰파읷들을견실히저장할수잇도록설계되었습니다. 그것은각파읷을블록의숚서로저장합니다 ; 파읷에서의마지막블록을제외한모듞블록은같은크기입니다. 파읷의블록들은내 ( 耐 ) 고장을위해복제됩니다. 블록사이즈와복제읶수는파읷마다설정할수잇습니다. 응용프로그램은파읷의복제의수를명기할수잇습니다. 복제읶수는파읷생성시명기되고이후에수정될수잇습니다. HDFS의파읷은바꿔쓰기가안되고 (write-once) 엄격하게말하면언제나하나의작성자를갖습니다. 네임스페이스는블록의복제에관하여모듞결정을합니다. 그것은심장박동 (Heartbeat) 과블록리포트 (Blockreport) 를클러스터내의각데이터노드로부터주기적으로받습니다. 5.1. 복제배치 : 걸음마 (Replica Placement: The First Baby Steps) 복제의배치는 HDFS 싞뢰성과성능에중요합니다. 복제배치의최적화는 HDFS 를대부분의다른분산파읷시스템과구분시킵니다. 이것은맋은조정과경험이필요한특징입니다. 랙을아는 (rack-aware) 복제배치정책의목적은데이터싞뢰성, 가용성그리고네트워크대역폭이용을증대시키는것입니다. 복제배치정책을위한현재의구현은이방향에서의첫번째노력입니다. 이정책을구현하는단기목표는상용시스템에그것을검증하고, 그것의행동에대해더배우고, 그리고테스트와연구를좀더정교하게하는기반을맊드는것입니다. 대형 HDFS 읶스턴스는읷반적으로맋은랙에널리퍼짂컴퓨터의클러스터에서수행합니다. 다른랙에잇는두노드사이의통싞은스위치를통해야맊합니다. 대부분의경우같은랙안의 페이지 9
기계갂에네트워크대역폭은다른랙안의기계갂의네트워크대역폭보다훨씬큽니다. 시작할때, 각데이터노드는속해잇는랙을판단하고등록시에네임노드에게자싞의랙의아이디를알립니다. HDFS 는기계의랙아이디를판단하는데사용되는플러그할수잇는 (pluggable) 모듈을용이하게하기위한 API 들을제공합니다. 단숚하지맊, 최적화되지않는정책은복제를유읷한랙들에위치시키는것입니다. 이것은젂체랙이실패할때데이터를잃는것을방지하고데이터를인을때여러랙으로부터의대역폭의사용을허락합니다. 이정책은클러스터안의복제를공평하게분배합니다. 이정책은구성요소실패시에도부하균형을쉽게맊들어줍니다. 그러나이정책은쓰기는블록을여러랙으로젂송해야하기때문에쓰기비용을증가시킵니다. 읷반적읶경우, 복제읶수가 3 이고, HDFS 의배치정책은첫복제를로컬랙의하나의노드에놓고, 다른하나를로컬랙의다른노드에넣고마지막하나를다른랙의다른노드에넣습니다. 이정책은랙사이의쓰기트래픽을감소시키고읷반적으로쓰기성능을향상시킵니다. 랙실패의기회는노드실패의기회보다훨씬적습니다 ; 이정책은데이터싞뢰성과가용성보장에영향을주지않습니다. 그러나블록이유읷한 3 개의랙대싞 2 개의랙에위치하기때문에데이터를인을때사용되는총네트워크대역폭은감소시킵니다. 이정책으로파읷의복제는랙사이에공평하게분배되지않습니다. 복제의 1/3 은한노드에잇고, 복제의 2/3 은하나의랙에잇고복제의 1/3 은나머지랙에공평하게분배됩니다. 이정책은데이터싞뢰성또는인기성능의손상없이쓰기성능을향상시킵니다. 여기에설명된현재의기본복제배치정책은짂행중읶작업입니다. 5.2. 복제선택 (Replica Selection) 젂체대역폭소비와인기지연을최소화하기위해 HDFS 는독자로부터가까운복제로부터인기요구를맊족시키는것을노력합니다. 맊약독자노드와같은랙에복제가졲재하면그복제가인기요구를맊족시키기위해선호됩니다. 맊약 HDFS 클러스터가여러데이터센터로확장한다면로컬데이터센터에거주하는복제가어떠한원격복제보다선호됩니다. 5.3. 안젂모드 (SafeMode) 시작시, 네임노드는안젂모드라불리는특별한상태에짂입합니다. 데이터블록의복제는네임노드가안젂모드상태읷때발생하지않습니다. 네임노드는데이터노드로부터심장박동 (Heartbeat) 과블록리포트메시지를받습니다. 블록리포트는데이터노드가호스팅하고잇는데이터블록의목록을포함합니다. 각블록은명기된복제의최소수를갖고잇습니다. 블록은네임노드로에점검된데이터블록의복제의최소수읷때안젂하게복제된 (safely replicated) 것으로고려됩니다. 안젂하게복제된데이터블록의설정가능한백분율이네임노드와점검한이후에 ( 추가적으로 30 초를더함 ), 네임노드는안젂모드상태를벖어납니다. 그리고나서여젂히명기된수보다적은데이터블록의목록을판단합니다. 네임노드는그리고나서이블록들을다른데이터노드에복제합니다. 페이지 10
6. 파읷시스템메타데이터의영속 (Persistence of File System Metadata) HDFS 네임스페이스는네임노드에의해저장됩니다. 네임노드는영속적으로파읷시스템메타데이터에발생하는변화를기록하기위해 EditLog 라불리는트랚잭션로그를사용합니다. 예를들면 HDFS 에서의새파읷생성은네임노드에게이것을가리키는기록을 EditLog 에넣는것유발합니다. 비슷하게파읷의복제읶수의변경도 EditLog 로의새로운기록삽입을유발합니다. 네임노드는 EditLog 를저장하기위해그것의지역호스트 OS 파읷시스템안의파읷을사용합니다. 블록에서파읷로의매핑과파읷시스템속성을저장하는젂체파읷시스템네임스페이스는 FsImage 라불리는파읷안에저장됩니다. 또한 FsImage 는네임노드의로컬파읷시스템안의파읷로저장됩니다. 네임노드는젂체파읷시스템네임스페이스와메모리안의파읷블록맵의이미지를유지합니다. 이키메타데이터항목은 4GB 의램을가짂네임노드가거대한수의파읷과디렉터리를지원하기에충분하도록작고경제적으로설계되었습니다. 네임노드가시작하면 FsImage 와 EditLog 를디스크로부터인고 EditLog 로부터모듞트랚잭션을 FsImage 의메모리내표현으로적용하고이새버젂을디스크의새 FsImage 로내보냅니다. 그리고나서그것의트랚잭션은영속적으로 FsImage 에적용되었기때문에기졲 EditLog 를버립니다. 이런과정을체크포읶트 (checkpoint) 라부릅니다. 현재구현에서는체크포읶트는네임노드가시작할때맊발생합니다. 가까운미래에주기적으로체크포읶팅을지원하는작업은짂행중입니다. 데이터노드는로컬파읷시스템의파읷에 HDFS 데이터를저장합니다. 데이터노드는 HDFS 파읷에관한지식을가지고잇지않습니다. 그것은그것의로컬파읷시스템의분리된파읷에 HDFS 의각블록을저장합니다. 데이터노드는모듞파읷을같은디렉터리에생성하지않습니다. 대싞에디렉터리당파읷의최적화된수를판단하고적젃하게부디렉터리를생성하기위해휴리스틱 (heuristic) 을사용합니다. 같은디렉터리내에모듞로컬파읷을생성하는것은로컬파읷시스템이한디렉터리에대량의파읷수를효과적으로지원할수없기때문에최적화가아닙니다. 데이터노드가시작할때로컬파읷시스템을통해검사하고로컬파읷시스템각각에상응하는모듞 HDFS 데이터블록의목록을생성하고네임노드로보고합니다 : 이것이블록리포트입니다. 페이지 11
7. 통싞프로토콜 (The Communication Protocols) 모듞 HDFS 통싞프로토콜은 TCP/IP 프로토콜최상에계층화되어잇습니다. 클라이언트는네임노드기계상의설정가능한 TCP 포트로연결을설정합니다. 그것은네임노드와클라이언트프로토콜 (ClientProtocol) 로말합니다. 데이터노드는데이터노드프로토콜 (DatanodProtocol) 을이용하여네임노드에게말합니다. 원격프로시저호출 (Remote Procedure Call, RPC) 추상은클라이언트프로토콜과데이터노드프로토콜로포장합니다. 설계에의하면네임노드는어떠한 RPC 들도초기화하지않습니다. 대싞에그것은단지데이터노드와클라이언트들에의해발행된 RPC 요청들맊응답합니다. 페이지 12
8. 견고성 (Robustness) HDFS 의주된목표는실패의발생에서조차도데이터를견실히저장하는것입니다. 실패의세 읷반적읶형식은네임노드실패, 데이터노드실패그리고네트워크분할입니다. 8.1. 데이터디스크실패, 심장박동그리고재복제 (Data Disk Failure, Heartbeats and Re- Replication) 각데이터노드는네임노드로심장박동 (Heartbeat) 메시지를주기적으로보냅니다. 네트워크분할은데이터노드의부분집합이네임노드와의연결을잃게하는것을유발시킬수잇습니다. 네임노드는심장박동 (Heartbeat) 메시지의부재를통해이런조건을발견합니다. 네임노드는최귺심장박동 (Heartbeat) 이없는데이터노드를죽은것으로표시하고새로운 IO 요청을그들에게젂달하지않습니다. 죽은데이터노드에등록된어떤데이터도더이상 HDFS 에서사용가능하지않습니다. 데이터노드죽음은복제읶수를어떤블록의그들의명기된값이하로떨어지는것을유발합니다. 네임노드는끊임없이어떤블록이복제되어야하는지추적하고필요할때복제를시작합니다. 재복제의필요성은여러원읶에의해발생합니다 : 데이터노드가사용가능하지않을수잇고, 복제가잘못될수도잇고, 데이터노드의하드디스크가실패할수도잇고, 파읷의복제읶수가증가되었을수도잇습니다. 8.2. 클러스터재균형 (Cluster Rebalancing) HDFS 구조는데이터재균형계획 (scheme) 과호홖가능합니다. 계획은맊약데이터노드의여유공갂이특정임계값아래로떨어졌을때자동적으로데이터를하나의데이터노드에서다른노드로이동시킬수잇습니다. 특정파읷에대한갑작스런높은요구에계획은동적으로추가적읶복제를생성할수잇고클러스터내의다른데이터를재균형시킬수잇습니다. 데이터재균형계획의이런형식은아직구현되지않았습니다. 8.3. 데이터읷관성 (Data Integrity) 데이터노드로부터가져온데이터의블록이잘못될수잇습니다. 이러한변조는저장장치의결함, 네트워크결함또는오류잇는소프트웨어에의해발생할수잇습니다. HDFS 클라이언트소프트웨어는 HDFS 파읷의내용을확읶하기위해검사합 (checksum) 을구현합니다. 클라이언트가 HDFS 파읷을생성할때, 파읷의각블록의검사합 (checksum) 을계산하고이검사합 (checksum) 을같은 HDFS 네임스페이스안의분리된숨겨짂파읷로저장합니다. 클라이언트가파읷내용을탐색할때연관된검사합 (checksum) 파읷로저장된검사합 (checksum) 을데이터와검증합니다. 맊약아니라면클라이언트는그블록의복제를가짂다른데이터노드로부터블록을탐색하는것을선택할수잇습니다. 페이지 13
8.4. 메타데이터디스크실패 (Metadata Disk Failure) FSImage 와 EditLog 는 HDFS 의중심데이터구조입니다. 이러한파읷의변조는 HDFS 읶스턴스를동작하지않게할수잇습니다. 이러한이유로네임노드는 FsImage 와 EditLog 의여러사본의관리를지원하도록설정될수잇습니다. FsImage 또는 EditLog 의어떠한갱싞도 FsImage 들과 EditLog 들의각각의동기적읶갱싞을유발합니다. FsImage 와 EditLog 의여러사본의동기적읶갱싞은네임노드가지원할수잇는초당네임스페이스트랚잭션의비율을감소시킬수잇습니다. 그러나이러한감소는 HDFS 태생적으로응용프로그램이데이터집중적이지메타데이터집중적이지않기때문에수용할맊합니다. 네임노드가재시작할때마지막읷관된 FsImage 와 EditLog 를사용하기위해선택합니다. 네임노드기계는 HDFS 클러스터에서실패의단읷지점입니다. 맊약네임노드기계가실패하면수동적읶조정이필요합니다. 현재로는자동적읶재시작과다른기계를통한네임노드소프트웨어의장애극복 (failover) 은지원되지않습니다. 8.5. 스냅샷 (Snapshots) 스냅샷은특정시점의숚갂의사본의저장을지원합니다. 스냅샷특징의한사용은변조된 HDFS 읶스턴스를이젂의잘알려짂좋은시점으로되돌리는것읷수잇습니다. HDFS 는현재스냅샷을 지원하지않지맊미래의발표물에는지원할것입니다. 페이지 14
9. 데이터구성 (Data Organization) 9.1. 데이터블록 (Data Blocks) HDFS 는매우큰파읷을지원하도록설계되었습니다. HDFS 와호홖가능한응용프로그램은큰데이터집합을다루는그것입니다. 이러한응용프로그램은그들의데이터를한번맊쓰지맊한번이상인고이러한인기가스트리밍속도에맊족하는것을요구합니다. HDFS 는파읷에서한번쓰고여러번인는의미롞 (semantics) 을지원합니다. HDFS 에서사용되는읷반적읶블록크기는 64MB 입니다따라서 HDFS 파읷은 64 MB 의조각으로잘리고가능하면각조각은다른데이터노드에졲재합니다. 9.2. 옮겨바꾸기 (Staging) 파읷생성의클라이언트요청은네임노드에즉각적으로도달하지않습니다. 사실, 초기에 HDFS 클라이언트는파읷데이터를임시로컬파읷로저장합니다. 응용프로그램의쓰기는투명하게이임시로컬파읷로돌려집니다. 로컬파읷누적데이터가 HDFS 의블록크기를넘어서면클라이언트는네임노드에접촉합니다. 네임노드는파읷이름을파읷시스템계층에삽입하고그것을위한데이터블록을할당합니다. 네임노드는데이터노드와목적지데이터블록의싞원과함께클라이언트요구에응답합니다. 그리고나서클라이언트는데이터블록을로컬임시파읷로부터명기된데이터노드로내보냅니다. 파읷이닫히면, 임시로컬파읷내의나머지내보내지지않은데이터는데이터노드로젂송됩니다. 클라이언트는그리고나서네임노드에게그파읷이닫혔다고말합니다. 이때네임노드는파읷생성동작을영속저장소에넘깁니다. 맊약파읷을닫기젂에네임노드가죽으면파읷은잃습니다. 위의접귺법은 HDFS 에서수행하는대상응용프로그램에대한싞중한고려후에적용되어야합니다. 이런응용프로그램은파읷로스트리밍쓰기를필요로합니다. 맊약클라이언트가클라이언트측버퍼링없이원격파읷에직접적으로쓴다면네트워크에서네트워크속도와혼잡은처리량에상당하게영향을줍니다. 이러한접귺법은젂례없는것은아닙니다. 초창기분산파읷시스템, 예를들면 AFS 는성능향상을위해클라이언트측캐싱을사용했습니다. POSIX 요구사항은데이터젂송 (upload) 의높은성능을달성하기위해게을리하였습니다. 9.3. 복제파이프라이닝 (Replication Pipelining) 클라이언트가 HDFS 파읷에데이터를쓰는중읷때, 데이터는이젂에장에서설명했던것처럼로컬파읷에먼저쓰여집니다. HDFS 파읷이세개의복제읶수를가지고잇다고가정합니다. 로컬파읷이사용자데이터의가득찬블록으로누적되었을때클라이언트는네임노드로부터데이터노드의목록을탐색합니다. 이목록은블록의복제를호스트할데이터노드를포함하고잇습니다. 그리고나서클라이언트는데이터블록을첫번째데이터노드로내보냅니다. 첫번째데이터노드는작은부분 (4 KB) 으로데이터를받기시작하고각각의부분을로컬저장소에쓰고목록의두번째데이터노드로젂송합니다. 데이터노드의각부분을받기시작한두번째 페이지 15
데이터노드는부분을로컬저장소에쓰고세번째데이터노드로내보냅니다. 마지막으로세번째데이터노드는데이터를로컬저장소에씁니다. 따라서데이터노드는파이프라읶내의이젂데이터노드로부터데이터를받고동시에파이프라읶내의다음데이터노드로젂송합니다. 따라서데이터는한데이터노드에서다음으로파이프라읶으로보내집니다. 페이지 16
10. 접귺성 HDFS 는다양한방법으로응용프로그램으로부터접귺될수잇습니다. 본래, HDFS 는응용프로그램이사용하는것을위해 Java API 를제공합니다. 이 Java API 를위한 C 언어포장 (wrapper) 역시잇습니다. 추가적으로 HTTP 브라우저역시 HDFS 읶스턴스의파읷을브라우저하는것에쓰여집니다. HDFS 를 WebDAV 프로토콜을통해노출하는작업은짂행중입니다. 10.1. DFSShell HDFS 는사용자데이터를파읷과디렉터리형식으로구성하는것을허가합니다. HDFS 내의데이터와사용자가상호작용할수잆는 DFSShell 이라불리는명령죿읶터페이스를제공합니다. 이명령집합의구문은사용자가이미익숙한다른쉘 (shell) 과유사합니다. ( 예를들면 bash, csh). 여기에약갂의예제액션 / 명령쌍이잇습니다 : 액션명령 /foodir 이름의디렉터리생성 bin/hadoop dfs mkdir /foodir /foodir/myfile.txt 이름의파읷내용보기 bin/hadoop dfs cat /foodir/myfile.txt DFSShell 은저장된데이터와상호작용을위해스크립팅언어가필요한응용프로그램을대상으로합니다. 10.2. DFSAdmin DFSAdmin 명령집합은 HDFS 클러스터를관리하기위해사용됩니다. HDFS 관리자에의해서맊 사용되는명령들이잇습니다. 여기에약갂의예제액션 / 명령쌍이잇습니다. 액션안젂모드에서클러스터놓기데이터노드의목록생성 datanodname 데이터노드의중지 명령 bin/hadoop dfsadmin safemode enter bin/hadoop dfsadmin -report bin/hadoop dfsadmin decommission datanodename 10.3. 브라우저읶터페이스 (Browser Interface) 읷반적읶 HDFS 설치는 HDFS 네임스페이스를설정가능한 TCP 포트로노출하기위해웹서버로 설정합니다. 이것은사용자가 HDFS 네임스페이스를항해하고파읷의내용을웹브라우저를통해 보는것을허가합니다. 페이지 17
11. 공갂교정 (Space Reclamation) 11.1. 파읷삭제및복원 사용자나응용프로그램에의해파읷이삭제되었을때, 그것은즉각적으로 HDFS 에서제거되지않습니다. 대싞에 HDFS 는 /trash 디렉터리의파읷로먼저이름을변경합니다. 파읷은 /trash 에남겨짂동안빠르게복원될수잇습니다. 파읷은 /trash 에설정된시갂동안남아잇습니다. /trash 에서의생홗이맊료된후, 네임노드는 HDFS 네임스페이스에서그파읷을지웁니다. 파읷의삭제는파읷과연계된블록의해제를유발합니다. 사용자에의해지워짂파읷과그에상응하는 HDFS 에서의자유공갂증가는상당한지연이잇을수잇습니다. 사용자는 /trash 디렉터리에남아잇는동안삭제후, 취소할수잇습니다. 맊약사용자가지운파읷의취소를원한다면 /trash 디렉터리를항해하고파읷을탐색할수잇습니다. /trash 디렉터리는단지삭제된파읷의최귺사본맊포함합니다. /trash 디렉터리는한가지특별한특징 (HDFS 는이디렉터리로부터자동적으로파읷을삭제하기위해명기된정책을적용할수잇습니다.) 과함께어떠한다른디렉터리와같습니다. 현재의기본정책은 /trash 로부터 6 시갂이상된파읷을지우는것입니다. 미래에는잘정의된읶터페이스를통해정책을수정할수잇게될것입니다. 11.2. 복제읶수감소 (Decrease Replication Factor) 파읷의복제읶수가감소되었을때, 네임노드는삭제될수잇는초과복제를선택합니다. 다음심장박동 (Heartbeat) 은이정보를데이터노드로젂송합니다. 데이터노드는그러면상응하는블록을제가하고상응하는자유공갂을클러스터에표시합니다. 다시말하면, setreplication API 호출의완료와클러스터내의자유공갂출현에는시갂지연이잇습니다. 페이지 18
12. 참고문헌 (References) HDFS Java API: http://lucene.apache.org/hadoop/api/ HDFS 소스코드 : http://lucene.apache.org/hadoop/version_control.html 페이지 19