티스토리 뷰
1. Hadoop의 개념과 아키텍쳐
[ Hadoop이란? ]
Hadoop은 Reliable, Scalable하게 분산 처리를 하기 위한 오픈 소스 소프트웨어이다. Hadoop은 Map-Reduce라는 단순한 데이터 처리 모델을 사용함으로써 여러 대의 컴퓨터를 통해 손쉽게 대규모 데이터를 처리하고자 한다. 하둡은 분산 파일 시스템인 HDFS(Hadoop Distributed File System)에 데이터를 저장하여 처리한다. (이러한 방식은 Disk I/O에 의해 성능 저하를 유발하며, 추후에 In-Memory 방식으로 처리하는 Spark가 등장하게 되었다.)
[ Multi-Layer 구조 ]
Hadoop에서 수행하는 역할은 크게 HDFS에 파일을 저장하는 역할과 데이터를 처리하는 역할로 나누어진다. 그리고 이에 맞게 Layer가 다음과 같이 나누어 설계되었다.
- MapReduce Layer: MapReduce를 수행하기 위한 Layer
- Job Tracker: 사용자로부터 Job을 요청 받고 Task Tracker에 작업 할당
- Task Tracker: Job Tracker로부터 할당 받은 작업을 Map-Reduce하여 결과 반환
- HDFS Layer: 파일을 저장하기 위한 Layer
- Name Node: 작업을 해야 하는 파일을 Block으로 나누어 Data Node에 전달
- Data Node: 전달받은 파일의 읽기/쓰기 등을 실제로 수행
[ Master-Slave 구조 ]
Hadoop은 기본적으로 Master-Slave 구조를 지니며, Master 노드는 1대의 노드로 구성된다.
- Master Node: DFS(Distrbuted File System, 분산 파일 시스템)에 대한 정보들을 지니고 있으며, 자원 할당을 조절한다. Master Node는 2가지 Daemon을 통해 이를 처리한다.
- Name Node: DFS를 관리하고, 어떤 Data Block이 클러스터에 저장되어 있는지 알려준다.
- Resource Manager: 스케줄링 및 Slave Node의 처리를 실행한다.
- Slave Node는 실제 데이터를 가지고 있으며, job을 수행하는데 Data Node와 Node Manager를 통해 이를 처리한다.
- Data Node: NameNode에 물리적으로 저장된 실제 데이터를 관리한다.
- NodeManager: 노드의 Task를 실행한다.
[ Block의 저장 ]
앞서 Hadoop은 분산 파일 시스템인 HDFS(Hadoop Distributed File System)에 데이터를 저장하여 처리한다고 설명하였다. Hadoop은 파일을 Block(블록)이라는 단위로 나누어 관리하는데, 1개의 파일은 여러 개의 블록으로 나뉘어 여러 Node에 Replication(복제)된다.
이러한 이유는 노드의 Failure를 극복하기 위함인데, 예를 들어 1번 Node에만 Block 1이 저장되었다고 할 때, Node1이 고장나면 Node1에 저장된 Block1을 구할 수 없다. 하지만 Block1을 Node2에도 복제하면 Node1이 작동하지 않을 때에도 Node2로부터 Block1에 대한 정보를 얻을 수 있다. 이러한 Node Failure에 대응하기 위해 Hadoop은 하나의 블록을 여러 개의 Node에 복제하고 있다.
그리고 이러한 Block의 저장은 NameNode와 DataNode에 의해 처리되는데, NameNode가 저장할 Block을 특정 Node에 저장하라고 명령을 전달하면, 노드의 DataNode는 전달 받은 블록을 자신의 Node에 저장한다.
2. Hadoop의 MapReduce
[ MapReduce란? ]
MapReduce란 대용량의 데이터를 분산/병렬 컴퓨팅 환경에서 처리하기 위해 제작된 데이터 처리 모델이다. 큰 데이터가 들어왔을 때, 데이터를 특정 크기의 블록으로 나누고 각 블록에 대해 Map Task와 Reduce Task를 수행한다.
Map Task와 Reduce Task는 입력과 출력으로 Key-Value 구조를 사용한다. Map은 처리한 데이터를 (Key, Value)의 형태로 묶는 작업을 의미한다. Map에서는 묶은 (Key, Value) 형태의 데이터들을 List의 형태로 반환한다. Reduce는 Map으로 처리한 데이터에서 중복된 key 값을 지니는 데이터를 제거하여 합치고, 원하는 데이터를 추출하는 작업을 수행한다.
[ MapReduce 처리 과정 ]
예를 들어 위와 같은 텍스트 파일에서 단어의 개수를 count하는 문제(WordCount)를 해결한다고 할 때, 해당 과정은 아래의 순서로 수행된다.
- 단어의 개수를 세기 위한 텍스트 파일들을 HDFS에 업로드하고, 각각의 파일은 블록단위로 나누어 저장된다.
- 순차적으로 블록을 입력으로 받는데, Spitting 과정을 통해 블록 안의 텍스트 파일을 한 줄로 분할한다.
- line을 공백 기준으로 분리하고, Map(line_num, line) 연산을 통해 (vocabulary, 1개)의 리스트를 반환한다.
- Shuffling 과정을 통해 연관성있는 데이터들끼리 모아 정렬한다.
- Reduce(단어, 개수)를 수행하여 각 블록에서 특정 단어가 몇번 나왔는지를 계산한다.
- 이후에 결과를 합산하여 HDFS에 파일로 결과를 저장한다.
[ MapReduce의 제어 ]
Map Task와 Reduce Task는 Master Node에 존재하는 Job Tracker에 의해 제어된다.
- Client는 Job(데이터, Map Reduce 프로그램, 설정 정보 등)을 Job Tracker에게 보낸다.
- Job Tracker는 Task Tracker들에게 Map Task와 Reduce Task를 할당한다.
- Task Tracker는 할당받은 Map Task와 Reduce Task를 인스턴스화 하여 Task를 수행하며 진행 상황을 Job Tracker에게 보고한다.
'나의 공부방' 카테고리의 다른 글
[개발서적] 이펙티브 자바(Effective Java) 핵심 요약 및 정리 (20) | 2021.03.05 |
---|---|
[개발서적] 클린 코드(Clean Code) 핵심 요약 및 정리 (10) | 2021.03.05 |
[Spark] Apache Spark란? (4) | 2021.02.03 |
[Hadoop] YARN의 구조와 동작 방식 (6) | 2021.02.02 |
[Frontend] VueJS 프로젝트 생성 및 설정하기 (0) | 2021.02.01 |