대용량 분산 시스템
- 분산 환경 기반 (1대 혹은 그 이상의 서버로 구성)
- 분산 파일 시스템과 분산 컴퓨팅 시스템이 필요
- Fault Tolerance
- 소수의 서버가 고장나도 동작해야함
- 확장이 용이해야함
- 즉, Scale Out이 되어야함
Hadoop(하둡)
- Doug Cutting이 구글랩 발표 논문들에 기반해 만든 오픈소스 프로젝트
- 2003년 The Google File System
- 2004년 MapReduce: Simplified Data Processing on Large Cluster
- 처음 시작은 Nutch라는 오픈소스 검색엔진의 하부 프로젝트
- 하둡은 Doug Cutting의 아들의 코끼리 인형의 이름
- 2006년에 아파치 톱레벨 별개 프로젝트로 떨어져나옴
하둡의 정의
- An open source software platform for distributed storage and distributed processing of very large data sets on computer clusters built from commodity hardware
- 즉, distributed storage (분산 파일 시스템인 HDFS)과 distributed processing(분산 컴퓨팅 시스템인 MapReduce)로 구성된 대용량의 데이터를 처리할 수 있는 시스템
- 다수의 노드로 구성된 클러스터 시스템 (Cluster)
- 하나의 거대한 컴퓨터처럼 동작
- 실제로는 다수의 컴퓨터들이 복잡한 소프트웨어로 통제됨
하둡 1.0
- 하둡 1.0은 HDFS위에서 MapReduce라는 분산컴퓨팅 시스템이 실행되는 구조
- MapReduce 위에서 다양한 컴퓨팅 언어들이 만들어짐
- Pig(피그), Hive(하이브), Presto(프레스토) 등
MapReduce(맵리듀스)
- 하둡1.0에서 처음 소개된 분산컴퓨팅시스템
- 다수의 TaskTracker와 하나의 JobTacker(마스터)로 구성
- 실제 코드는 TaskTracker 에서 실행되지만 일을 나눠주는 역할은 JobTacker가함
- 즉, JobTacker가 일을 나눠서 다수의 TaskTracker에게 분배하고 TaskTracker에서 병렬처리
- 이 구조는 HDFS와 동일
- 따라서 Slave 노드에 TaskTracker와 DataNode의 두가지 소프트웨어가 설치되어 있는것이 일반적임
- 즉 데이터 파일 시스템, 처리시스템 역할 둘다 함
- 마스터는 보통 여유가 된다면 별도의 서버로 구성 (JobTacker와 NameNode는 서버를 분리)
- 맵리듀스만 지원하기에 제너럴한 시스템이 아니라서 하이브나, 프레스토 피그등을 사용하게 됨
- 따라서 하둡 2.0부터 구조가 크게 달라짐
CF) MapReduce에 대하여 : https://ysyblog.tistory.com/347
HDFS (분산 파일 시스템)
- 블록단위 저장 : 데이터를 블록단위로 나눠 저장
- 블록의 크기는 128 MB (디폴트)
- 블록 복제 방식 (Replication)
- 각 블록은 3 군데에 중복 저장됨
- Fault tolerance를 보장할 수 있는 방식으로 이 블록들은 저장됨
- 데이터 파일 시스템은 DataNode와 NameNode(Master Node)로 구성
- DataNode : 각 서버에 데이터가 저장
- NameNode : 어떤 파일이 어떤 데이터노드에 있는지의 정보를 가지고 있음
맵리듀스의 단점과 하둡 1.0의 문제
- map과 reduce만 제공
- 프로그래밍이 어려워서 생산성이 떨어짐
- 따라서 데이터처리를 쉽게 하기 위해 사용하기 쉬운 형태의 프레임워크인 피그, 하이브, 프레스토 등이 만들어짐
- Pig(피그) : 판다스 데이터프레임과 비슷하지만 문법이 직관적이지 않아서 더이상 잘 안쓰임
- Hive(하이브), Presto(프레스토) : SQL과 같이 구조화하기 쉽게 만들어놓음
- 이러한 맵리듀스의 한계로 맵리듀스의 생산성이 급감
- 따라서 맵리듀스 대신에 조금더 일반적인 분산처리 시스템을 만드는 니즈가 생김
하둡 2.0
- 아키텍쳐가 하둡1.0에 비해 많이 바뀜
- HDFS2 : HDFS보다 신뢰성이나 견고성이 개선되지만 기본적인 포멧은 비슷
- YARN : 분상 컴퓨팅 시스템 이름이며 Mapreduce 전에 구현됨.
- 하둡은 YARN이란 이름의 분산처리 시스템위에서 동작하는 애플리케이션이 됨
- 하이브 프레스토 등은 맵리듀스에서 바로 돌아갈 수 있고 yarn에서도 바로 돌아갈 수 있음
- Spark은 YARN위에서 애플리케이션 레이어로 실행됨 (Yarn이 나오면서 만들어짐)
HDFS2의 Name Node 이중화 지원
- 데이터 노드가 고장이 나면, 다른 데이터 노드에 저장된 같은 데이터 블록을 가져올수 있게 함
- 데이터 노드가 다 살아있어도 네임노드가 동작을 안하면 다같이 눕게 됨
- 따라서 네임노드 이중화가 중요
- 1.0에서는 세컨더리 네임노드라는 것이 있었음 (네임노드의 내용을 주기적으로 복제)
- 문제는 네임노드가 다운 되었을때 자동으로 세건더리가 메인노드를 대신하는것이 아닌, 사람이 직접 세건더리로 메인노드를 만들어야하는 작업을 해야함
- 2.0에서는 변경 -> 네임노드를 이중화해서 Active & Standby 를 만듬
- 액티브에 문제가 생기면 스텐바이 네임노드가 자동으로 네임노느 역할을 하게 함
- 둘 사이에 share edit log가 존재
- 여전히 세컨더리 네임노드도 존재
하둡 1.0과 하둡 2.0 차이점
하둡 3.0
- YARN 2.0을 사용
- YARN 프로그램들의 논리적인 그룹(플로우라고 부름)으로 나눠서 자원 관리가 가능.
- 같은 플로우에 속한 Yarn Application들이 얼마나 자원을 쓰고 있는지 확인하고, 그 안에서 자원이 분배될 수 있도록 함
- Yarn이 다용도로 사용될 때, 비슷한 목적을 가진 Application들이 리소스를 공유할 수 있게 함.
- 이를 통해 데이터 수집 프로세스와 데이터 서빙 프로세스를 나눠서 관리 가능
- 타임라인 서버에서 HBase를 기본 스토리지로 사용 (하둡 2.1)
- 타임라인 서버 : Yarn에서 발생한 다양한 event를 기록
- 파일 시스템
- 내임노드의 경우 다수의 스탠바이 내임노드를 지원
- 하둡 2.0은 한대의 스탠바이 내임노드만 지원했지만 3.0에서는 다수를 지원
- HDFS, S3, Azure Storage 이외에도 Azure Data Lake Storage 등을 지원
- 내임노드의 경우 다수의 스탠바이 내임노드를 지원
위 포스팅은 [파이썬으로 해보는 Spark 프로그래밍 with 프로그래머스] 강의를 참고하여 정리하였습니다.
728x90
반응형
'Spark & Hadoop > Hadoop' 카테고리의 다른 글
[Hadoop/Spark] YARN의 구성요소와 작동방식 (0) | 2024.05.05 |
---|---|
[Hadoop] 맵리듀스 프로그래밍 실행 (WordCount) (0) | 2023.08.20 |
[Hadoop] 하둡(Hadoop) 설치 (on Ubuntu) (0) | 2023.08.14 |
[Hadoop] Windows에서 우분투 설치 (Ubuntu on WSL2) (Ubuntu 설치시 Error 해결) (0) | 2023.08.10 |
[Hadoop] 맵리듀스(MapReduce) Programming (0) | 2023.08.09 |