아파치 하둡이란?
- 빅데이터를 저장, 처리, 분석할 수 있는 프레임워크
아파치 하둡은 다양한 에코 시스템 존재
- 회사에서는 하둡 하나만 가져다 쓰는것이 아니라 다양한 소프트웨어 추가적으로 활용
- 예를 들어 HIVE, HBASE, Solr, ...
하둡 등장 계기
- 기존의 구조로는 대용량 데이터 처리할 수 없음 (저장공간, 계산비용 등 ...)
- IBM mainframe과 같은 대형 컴퓨터 시스템은 너무 비쌌다.
- -> 그래서 생각한 것이 "저렴한 PC 여러개를 묶어서 사용하자!"
- 이 아이디어를 구현하기 위해 구글에서 논문을 발표한 것 (아래에서 이어서 설명)
- 이 문제를 해결하기 위해 구글에서 논문 발표
- 저장공간으로는 GFS(Google File System)이라는 것을,
- 계산방법으로는 Map-Reduce라는 것을 소개
- 하지만, 구글에서 이러한 시스템을 오픈소스로 공개하지는 않았음
- 아파치가 GFS, Map-Reduce 방식을 보고 구현한 것이 바로 "아파치 하둡"
전통적인 대용량 계산
- 기존에는 프로세서에 의존적인 수행 ex) IBM mainframe, super computer
- 아주 빠른 프로세서와 아주 큰 메모리가 필요했다
- 이것을 지속적으로 향상하기에는 한계가 존재 : (
분산처리 시스템의 등장
- 하나의 컴퓨터를 크게 만들지 말고, 작은 컴퓨터를 여러개 연결해서 큰 컴퓨터 하나를 만들자 라는 아이디어
- 초기에는 MPI(Message Passing Interface)이용했는데, 프로그래밍이 너무 복잡하다는 문제 존재
- 추가적으로 partial failure에 대한 대처가 부족
- partial failure? 여러개의 컴퓨터 중 일부의 컴퓨터가 고장하는 것
- -> 일부 컴퓨터가 고장나더라도 정상적인 수행이 가능해야 한다
- (참고로, 하둡에서는 3개의 복사본을 유자하여 partial failure 문제를 해결하고자 노력)
하둡의 핵심 컨셉
- high-level 코드로 작성 (네트워크 프로그래밍 몰라도 사용할 수 있도록)
- 각 노드(=컴퓨터)는 가급적 최소한의 데이터만 주고 받음
- 데이터는 여러 노드에 분산되어 저장되어 fault tolerance 구현
- 데이터를 64MB / 128MB 단위의 블록으로 나누어 저장하고, 로드함
- 데이터에 대해 연산을 수행할 때 Map-Reduce(MR) 방식 사용
- Map Task는 하나의 block을 대상으로 수행
- Master 프로그램은 Task들을 관리함
하둡 구성요소
- HDFS (Hadoop Distributed File System)
- 클러스터에 데이터를 저장
- 자바로 작성된 파일 시스템
- 데이터는 블록으로 분할되고, 클러스터의 여러 노드에 분산되어 저장
- 각 블록은 여러 개의 replication 생성하여 사용 (일반적으로 replicaiton은 3개)
- Name Node로 불리는 master node는 어떤 block들이 파일을 구성하고, 어느 위치에 저장되어 있는지 정보를 메타 데이터로 관리
- NameNode의 메타데이터 이용하지 않으면 HDFS에 접근할 수 없음
- 따라서 NameNode는 항상 실행되고 있어야 한다
- MapReduce
- 클러스터의 데이터를 처리
- Map 태스크는 전체 데이터 셋에 대해 별개의 부분에 대한 작업 수행 (HDFS 블록을 대상으로 수행)
- Map단계에서는 흩어져 있는 key, value로 데이터를 묶어준다
- intermediate 데이터를 Reduce phase를 수행할 노드로 분산하여 전송
- key를 중심으로 필터링 및 정렬을 진행
하둡 클러스터
- 하둡 클러스터는 HDFS, MapReduce 사용할 수 있도록 구성된 여러개의 machine을 의미함
- 각각의 개별 machine은 노드
- 하나의 하둡 클러스터는 여러 개의 node로 구성될 수 있다.
HDFS 접근 방법
- 셸 커맨드 라인을 이용 (hadoop fs)
- 자바 API
- Flume, Sqoop, Hue
---
1. 하둡 클러스터는 여러 개의 노드로 이루어져 있다.
2. 각각의 노드에 데이터가 블록 단위로 분산되어 저장된다.
3. 마스터 노드는 어떤 블록들이 파일을 구성하고 있고, 어느 위치에 저장되어 있는지 meta 정보를 관리
'데이터처리 > Pyspark' 카테고리의 다른 글
[pyspark] distinct() vs dropDuplicates() (0) | 2021.05.24 |
---|