Home > 📖 개인 공부 > 🐘 아파치 하둡 > [#3] Apache Hadoop Overview

[#3] Apache Hadoop Overview
Apache Hadoop Study

현재 제가 다니고 있는 회사는 금융 분야에서 빅데이터 솔루션을 개발하는 회사입니다.

회사의 기존 솔루션은 제가 입사하기 전부터 구축되어 현재까지 유지보수가 이루어지고 있으며, Hadoop, Oozie, Impala 등을 중심으로 한 Hadoop 기반 빅데이터 플랫폼입니다.
반면, 제가 직접 개발에 참여하여 만들고 있는 최신 솔루션은 Spark, Object Storage, Apache Iceberg 등을 활용한 클라우드 환경에 최적화된 최신 빅데이터 플랫폼입니다.

두 솔루션은 기술 스택도, 시대적 배경도 다릅니다.
그러나 한 가지 중요한 사실은 변하지 않습니다.
모든 분산 처리와 빅데이터 기술의 출발점은 바로 Hadoop에서 시작되었다는 점입니다.

많은 분들이 Spark, Iceberg, Delta Lake, Kubernetes 기반의 분산 처리 환경 등 “최신 기술”에 집중합니다.
물론 최신 기술을 익히고 적용하는 것은 중요합니다.
하지만, 저는 다음과 같은 질문을 스스로 던져보았습니다.

“과연 이 기술들은 왜 등장했는가?”

단순히 더 빠르고, 더 편리하기 때문이라는 대답으로는 충분하지 않습니다.
기존의 기술들이 가졌던 한계와 문제점이 무엇이었기에, 새로운 엔진과 아키텍처가 필요했던 것인지
그 흐름을 제대로 이해해야만, 단순한 사용자가 아닌 진짜 엔지니어로 성장할 수 있다고 생각했습니다.

Image

그래서 저는 지금, 빅데이터의 시작점이라 생각하는 Hadoop을 공부하고 있습니다.
회사의 과거 솔루션을 제대로 이해하고, 현재 개발 중인 최신 플랫폼의 방향성을 더 깊이 있게 고민하기 위해서이며, 동시에 빅데이터를 처음부터 이해하기 위해서입니다.
그리고 제가 공부한 내용을 추후에 다시 돌아 볼 수 있도록, 그리고 다른 사람들에게도 전달 할 수 있도록 블로그에 발자취를 남깁니다.

그럼 지금부터 Apache Hadoop 에 대하여 알아보도록 하겠습니다.


🐘 1. 빅데이터

🐘 1.1. 전통적인 데이터 처리 방식의 한계


🐘 1.2. Apache Hadoop 의 등장 배경과 필요성


온라인 서비스와 데이터 처리 기술이 발전함에 따라, 기업이나 기관에서 다루는 데이터의 양과 종류도 매우 다양해졌습니다. 기존에는 정형 데이터의 경우 관계형 데이터베이스(RDBMS)를 활용하여 저장하고 관리하는 것이 일반적이었습니다. 그러나 웹 로그와 같은 비정형 데이터의 경우, 데이터의 크기가 매우 크기 때문에 기존 RDBMS에 저장하는 데 어려움이 있습니다. 게다가 이런 비정형 데이터에는 RDBMS가 제공하는 복잡하고 상세한 기능이 꼭 필요하지 않은 경우가 많습니다.

또한 RDBMS는 대개 고성능, 고가의 장비에서 운영되는 경우가 많기 때문에, 자주 사용되지 않는 데이터를 계속 저장하기 위해 RDBMS 인프라를 확장하는 것은 비용적인 부담이 큽니다.

이러한 문제를 해결하기 위해 등장한 것이 바로 하둡(Hadoop)입니다. 하둡은 값비싼 서버가 아닌 일반적인 x86 기반의 리눅스 서버, 즉 범용 서버(commodity server) 에 설치하여 운용할 수 있습니다. 데이터 용량이 증가하더라도 노드를 추가하는 것만으로 확장할 수 있으며, 추가적인 재설치나 복잡한 재구성 작업 없이도 유연하게 확장이 가능합니다.

또한 하둡은 데이터의 복제본을 여러 서버에 분산 저장하기 때문에, 특정 서버에 장애가 발생하거나 데이터가 유실되는 상황에서도 데이터 복구가 가능하다는 장점이 있습니다. 더불어, 데이터가 여러 서버에 분산 저장되어 있기 때문에 데이터 처리 역시 각 서버에서 동시에 수행할 수 있습니다. 이처럼 분산 컴퓨팅 환경에서 데이터를 처리함으로써 기존의 중앙 집중형 방식보다 훨씬 높은 성능을 기대할 수 있습니다.

실제 사례로, 2008년 뉴욕타임즈(New York Times)에서는 약 130년 동안 축적된 1,100만 페이지에 달하는 신문 기사를 PDF로 변환하는 작업을 진행한 바 있습니다. 이 작업을 AWS의 EC2와 S3, 그리고 하둡을 활용해 단 하루 만에 모두 완료할 수 있었고, 당시 소요된 비용은 약 200만 원 정도였습니다. 일반적인 서버 환경에서 병렬처리로 동일한 작업을 수행할 경우 약 14년이 걸렸을 것이라는 점을 고려하면, 하둡과 클라우드 환경이 제공하는 분산 처리의 강력함을 잘 보여주는 사례라 할 수 있습니다.


🐘 2. 분산 컴퓨팅

🐘 2.1. 분산 컴퓨팅 개요


전통적인 데이터 처리의 한계를 알아보았고, Apache Hadoop 이 왜 필요한지를 알게 되었습니다.
이제 하둡에 대해서 알아보아야 하는데, 그 전에 하둡의 근본인 분산 컴퓨팅에 대해서 짧게 짚고 넘어가겠습니다.
분산 컴퓨팅 이론을 알고 하둡을 배우는 것과, 모르고 하둡을 배우는 것은 분명 큰 차이가 있을 것입니다.

분산 컴퓨팅은 다수의 컴퓨터가 공통의 문제를 해결하기 위해 협업하도록 만드는 방법입니다.

❓ Question?
분산 컴퓨팅이랑 병렬 컴퓨팅은 같은 거 아닌가요 ??

분산 컴퓨팅 이야기를 하면, 이처럼 병렬 컴퓨팅과 헷갈려 하는 사람들이 있는데, 둘은 분명 다른 이론입니다.

병렬 컴퓨팅은 하나의 컴퓨터를 여러 자원으로 나누는 방식으로, 큰 작업을 여러 개의 작은 작업으로 나누어 동시에 수행하는 방식입니다. 반면, 분산 컴퓨팅은 여러개의 독립적인 컴퓨터(노드)가 네트워크를 통해 통신하면서 하나의 작업을 협력하여 수행하는 것을 의미합니다.

예시를 들어보면, 병렬 컴퓨팅은 주로 딥러닝 모델을 처리한다거나, AI 모델을 학습 시킬 때 사용됩니다. 하나의 컴퓨터 안에 여러 GPU & CPU 코어를 두고, 같은 메모리에서 데이터를 공유하여 동시에 작업을 진행하는데, 딥러닝으로 이어서 이야기 해보면, 8K 해상도의 아마자룰 한 번에 딥러닝 모델로 처리하기 위해 여러 작은 블록으로 나누고, 그걸 여러 GPU 코어에서 동시에 처리하는 방식이 있습니다.

여기서 중요한건 하나의 컴퓨터 안에서 동작한다는 것이며, 한 개의 작업을 더 빠르게 처리하기 위한 방식이라는 겁니다. 또한 데이터의 이동이 거의 없고 대신 공유 메모리(RAM) 를 활용합니다.

반면 하둡과 같은 분산 컴퓨팅은 대규모 데이터 처리에 적합합니다.
하루에도 수천, 수만가지의 데이터가 생성되는 웹 페이지에서는 해당 데이터를 효율적으로 처리해주어야 합니다. 만약 하나의 컴퓨터에서 그 데이터들을 처리한다면, 그 한 대의 컴퓨터에서 CPU, RAM, 디스크 I/O 등을 모두 감당해야 하며, 네트워크 대역폭도 한계에 도달해서 처리 속도가 급격하게 느려지게 될 겁니다. 그 뿐만 아니라, 분명 한 대의 컴퓨터에 대한 스케일 업은 물리적 한계가 있을 것이고, 무엇보다 이 한 대의 컴퓨터가 망가진다면, 그야말로 복구 불가능한 큰 문제가 생기게 될 것입니다.

하루에도 수억개의 데이터가 오고가는 페이스북을 예시로 들어보면, 내가 올린 게시글이 하루가 지나서야 남들에게 노출된다거나 하는 극단적인 문제가 발생 할 수 있는겁니다.

그렇기 때문에 여러 개의 컴퓨터로 작업을 나누어 병렬로 처리하는 분산 컴퓨팅 방식이 등장했으며, 이를 통해 데이터 처리 속도를 극대화하고, 서버 장애로 인한 데이터 손실 위험을 줄이며, 필요할 때 새로운 서버를 추가해 유연하게 확장할 수 있게 되었습니다.
이러한 분산 환경을 구축하는 대표적인 기술이 바로 하둡(Hadoop)과 같은 분산 컴퓨팅 프레임워크입니다.

구분 병렬 컴퓨팅 (Parallel Computing) 분산 컴퓨팅 (Distributed Computing)
구조 하나의 컴퓨터 내부에서 여러 자원 (GPU, CPU 코어 등) 활용 여러 개의 독립된 컴퓨터(노드)가 네트워크로 연결
작업 방식 하나의 큰 작업을 여러 작은 작업으로 나누어 동시에 처리 여러 노드가 협업하여 하나의 작업을 분산 처리
메모리 공유 메모리 (RAM) 사용 각 노드가 개별 메모리 사용, 데이터는 네트워크로 이동
예시 딥러닝 모델 학습, AI 처리, GPU 병렬 처리 하둡(Hadoop), 스파크(Spark), 페이스북 데이터 처리 등

💡 중요한 점:
병렬 컴퓨팅과 분산 컴퓨팅, 둘은 다릅니다!

🐘 2.2. 분산 컴퓨팅 특징


그럼 분산컴퓨팅의 특징과 이점을 보겠습니다.

Image

1️⃣ 확장성 (Scalability)

✅ 분산 시스템은 워크로드 및 요구 사항에 따라 확장할 수 있습니다. 필요에 따라 분산 컴퓨팅 네트워크에 새 노드, 즉 더 많은 컴퓨팅 디바이스를 추가할 수 있습니다.

예를 들어, 전자상거래 사이트에서 블랙프라이데이 시즌처럼 갑자기 접속자와 주문량이 폭증하는 상황을 생각해 봅시다.
기존의 단일 서버 구조라면, CPU와 RAM 사용량이 폭주하며 사이트가 느려지거나 다운될 수 있습니다.
하지만 분산 시스템에서는 간단히 새로운 서버 노드 몇 대를 더 추가해주면 시스템이 자동으로 이를 인식하고 부하를 분산시킵니다.
이 덕분에 유연하고 손쉽게 확장이 가능합니다.

2️⃣ 가용성 (Availability)

✅ 컴퓨터 중 하나가 작동하지 않더라도 분산 컴퓨팅 시스템은 정상적으로 작동합니다. 개별 컴퓨터에 장애가 발생하더라도 계속 작동할 수 있으므로, 설계부터 내결함성이 보장됩니다.

구글 검색 엔진을 예로 들어봅시다.
구글은 전 세계에 걸쳐 수많은 서버가 존재하는데, 하루에도 일부 서버가 다운되거나 장애가 발생하는 건 흔한 일입니다.
하지만 우리는 구글 검색을 사용할 때 “서버가 다운됐습니다”라는 메시지를 본 적이 거의 없죠?
그 이유가 바로 분산 시스템의 가용성 덕분입니다.
특정 서버가 고장 나도, 다른 서버들이 그 역할을 대신하면서 시스템 전체가 끊기지 않고 정상적으로 동작할 수 있게 되어 있습니다.

3️⃣ 일관성 (Consistency)

✅ 분산 시스템의 여러 컴퓨터는 정보와 중복 데이터를 공유하지만, 이 시스템은 모든 컴퓨터에 걸쳐 자동으로 데이터 일관성을 관리합니다. 따라서 데이터 일관성을 유지하면서 내결함성의 이점을 누릴 수 있습니다.

인터넷 뱅킹을 이용해서 A 계좌에서 B 계좌로 100만 원을 이체했다고 가정해봅시다.
이 작업이 처리되는 도중, 일부 서버가 장애가 발생한다고 해도, 분산 시스템은 반드시 모든 서버에 동일하게 A 계좌는 100만 원이 빠지고, B 계좌는 100만 원이 입금된다는 사실을 맞춰줍니다.
정확히 반영되지 않는다면, 큰 사고로 이어질 수 있는 중요한 작업에서는 반드시 데이터 일관성이 보장되어야 하며, 분산 시스템은 이를 효과적으로 관리합니다.

4️⃣ 투명성 (Transparency)

✅ 분산 컴퓨팅 시스템은 사용자와 물리적 디바이스를 논리적으로 분리합니다. 개별 시스템의 설정 및 구성에 대한 걱정 없이 마치 단일 컴퓨터인 것처럼 시스템과 상호 작용할 수 있습니다. 여러 하드웨어, 미들웨어, 소프트웨어 및 운영 체제를 함께 사용하더라도 시스템이 원활하게 작동할 수 있습니다.

대표적인 예로 클라우드 서비스 (AWS, GCP, Azure)를 들 수 있습니다.
사용자는 AWS S3에 파일을 업로드하거나, RDS에서 데이터베이스 쿼리를 날릴 때, 그 뒤에 어떤 수십, 수백 대의 물리 서버가 돌아가는지, 운영체제가 뭔지 신경 쓰지 않습니다.
마치 하나의 거대한 시스템처럼 느끼면서도, 실제로는 수많은 서버들이 네트워크 상에서 복잡하게 협업하고 있는 거죠.

5️⃣ 효율성 (Efficiency)

✅ 분산 시스템은 기반 하드웨어의 리소스 사용을 최적화화여 더 빠른 성능을 제공합니다. 따라서 볼륨 급증으로 인한 시스템 장애나 고가의 하드웨어의 낮은 활용도에 대한 걱정 없이 모든 워크로드를 관리할 수 있습니다.

예시로 넷플릭스의 경우를 보겠습니다.
넷플릭스는 전 세계 사용자들에게 영화를 스트리밍하는데, 특정 지역에서 특정 시간대에 트래픽이 집중되더라도 그 지역의 분산 서버들이 최적의 리소스를 사용하여 가장 가까운 서버에서 빠르게 영상 데이터를 전송합니다.
중앙 집중식으로 하나의 서버에서 전 세계에 데이터를 보낸다면, 네트워크 병목, 서버 부하가 심각해질 겁니다.
하지만 분산 시스템 덕분에 각 노드가 상황에 맞춰 자원을 최적화해 사용하여 효율적이고 빠른 서비스 제공이 가능해집니다.

분산 컴퓨팅에는 이렇게 다섯 가지의 큰 장점이 있다고 볼 수 있겠습니다.

🐘 2.3. CAP 이론


CAP 이론은 분산 컴퓨팅, 분산 스토리지와 관련 된 공부를 할 때 꼭 알아야 하는 기초 이론 중 하나입니다.

분산 컴퓨팅 환경은 여러 개의 물리적인 노드들이 네트워크를 통해 연결되어 하나의 시스템을 구성합니다. 이 과정에서 각 노드들은 서로 통신하고 싱크를 맞추며 동작하는데, 이를 통해 시스템은 수평 확장이 가능하고 비용 효율을 높이며, fault tolerance를 확보할 수 있습니다. 하지만 물리적으로 분리된 여러 노드가 동작하는 환경에서는 불가피하게 한계점이 존재할 수 있습니다.

CAP 이론은 이러한 분산 환경에서 시스템의 특성을 세 가지로 나누어 설명합니다. 이 이론의 핵심은, 분산 시스템이 세 가지 속성인 Consistency(일관성), Availability(가용성), Partition Tolerance(분할 허용성) 중에서 모든 속성을 동시에 만족할 수 없다는 것입니다. 따라서 시스템을 구축할 때는 이 세 가지 속성 중 두 가지에 집중해야 하며, 이를 선택하는 것이 시스템 설계에서 중요한 요소가 됩니다.

💡 중요한 점:
CAP 이론에서는 세가지 속성을 모두 만족시킬 수 없고, 반드시 셋 중 두 가지를 선택해야 합니다.



CAP 를 각각 나눠서 보겠습니다.
아래는 먼저 표로 보여드리겠습니다.

속성 설명
C (Consistency) 일관성, 모든 노드에서 동일한 데이터 보장
A (Availability) 가용성, 하나 이상의 노드가 작동을 멈춰도 응답 받을 수 있음을 보장
P (Partition Tolerance) 분할 허용성, 네트워크 장애가 발생해도 시스템이 계속 동작할 수 있음을 보장 (서버 랙 등)

좀 더 풀어서 설명해보겠습니다.

Consistency(일관성) :
클러스터 내 모든 노드가 동일한 데이터를 보유하고 있음을 의미합니다. 이를 만족하기 위해서는, 특정 노드에 데이터가 기록될 때 해당 데이터가 클러스터의 모든 노드로 즉시 복제되어야 합니다. 즉, 트랜잭션이 완료되기 전까지 모든 노드에 데이터 전파가 완료되어야 일관성이 보장됩니다.
일관성이 유지되는 경우, 클러스터 내 어떤 노드에 접근하더라도 항상 동일한 데이터를 조회할 수 있으며, 데이터의 정확성과 신뢰성을 확보할 수 있습니다.

단, 동시에 여러개의 노드가 돌아가기 때문에, Replication Lag 이 발생 할 수 밖에 없고, 따라서 완전 똑같은 시간에 모든 노드들이 같은 데이터를 가지는 건 불가능합니다. 그래서, 정확히는 “동시라고 느낄만큼”의 시간 차이로 일관성을 유지하게 됩니다.

Availability(가용성) :
요청에 대해서 항상 응답을 받을 수 있어야 함을 의미합니다.
쉽게 말하면, 하나 이상의 노드가 작동을 멈추더라도, 다른 노드를 통하여 응답을 받을 수 있어야 함을 이야기합니다.

Partition Tolerance(분할 허용성) :
분할 허용성은 CAP 이론을 처음 접해 본 사람이라면 제일 와닿지 않은 부분이라고 할 수 있습니다.
설명하자면, 분산 시스템에서 네트워크 장애로 인해 노드 간에 연결이 단절되는 등의 이유로 Network Partition 이 발생해도 시스템이 게속 동작해야 함을 의미합니다.
이 때 중요한 것은, Network Partiton 으로 인해 data 의 일관성이 깨지는 등의 문제가 발생하여도, 그것이 정상처리 될 수 있는 방안을 가지고 있어야 한다는 것입니다.
사실 분산 컴퓨팅을 구현하기 위해서는 네트워크 장애에 대한 해결책을 반드시 고려해야 합니다.
그래서, CAP 이론에서 세 가지를 전부 만족 시킬 수 없기에, 두 가지를 선택한다고 하는데, 사실 P는 무조건적으로 들어가게 됩니다.

💡 Network Partition ??
분산 시스템에서 노드 간의 네트워크 연결이 끊켜 서로 통신할 수 없는 상태가 되는 것.
대표적인 예시로 Split-Brain 가 있음.

💡 Split-Brain ??
{A,B,C,D,E} 노드들이 하나의 클러스터를 이루고 있다가, 네트워크 문제로 인해, {A,B} {C,D,E} 이렇게 복수의 그룹으로 나뉘어 지고, 각 파티션 그룹이 서로가 서로를 Primary 라 생각하며 이중으로 클러스터가 실행되게 되는 문제를 이야기함.
이 때, WRITE 시 한 노드에서만 작업이 수행되어, 다른 그룹에 데이터를 동기화 하지 못하고, 추후 노드간의 통신이 정상화 됐을때 data간의 충돌이 발생해 inconsistent 한 상태가 될 수 있음.
분산 시스템에서 노드끼리 통신 할 때 timeout 이 발생하는 경우도 network partition 에 해당함.

🐘 3. Apache Hadoop

🐘 3.1. Apahce Hadoop 의 개념


🐘 3.2. Apache Hadoop 아키텍처


🐘 3.3. Hadoop Version 별 특징