아파치 하둡은 대규모 검색 색인을 구축하려고 자바로 개발된 오픈 소스 분산 컴퓨팅 플랫폼이다. 하둡의 원래 개발 목적은 검색 색인에 있었지만 사람들은 곧 하둡의 핵심 개념을 다른 일반적인 문제에도 폭넓게 적용할 수 있게 되면서 하둡은 여러 해 동안 다방면에 활용되고 개선 되면서 대규모 원시 데이터를 처리하고 분석하는 데이터 센터 운영 시스템의 핵심 소프트웨어 생태계를 이뤘다.
하둡의 핵심 기능은 장애 허용(fault tolerance)이다. 하둡은 확장성(scalability)을 높이려고 하드 디스크 손상 같은 장비나 노드의 장애르 당연히 발생할 수 있는 일로 간주하며 기반 소프트웨어 시스템이 실패한 작업을 책임지고 재시도하게 설계되었다. 이와 같은 소프트웨어 복원성(resiliency)은 몇몇 경제적 이점을 주었고 특히 하드웨어 레이어가 아닌 소프트웨어 레이어에서 복원 기능을 제공하므로 다소 불안정하지만 저렴한 하드웨어로도 매우 안정적인 시스템을 구성할 수 있다. 또한 하드웨어의 수리 작업을 발생 즉시 처리할 필요 없이 대기여렝 누적한 후 일괄적으로 처리할 수 있어서 노드당 필요한 시스템 운영 인력을 감축할 수 있다.
하둡의 핵심 기술은 2005년 처음으로 커밋된 이후 크게 확장됐지만 그 기초를 이루는 구성 요소는 몇개없다.

  • 분산 파일 시스템
  • 리소스 관리자와 스케줄러
  • 분산 데이터 처리 프레임워크

맵리듀스

구글에소 대용량 데이터 처리를 분산 병렬 컴퓨팅에서 처리하기 위한 목적으로 제작한 소프트웨어 프레임워크이며 페타 바이트 이상의 대용량 데이터를 신뢰도가 낮은 컴퓨터로 구성된 클러스터 환경에서 병렬 처리를 지원하기 위해서 개발되었다.

분산 파일 시스템

하둡의 스토리지로 선택할 수 있는 분산 파일 시스템은 여러가지지만 하둡의 핵심 파일 시스템으로 처음 개발된 HDFS(Hadoop Distribution File System)가 여전히 널리 사용된다. 구글의 GFS를 기반으로 설계된 HDFS는 데이터의 중복 저강이란 개념을 바탕으로 한 대규모 분산 파일 시스템이다.
HDFS는 일반적인 파일 시스템을 가진 여러 노드를 묶어 하나의 분산 파일 시스템을 구축하도록 설계되었다. 이러한 설계 덕분에 파일 시스템을 손쉽게 확장해 몇 페타바이트에 이르는 대용량 데이터까지 저장할 수 있다. HDFS의 설계에는 몇 가지 가정이 반영되어있다.

  • 데이터의 풀 스캐닝을 지원하기 위해 순차읽기(Sequential read)속도가 빨라야한다.
  • 데이터가 계산이 수행되는 곳으로 옮겨지는 것이 아니고 데이터가 저장된 곳에서 계산이 수행될 수 있게 파일 시스템의 노드들이 각자 자신이 저장한 데이터의 위치 정보를 충분히 교환해야한다.
  • 노드의 장애를 소프트웨어 레이어에서 극복해야한다.

데이터는 HDFS 내부에 블록(block)형태로 저장되며 블록은 HDFS에 의해 투명하게 복제돼여러 노드에 분산된다. HDFS의 리플리케이션 메러키늦ㅁ은 데이터를 단순히 여러 노드에 저장하는 방식이 아닌 데이터가 여러 렉(rack)에 분산 저장되도록 보장하는 다양한 전략을 사용한다. 이러한 리플리케이션 전략은 단일 노드나 단일 렉의 장애가 데이터의 유실로 이어지는 사태를 방지한다.

데이터 블록이 저장된 위치를 파악하고 계산 작업이 실행될 최적의 장소를 전체시스템이 결정할 수 있어서 작업이 데이터와 가까운 위치에서 실행될 확률이 높다. 이러한 최적화 덕분에 연산을 수행할 노드로 데이터를 전송하는 데 걸리는 시간을 크게 단축시킬 수 있다. 그 결과 HDFS는 리플리케이션된 블록과 데이터 지역성(localty)을 바탕으로 대규모 계산에 이상적인 요소인 높은 안정성(reliability)과 종합 대역폭(aggreagte bandwidth)을 달성했다.

하둡 시스템의 일반적인 구성과 여러 엑터가 HDFS 시스템과 어떻게 데이터와 정보를 주고받는지 한눈에 볼 수 있다. 부산 파일 시스템의 데이터를 읽거나 저장하려는 클라이언트(또는 개별 프로그램)는 필요한 HDFS 일부분과 직접 통신 한다. 더 정확히는 단순히 데이터를 읽거나 저장하려는 클라이언트는 네임 노드에 필요한 블록(HDFS 데이터의 하위 구선단위)의 위치를 요청한 후 이 블록들을 저장하는 서버들과 직접 통신한다.
이러한 HDFS의 아키텍쳐는 병목현상의 가능성을 최대한 억제하면서 시스템 일부를 필요한 만큼만 사용할 수 있다는 장점이 있다.

거의 모든 하둡 배포판에서 보조 네임노드를 사용한다. 보조 네임노드는 네임노드 설정에 필요하진않지만 클러스터에 포함하는 편이 좋다.

profile
안되면 될 때까지

0개의 댓글