-
하둡이란? (Apache Hadoop)Data 2021. 1. 15. 08:25반응형
빅데이터와 관련해 자주 언급되는 것이 바로 하둡(Hadoop)입니다. 정확히는 아파치 하둡 프로젝트인 이 '하둡'은 '하둡 환경'을 중심으로 많은 프로젝트가 진행되면서 구분이 모호해지는 경우가 많은 듯 합니다.
이번 글에서는 아파치 하둡이 무엇이고, 구성하는 모듈은 어떤 것이 있으며 어떤 특성을 지니는지 알아보겠습니다.
관련글:
하둡과 하둡이 탄생한 배경
아파치 하둡은 오픈소스이며, 안정적이고 확장성있는 분산 컴퓨팅을 위한 프로젝트로 여러 소프트웨어 묶음을 말합니다. 프로젝트의 목적이 단순한 모델을 통해 수많은 컴퓨터로 이루어진 클러스터 환경에서 대량의 데이터를 처리할 수 있도록 하는 데에 있습니다 [1].
그렇다면 하둡 탄생(2006년) 이전에는 다른 도구가 없었을까요?
하둡 탄생 이전에도 데이터로 분석, 추천과 같은 서비스를 하고자 하는 기업의 니즈가 커지면서, 데이터 사이즈는 점점 커져왔습니다. 수십 테라에서 페타 단위로 증가하면서, 한 노드에서 연산하는 것으로는 너무 오래걸렸는데요. 그렇기에 기존의 데이터베이스와 유사한 방식이나 분산의 개념을 추가한 형태로 구현된 'Appliances'라는 도구들이 탄생하게 되었습니다.
하지만, 그러한 도구들도 많은 한계를 가지고 있었습니다. 당시 분산시스템 설계에 대한 산업의 이해도가 높지 않아 잦은 '노드 실패'가 발생하였습니다. 그러한 노드 실패는 빈번하였기에 하드웨어적으로 노드 실패에도 회복할 수 있도록 백업 장비가 많이 추가되었습니다. 그렇기에 고비용의 하드웨어를 요구하였습니다. 그래서 구글을 포함한 많은 기업들은 이와 같은 문제점을 해결하기 위해서, '소프트웨어가 노드 실패를 극복할 수 있도록'하는 다양한 분산 시스템을 개발하기 위해 노력했습니다.
2003 년의 구글파일시스템(GFS) 문서[3]를 보고 야후에서 근무하던 Doug Cutting이 자신의 아들이 좋아하던 코끼리 인형의 이름인 Hadoop을 따서 Apache Nutch라는 기존의 프로젝트를 이전하며 하둡이라는 이름을 붙였습니다(2006년) [2]. 그러한 '하둡'이라는 프로젝트 하위의 여러 소프트웨어들은 '모듈'이라는 이름으로 불리며 아래와 같은 것들이 존재합니다:
- Hadoop Common: 공통으로 사용되는 라이브러리
- Hadoop Distributed File System(HDFS): 분산파일시스템
- Hadoop YARN (Yet Another Resource Negotiator, 2012년 추가-beta): 분산자원관리
- Hadoop MapReduce: 분산처리엔진
- Hadoop Ozone (2020년 추가): 분산 오브젝트 스토어
그러한 모듈들의 타임라인은 아래와 같습니다 [6]:
모듈을 살펴보기 전에, 한 가지 더 언급할 사항은 '하둡 환경', '하둡에코시스템' 또는 '빅데이터 환경'과 같은 이름으로 자주 보게되는 아래와 같은 이미지에 관련한 부분입니다:
위와 같은 다양한 프로젝트의 조합들이 대부분 위에서 언급된 하둡 모듈들을 중심으로 발전해 왔기에, '하둡 환경' 또는 '하둡 에코 시스템' 등으로 불립니다. 데이터의 수집, 저장, 처리, 사용과 각 단계의 관리 등 넓은 범위에 많은 요구사항이 발생하며 다양한 프로젝트들이 보완하고 대체하며 발전해왔기에 이러한 환경을 만들어 왔습니다 (참고 - 주요 IT 기업의 모던 데이터 시스템).
하둡을 구성하는 모듈들
하둡은 위와 같이 현재(2021.01) 5개의 모듈로 구성되어 있습니다. 하둡 이전의 시기에도 ETL(Extract, Transform, Load)라는 단어가 자주 사용되며 데이터 가공을 하는 무거운 작업들은 데이터 웨어하우스 외부에서 실행하고, 데이터 웨어하우스는 오로지 분석(가공과 비교해 '가벼운' 작업이 주를 이룸)을 위해 남겨두자는 관점이 많았습니다.
또한, 분산시스템에 대한 성숙도가 높아져가며 '스토리지와 컴퓨팅의 분리'와 같은 분산시스템 설계 측면의 스탠다드도 정립되어갔습니다.
2006년 하둡은 분산파일시스템과 분산처리엔진 모듈로 시작하였습니다. 당시 맵리듀스는 분산자원관리(JobTracker) 역할과 분산처리엔진(TaskTracker) 역할을 모두 담당하고 있었습니다. 하지만 아래와 같은 문제점을 가지고 있었습니다 [4]:
- 맵리듀스가 아닌 형태의 워크로드를 지원하지 않음: 맵리듀스는 분산환경에서 뛰어난 데이터 처리 기능을 제공하였지만 모든 것을 제공해주지는 않았습니다. 예로, 그래프 프로세싱과 같은 경우 다른 프로젝트에서 많은 기능을 제공하였는데요. 또한, 배치 형태 뿐만이 아니라 실시간 처리에 대한 요구도 커지고 있었고 그러한 기능은 당시 맵리듀스의 JobTracker 구조 상 지원이 불가능하였습니다.
- 낮은 클러스터 리소스 사용률: JobTracker는 맵리듀스를 이루는 맵과 리듀스를 위한 공간(slot)이 고정되어 있는 것으로 설계되었습니다. 보통 데이터 처리에서 맵이 진행되고 그 다음 리듀스가 진행되게 되는데, 그렇기에 맵리듀스는 맵을 할 때는 맵 slot이 있는 노드만 사용하고, 리듀스를 할 때는 리듀스 slot이 있는 노드만 사용하여 낮은 리소스 사용률을 보였습니다. 하지만, CPU와 메모리로 구성된 똑같은 노드이기에 설계가 개선된다면 충분히 사용률을 높일 수 있는 부분이었습니다.
위의 문제점을 해결하고자 YARN 2012년 기존 맵리듀스의 JobTracker 역할을 대체하며 하둡 프로젝트에 추가(beta)되었습니다. 그렇게 현재까지 이어지는 분산파일시스템(HDFS), 분산자원관리(YARN), 분산처리엔진(MapReduce)의 구조를 가지게 되었습니다.
위의 각 모듈의 기능과 관련해 데이터 시스템이 고도화 되면서 특정 목적에는 더욱 개선된 대안들이 탄생하였습니다:
- 분산파일시스템 [5]: GlusterFS, S3 등 (일부 기능이 조금씩 다르나 원하는 요구사항에 맞다면 대체 사용이 가능)
- 분산자원관리: Apache Mesos, Kubernetes
- 분산처리엔진: Apache Tez, Apache Spark 등
각 모듈에 대한 상세한 사항은 아래의 글에 작성해두었습니다:
Reference
[2] en.wikipedia.org/wiki/Apache_Hadoop
[4] Apache Hadoop Yarn - Background and an Overview
[5] en.wikipedia.org/wiki/Comparison_of_distributed_file_systems
반응형'Data' 카테고리의 다른 글
HDFS(하둡분산파일시스템) 읽기, 쓰기, 삭제 시의 Flow 살펴보기 (0) 2021.01.20 HDFS(하둡분산파일시스템) 주요 개념 및 아키텍쳐 (0) 2021.01.20 YARN이란? (하둡분산자원관리) (0) 2021.01.19 HDFS란? (하둡분산파일시스템) (0) 2021.01.16 데이터 엔지니어 역량 (feat. 구인구직사이트 자격요건) (0) 2021.01.06 데이터 엔지니어의 업무범위(하는 일) (0) 2021.01.06 기업 내의 데이터 환경은 어떤 모습인가: 데이터 생성과 소비 (0) 2021.01.03 '데이터 엔지니어'라는 직무는 어떻게 탄생되었나: 요구사항과 도구들 (0) 2021.01.03