<colbgcolor=#707070><colcolor=#1f2023,#fff> 아파치 하둡 Apache Hadoop[1] | |
라이선스 | 아파치 라이선스 |
최신 버전 | 3.4.0 (2024.7.17) |
링크 |
1. 개요
Apache Hadoop은 빅 데이터 처리를 위해 컴퓨터 클러스터용 분산 처리 시스템을 제공하는 프레임워크이다. 아파치 소프트웨어 재단에서 Java를 기반으로 개발되었다.원래 검색 엔진 Nutch의 분산 처리를 위하여 개발되었다. 야후!에 재직 중이던 프로그래머 더그 커팅이 처음 개발하였고, 이후 프로젝트가 아파치 재단으로 넘어간 다음 해당하는 코드를 분리시켜 독자 프로젝트로 발전해 나갔다고 한다.
마스코트는 코끼리인데, 더그 커팅이 아들이 가지고 놀던 코끼리 장난감을 보고 지었다고 한다. 참고로 파생 프로젝트도 상당수가 동물 이름을 따왔다(타조#, 하마# 등).
2. 구조 및 원리
하둡은 각자의 역할을 수행하는 여러개의 모듈들로 이루어져있는데, 기본적인 모듈은 MapReduce, YARN, Common, Ozone 이다. 여기서 서드파티 모듈을 추가하면 데이터 수집, 동기화, 스케줄링 등의 외부 기능을 추가하는 것도 가능하다.2.1. HDFS
HDFS[2]는 컴퓨터 클러스터로 거대한 양의 데이터를 다루기 위한 파일 시스템이다.우선 하둡에서 데이터를 저장할 시에 블록이라는 단위로 쪼개어 저장한다는 점을 알아야 한다. 고로 블록은 파일의 일부분이라고 할 수 있는데, 저장하려는 데이터가 블록 단위보다 작다면 그대로 저장되지만, 크다면 해당 파일을 단위마다 여러개로 나누어서 저장하게 된다.[3] 따라서 한 파일을 온전히 읽으려 한다면, 블록 단위로 나뉜 부분들을 순서대로 이어붙이는 과정이 필요하게 된다.
데이터를 읽고 쓰는 과정에서 클러스터 내의 컴퓨터들은 주/종관계를 갖게되는데, 각각 네임 노드(주)와 데이터 노드(종)이다.
데이터 노드는 실질적으로 데이터를 저장한다. 즉 블록 단위의 파일 부분들을 컴퓨터 내에 저장하게 된다. 다만, 저장되는 블록이 '뭔 파일의 어디 부분인지' 같이 색인에 필요한 정보는 데이터 노드가 저장하지 않는다.
네임 노드는 각 데이터 노드들에 저장된 블록들의 색인을 위한 정보인 '메타데이터'를 저장한다. 메타데이터는 특정 블록을 검색해야할 때 쓰이게 된다.
사용자가 파일을 읽으려고 할 때 발생하는 절차를 요약하자면 이렇다.
- 찾으려는 파일 블록이 데이터노드 어디에 있는지 알기 위해 네임노드를 참고한다.
- 해당 데이터노드에서 그 블록을 전송한다.
- 그 다음 블록의 데이터노드 위치를 파악하고, 블록을 전송한다.
- (블록으로 파일을 완전히 이룰때까지 반복한다)
- 읽기를 끝낸다.
2.2. MapReduce
MapReduce는 HDFS를 통해 저장된 데이터들에서 병렬적으로 정보 처리를 행하는 모듈이다.맵 리듀스에서의 정보 처리 또한 HDFS에서와 같이 주/종관계의 처리 단위들로 이루어진다. Task(종)는 각 데이터 노드 에서 실행되면서 노드 내에 저장된 정보들에 대해 자료 처리를 행하고, 그러한 Task들의 실행은 네임 노드에서 실행되는 Job(주)이 조율하게 된다.
맵 리듀스에서의 정보 처리는 이름과 같이 Map 과정과 Reduce 과정으로 진행된다.
Map은 요청에 맞게 각 데이터 노드에서 정보 처리를 행하는 과정이다. Reduce는 Map 처리로 나온 결과들을 한데 추려서 사용자에게 제공하는 과정이다.
2.3. YARN
2.4. Common
2.5. Ozone
2.6. 기타 서드파티 모듈
- 분산 코디네이션
- 스케줄링
Oozie: 프로젝트 중단됨- Ingestion[Ingestion]
- 데이터 저장소
- 데이터 수집
Chukwa: 프로젝트 중단됨- 데이터 처리
- 데이터 검색
- 데이터 시각화
- 보안
Sentry: 프로젝트 중단됨- UI
https://solr.apache.org/
https://web.mit.edu/kerberos/
https://avro.apache.org/
3. 버전
3.1. 1.x
- HDFS: 분산 파일시스템.
- MapReduce: 분산처리 시스템.
Map Reduce와 HDFS로만 구성되어 있으며, Hadoop YARN의 ResourceManager 기능은 Map Reduce의 JobTracker라는 이름으로 존재하고 있었다. 또한 아직까지는 Java 8 이하의 버전과만 호환되며, Java 9부터는 모듈 시스템과의 호환성 때문에 문제가 발생할 수 있으니 참고하자.
3.2. 2.x
- YARN: 스케줄러와 클러스터를 관리하는 모듈.
- Common: 공통 모듈. 2007년 9월에 Hadoop Core에서 Hadoop Common으로 명칭이 변경되었다.
- HDFS
- MapReduce
공통모듈인 Hadoop Common, 스케줄러와 클러스터 관리 모듈인 Hadoop YARN, 분산 파일시스템 HDFS(Hadoop Distributed File System), 분산처리 시스템 Hadoop Map Reduce로 구성되어 있다.
3.3. 3.x
- Ozone: 객체를 저장하는 모듈.
- YARN
- Common
- HDFS
- MapReduce
이레이저 코딩이 새로 도입되었다.
4. 사용 예시
사용에 큰 제한이 없는 아파치 라이선스를 가지고 있기 때문에 Map Reduce를 이용하거나, 대량의 파일 시스템을 처리하는 경우에 사용된다. 대표적으로는 Apache Lucene(루씬)을 이용한 검색 엔진이나 기계학습, 빅 데이터 분석 등 여러 분야에서 사용되고 있다.[1] 영문의 뜻은 High-Availability Distributed Object-Oriented Platform의 약자이다.[2] Hadoop Distributed File System의 약자[3] 자르고 남은 자투리는 그대로 저장한다.[Ingestion] 장소와 형태가 다양한 데이터 소스에서 데이터를 추출하여 중앙 데이터 저장소로 저장하는 것