하둡 완벽 가이드 3장 하둡 분산 파일시스템

3장 하둡 분산 파일시스템
HDFS 블록은 기본적으로 64MB로 디스크 블록에 비해 큰데 이는 탐색 시간을 최소화하기 위함이다.

네임 노드가 장애복구 능력을 갖추기 위해 갖는 두 가지 매커니즘
1. 파일시스템 메타데이터의 지속 상태를 보완해주는 파일을 백업한다.
2. secondary namenode를 운영한다. 주기적으로 네임스페이스 이미지를 에디트 로그와 병합하고, 주 네임노드가 실패했을 때 사용될 병합된 네임스페이스 이미지 복제본을 유지한다.

하둡2.x 릴리즈부터 한 쌍의 네임노드를 active-standby로 구성하여 HDFS high availability를 지원한다.
이를 통해 하나의 네임노드에 장애가 발생해도 중단 없이 다른 네임노드가 활성화된다.
데이터노드는 블럭에 대한 정보를 두 개의 네임노드에 모두 내보내야 한다.

hadoop fs -copyFromLocal path/file path/file
hadoop fs -mkdir prac

HTTP 기반으로 HDFS로 액세스하는 두 가지 방법
1. HDFS 데몬이 클라이언트 HTTP 요청을 직접적으로 처리
2. 범용 DFS API를 사용하여 클라이언트의 HDFS에 대한 요청을 proxy로 간접적으로 처리. 이 경우 더 엄격한 방화벽과 대역폭-제한 정책이 사용될 수 있다.

HDFS 구조는 클라이언트가 데이터를 얻기 위해 데이터노드에 직접 접근해야하므로 전반적으로 퍼져 있는 데이터노드들에게 골고루 로드가 분배되고 다수 클라이언트가 동시에 사용하기 용이하다.
네임노드는 단순히 블록 위치 정보 요청을 서비스하고 병목 현상이 생길 작업은 하지 않는다.

네임노드가 복제본을 저장할 데이터노드를 배치할 때 첫 번째 복제본은 클라이언트와 같은 노드에 배치하고, 두 번째와 세 번째는 다른 외부 랙에 서로 다른 노드에 복제된다.

HDFS는 FSDataOutputStream의 sync() 메소드를 통해 모든 버퍼가 네임노드에 동기화되도록 강제하는 메소드를 제공한다.
어느 정도 오버헤드가 있기 때문에 robustness와 throughput 사이에서 협상해야 한다.

Apache Flume: 대규모 스트리밍 데이터를 HDFS로 이동하는 시스템
Apache Sqoop: 관계형 데이터베이스와 같이 구조화된 데이터 저장소로부터 HDFS로 대량의 데이터를 임포트할 수 있도록 설계됨

distcp: 병렬도 다량의 데이터를 하둡 파일시스템으로부터 복사하기 위한 프로그램
hadoop distcp hdfs://namenode1/foo hdfs://namenode2/bar
맵리듀스 잡으로 구현되어 있고 클러스터 전반에 걸쳐 병렬로 수행되는 맵으로 복사 작업이 이루어진다.
맵은 노드 당 20개를 주는 것이 좋을 수 있다.
다른 버전에서 운영 중인 두 HDFS 클러스터 간에 distcp를 사용하려고 hdfs 프로토콜을 쓴다면 RPC 시스템이 서로 호환되지 않기 때문에 복사에 실패할 것이다.
이를 위해서는 HTTP 기반의 HFTP 파일 시스템을 사용한다.
hadoop distcp hftp://namenode1:50070/foo hdfs://namenode2/bar

하둡 아카이브(HAR)은 더 효율적으로 파일을 HDFS 블록으로 묶기 위한 파일 아카이빙 기능으로 네임노드의 메모리 사용량을 감소시킬 수 있다.
맵리듀스의 입력으로 사용될 수 있다.
확장자명 .har을 의무적으로 사용해야한다.
파일들을 아카이빙하면 두 개의 인덱스 파일과 하나의 part파일이 생기는데 part 파일에는 합쳐진 다수의 원본 파일의 내용이 있고 각 인덱스 파일은 part 파일이 포함된 파일의 오프셋, 길이 등을 나타낸다.


댓글

이 블로그의 인기 게시물

논문 정리 - MapReduce: Simplified Data Processing on Large Clusters

논문 정리 - The Google File System

kazoo: Using zookeeper api with python