*데이터 지역성 - check
여러 대의 컴퓨터들이 연결되어 하나의 시스템처럼 동작하는 컴퓨터들의 집합분산 파일 시스템
- 네트워크로 연결된 여러 머신의 저장 공간을 관리하는 파일 시스템
HDFS - 범용 하드웨어로 구성된 클러스터에서 실행되고 스트리밍 방식의 데이터 접근 패턴으로 대용량 파일을 다룰 수 있도록 설계된 파일 시스템
HDFS 설계 특성
- 스트리밍 방식의 데이터 접근 -> 한번 쓰고 여러 번 읽도록.
HDFS의 파일은 단일 디스크를 이한 파일시스템처럼 특정 블록 크기의 청크로 쪼개지고 각 청크는 독립적으로 저장된다.
HDFS파일은 블록 크기보다 작은 데이터일 경우 필요한 만큼의 디스크만 사용한다.
분산 파일 시스템에 블록 추상화의 개념을 도입하면서 얻게 된 이득
1. 파일 하나의 크기가 단일 디스크의 용량보다 더 커질 수 있다.
2. 스토리지의 서브시스템을 단순하게 만들 수 있다. 스토리지 관리를 단순화하기 쉽고, 메타데이터에 대한 고민을 덜 수 있다. 블록은 단지 저장된 데이터의 청크일 뿐이고 권한 정보와 같은 파일의 메타데이터는 블록과 저장될 필요가 없으므로 별도의 시스템에서 다루도록 분리할 수 있다.
3. 블록은 내고장성(fault tolerance)과 가용성(availability)을 제공하는 데 필요한 복제(replication)를 구현할 때 매우 적합하다.
* 내고장성(fault tolerance)
* 가용성(availability)
* fsck 명령어 - 블록 관리 *check
% hdfs fsck / -files -blocks
파일 시스템에 있는 각 파일을 구성하는 블록의 목록 출력
3.2.2
* 클러스터 - 여러 대의 컴퓨터들이 연결되어 하나의 시스템처럼 동작하는 컴퓨터들의 집합
HDFS 클러스터 - 마스터-워커 패턴으로 동작하는데, 마스터인 하나의 네임노드와 워커인 여러 개의 데이터 노드로 구성되어 있다.
네임노드엔 핵심적인 정보들 메타데이터 등의 중요 정보들이 저장되고 나눠진 블록들이 어느 데이터노드에 있는지 파악한다.
-> 파일시스템의 모든 파일과 각 블록에 대한 참조 정보를 메모리에서 관리한다.
데이터노드에는 블록을 저장하고 탐색하며 자신이 저장한 블록의 목록들을 주기적으로 네임노드에 보고한다.
네임노드가 없다면 파일시스템은 동작하지 않는다.
따라서 이를 위해 하둡은 두 가지 메커니즘을 제공한다.
1. 파일로 백업
주로 로컬 디스크와 원격의 NFS 마운트 두 곳에 동시에 백업한다
2. 보조 네임노드(secondary namenode)를 운영
에디트 로그가 너무 커지지 않도록 주기적으로 네임스페이스 이미지를 에디트 로그와 병합하여 새로운 네임스페이스 이미지를 만든다. 또한네임스페이스의 이미지의 복제본을 보관하는 역할도 한다. 하지만 주 네임노드와 약간의 시간차가 있기 때문에 데이터 손실이 있을 수 있다.
일반적인 복구 방식은 NFS에 저장된 주 네임노드의 메타데이터 파일을 보조 네임노드로 복사하여 새로 병합된 네임스페이스 이미지를 만들고 새로운 주 네임노드에 복사한 다음 실행하는 것이다.
HDFS 고가용성에서는 대기 네임노드가 보조 네임노드의 역할을 대신한다.
3.2.3
빈번하게 접근하는 블록 파일은 오프힙 블록 캐시라는 데이터노드의 메모리에 명시적으로 캐싱할 수 있다.
기본적으로 블록은 하나의 데이터노드 메모리에만 캐싱되지만 파일 단위로도 캐싱할 수 있다.
맵 리듀스 같은 잡 스케줄러는 블록이 캐싱된 데이터노드에서 태스크가 실행되도록 할 수 있다.
캐시풀 - 캐시 권한이나 자원의 용도를 관리하는 관리 그룹 역할 / 특정 파일 캐싱
3.2.4 HDFS 페더레이션(연합체) - 네임노드의 확장성 문제 해결를 위해.
각각의 네임노드가 파일 시스템의 네임스페이스 일부를 나누어 관리하는 방식으로 새로운 네임노드를 추가할 수 있다.
HDFS 페더레이션을 적용하면 각 네임노드는 네임스페이스의 메타데이터를 구성하는 네임스페이스 볼륨과 네임스페이스에 포함된 파일의 전체 블록을 보관하는 블록 풀을 관리한다. 여기서 네임스페이스 볼륨은 서로 독립되어 있지만 블록 풀은 분리되어 있지 않다.
HDFS 페더레이션 클러스터에 접근하기 위해 파일 경로와 네임노드를 매핑한 클라이언트 측 마운트 테이블을 이용한다.
*마운트 - 저장 장치에 접근할 수 있는 경로를 디렉터리 구조에 편입시키는 작업
환경 설정에서 ViewFileSystem과 viewfs://URI를 사용하여 관리할 수 있다.
3.2.5 HDFS 고가용성
네임노드의 장애를 복구하기 위해서는 관리자는 새로운 네임노드를 구동하고 모든 데이터 노드와 클라이언트에 새로운 네임노드를 사용하도록 알려주면 된다. 하지만 새로운 네임노드는 네임 스페이스 이미지를 메모리에 로드하고, 에디트 로그를 갱신하고 전체 데이터노드에서 충분한 블록 리포트를 받아 안전 모드를 벗어날 때까지 그 어떤 요청도 처리하지 못한다.
이를 위해 고가용성을 지원한다. 이는 활성대기 상태로 설정된 한 쌍의 네임노드로 구현되는데 활성 네임노드가 장애가 발생하면 대기 네임노드가 이를 이어받아 중단없이 작업을 받는다.
*에디트 로그 - 파일의 모든 상태 변화를 기록
HDFS 고가용성을 지원하기 위해 HDFS 구조에서 변경한 점
- 네임노드는 에디트 로그를 공유하기 위해 고가용성 공유 스토리지를 반드시 사용해야 한다.
- 데이터 노드는 블록 리포트를 두 개의 네임노드에 보내야 한다.
- 클라이언트는 네임노드 장애를 사용자에게 투명한 방식으로 처리할 수 있도록 구성해야 한다.
- 대기 네임노드는 보조 네임노드의 역할을 포함하고 있으며, 활성 네임노드 네임스페이스의 체크포인트 작업을 주기적으로 수행한다.
여기서 대기 네임노드를 활성화시키는 전환 작업을 하는 것이 장애복구 컨트롤러(failover controller)라는 새로운 객체이다.
각 네임노드는 경량의 장애복구 컨트롤러 프로세스로 네임노드의 장애를 감시하고 네임노드에 장애가 발생하면 장애복구를 지시한다.
장애복구 컨트롤러는 두 개의 네임노드가 서로 역할을 바꾸게 하는 방법으로 전환 순서를 제어할 수 있다.
여기서 장애복구에는 두 가지 방식이 있는데 정기적인 유지관리를 위하여 관리자가 수동으로 초기화하는 우아한 장애복구(graceful failover) 와 그러하지 아니하는 우아하지 못한 장애복구(ungraceful failover) 가 있다.
우아하지 못한 장애복구의 경우 관리자가 수동으로 초기화하지 않으므로 네트워크가 자동으로 복구 작업을 시행하고 있다고 하더라도 기존의 발생한 네임노드가 그 점을 알아차리고 실행을 멈추었다고 확신할 수 없다.
여기서 실행을 멈추지 않고 여전히 실행되는 노드가 엉뚱한 일을 저지르는 것을 저지하기 위해, 팬싱(fencing)이라는 메서드를 사용한다.
네임노드가 공유 스토리지 디렉터리에 접근하는 것을 불허하는 방법부터 원격 관리 명령어로 네트워크 포트를 막는 방법까지 다양한 펜싱 메커니즘이 있다.
최후의 수단으로 호스트 머신의 전원을 강제로 내려버리는 특별한 전원 분산 유닛(PDU)를 이용하여 shoot the node in the head 방법이 있다.
* QJM
* 원격 프로시저 호출(영어: remote procedure call, 리모트 프로시저 콜, RPC)은 별도의 원격 제어를 위한 코딩 없이 다른 주소 공간에서 함수나 프로시저를 실행할 수 있게하는 프로세스 간 통신 기술이다.
'컴퓨터 > 공부' 카테고리의 다른 글
하둡 파일 데이터 읽기 (0) | 2017.07.26 |
---|---|
우분투 파이썬 설치 (0) | 2017.07.24 |
7/23 (0) | 2017.07.23 |
하둡 - 이클립스 메이븐 설치 (0) | 2017.07.21 |
2장 맵리듀스 (0) | 2017.07.19 |
댓글