티스토리 뷰


HDFS(Apache Hadoop Distributed File System)


Apache Hadoop은 분산 파일 시스템과 MapReduce 패러다임을 이용한 대용량 데이터를 분산 처리할 수 있는 오픈소스 프레임워크이다.

원래 너치(루씬을 기반으로 하여만든 오픈 소스 검색 엔진)의 분산처리를 지원하기 위해 개발된 것으로, 아파치 루씬의 하부 프로젝트이다. 분산처리 시스템인 구글 파일 시스템을 대체할 수 있는 하둡 파일 시스템과 맵리듀스를 구현한 것이다.


HDFS 특징


1. 데이터 Recoverability

- 시스템의 컴포넌트가 fail 하더라도 시스템을 통해 작업을 지속적으로 수행되어야 한다. failure로 인해 어떠한 데이터의 손실도 발생해서는 안된다.

2. 컴포넌트 Recovery

- 시스템의 컴포넌트가 fail 되고 다시 recover 된 경우, 시스템에 rejoin 하는 것이 가능해야 한다. 이 작업은 전체 시스템의 재시작 없이 수행되어야 한다.

3. Consistency

- job이 수행되는 동안 컴포넌트의 failure는 결과에 영향을 주지 않아야 한다.

4. Scalability

- 데이터의 양이 증가하면, 각 작업의 성능이 감소한다. 시스템의 resource를 증가시키면, 비례적으로 로드 capacity가 증가된다.


HDFS 네임노드 가용성


네임노드 데몬은 반드시 항상 실행되고 있어야 한다. 만약 네임노드가 중단되면 클러스터는 접근이 불가능하게 된다. 따라서 고가용성 모드 2개의 네임노드(Active/Standby)를 구성하기도 한다. 일반적인 Classic Mode에서는 1개의 네임노드와 또 다른 "Helper" 노드는 SecondaryNameNode로 구성된다. 이때 "Helper" 노드는 백업 목적이 아니므로 네임노드를 복구할 수 있는 정보를 가지고 있지만 장애 발생 시 네임노드를 대신하는 것은 불 가능하다.


HDFS Architecture


네임노드 - HDFS의 파일 및 디렉터리에 대한 메타데이터를 관리하고, 클라이언트로부터 데이터 위치 요청이 오면 전달하며, 장애 발생 시 SecondaryNameNode로 대체된다.

데이터노드 - 데이터를 HDFS의 Block 단위로 구성하며 Fault Recovery를 위해 default로 3 copy를 유지한다. Heartbeat를 통해 지속적으로 네임노드에 메타정보를 전달한다.

  1. 블록 구조의 파일 시스템으로, 저장하는 파일은 특정 사이즈의 블록으로 나눠져 분산된 서버에 저장된다.
  2. 하나의 블록은 3개(기본값)로 복제되며, 각각 다른 HDFS의 노드에 분산 저장된다.
  3. HDFS에는 마스터 역할을 하는 네임노드 서버와 슬레이브 역할을 하는 데이터노드 서버가 여러 대로 구성된다.
  4. 네임노드는 HDFS의 모든 메타데이터(블록 정보)를 관리하고, 클라이언트가 이를 이용하여 HDFS에 저장된 파일에 접근할 수 있다.
  5. 하둡 애플리케이션은 HDFS에 파일을 저장하거나, 저장된 파일을 읽기 위해 HDFS 클라이언트를 사용하며, 클라이언트는 API 형태로 사용자에게 제공된다.
  6. 데이터노드는 주기적으로 네임노드에 메타데이터(블록 정보)를 전송하고, 이를 통해 네임노드는 데이터 노드가 정상작동하는지 확인한다.
  7. 클라이언트는 네임노드에 접속해서 원하는 파일이 저장된 블록의 위치를 확인하고, 해당 블록이 저장된 데이터노드에서 직접 데이터를 조회한다.


맵리듀스(MapReduce)


대용량의 데이터 처리를 위한 분산 프로그래밍 모델 프레임워크이다.

맵리듀스 프레임워크를 이용하면 대규모 분산 환경에서, 대량의 데이터를 병렬로 분석 가능하며, 프로그래머가 직접 작성하는 맵과 리듀스라는 2개의 메소드로 구성된다.


Map - 흩어져 있는 데이터를 연관성 있는 데이터들로 분류하는 작업이다.(Key, Value 형태)

Reduce - Map에서 출력된 데이터를 중복 제거하고 원하는 데이터로 추출하는 작업이다.

  1. Splitting : 문자열 데이터를 라인별로 나눈다.
  2. Mapping : 라인별로 문자열을 입력받아, <Key, Value> 형태로 출력한다.
  3. Shuffling : 같은 Key를 가지는 데이터로 분류한다.
  4. Reducing : 각 Key 별로 빈도수를 합산하여 출력한다.
  5. Final Result : 리듀스 메소드의 출력 데이터를 합쳐서 하둡 파일 시스템에 저장한다.

MapReduce Job - 클라이언트가 수행하려는 작업 단위(입력 데이터, 맵리듀스 프로그램, 설정 정보로 구성)를 말한다.


MapReduce 시스템은 Client, JobTracker, TaskTracker로 구성되며 JobTracker는 네임노드에, TaskTracker는 데이터노드에 위치한다.


Client - 분석하고자 하는 데이터를 Job의 형태로 JobTracker에게 전달한다.

JobTracker - 하둡 클러스터에 등록된 전체 Job을 스케줄링하고 모니터링한다.

TaskTracker - 데이터노드에서 실행되는 데몬이고, 사용자가 설정한 맵리듀스 프로그램을 실행하며, JobTracker로부터 작업을 요청받고 요청받은 Map Reduce 개수만큼 Map Task와 Reduce Task를 생성한다.


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함