본문 바로가기
Quality control (Univ. Study)/Database Design

Big data

by 생각하는 이상훈 2023. 12. 6.
728x90

Big data

빅 데이터란 기존 데이터베이스 관리도구의 능력을 넘어서는 대량(수십 테라바이트)의 정형 또는 심지어 데이터베이스 형태가 아닌 비정형의 데이터 집합조차 포함한 데이터로부터 가치를 추출하고 결과를 분석하는 기술이다. 즉, 데이터 베이스 등 기존의 데이터 처리 응용 소프트웨어(data-processing application software)로는 수집 · 저장 · 분석 · 처리하기 어려울 정도로 방대한 양의 데이터를 의미한다.

 

빅데이터의 특징은 아래의 3Vs로 설명이 되었었다.
- Volume: 데이터의 크기
- Velocity: 데이터의 생성/처리 속도
- Variety: 데이터의 다양성 (Structured, Semi-structured, Unstructured)

 

최근들어 5Vs까지 확장되었다.
- Veracity: 데이터의 정확성, 불확실성, Noise, 오류 

- Value: 데이터의 가치


Database

데이터베이스는 두가지 방식으로 작업이 진행된다.

OLTP는 주로 데이터의 일상적인 관리와 트랜잭션 처리에 초점을 맞춘다. 예를 들어, 은행 거래, 온라인 주문 처리와 같은 작업이 이에 해당한다. OLAP는 분석과 의사결정을 지원하기 위해 설계되었다. 대량의 데이터를 분석하여 트렌드를 파악하거나, 예측 분석을 수행하는데 사용된다.


Data Lake vs Data Warehouse

Data Lake는 구조화되지 않은, 반구조화된, 구조화된 데이터를 모두 저장할 수 있는 매우 광범위한 데이터 저장소이다. 데이터는 원본 형식으로 저장되며, 필요에 따라 분석 및 처리가 이루어진다. Data Lake는 다양한 특징이 있는데 다양한 형태의 데이터(텍스트, 이미지, 로그 파일 등)를 저장할 수 있는 유연성, 대용량의 데이터를 저장하고 관리할 수 있는 능력을 갖추고 있는 확장성, 데이터가 원본 형태로 보존되어, 미래의 분석 요구사항에 대응할 수 있는 원시 데이터 보존성등이 있다. 빅데이터 분석, 실시간 데이터 처리, 기계 학습 등에서 사용된다.

Data Warehouse는 구조화된 데이터를 위한 중앙 집중형 저장소이다. 주로 비즈니스 인텔리전스, 보고, 분석 등에 사용된다. 특징으로는 데이터가 일반적으로 잘 정의된 스키마에 따라 저장되어 정규화된 데이터라는 점, 복잡한 쿼리 및 분석 작업을 효율적으로 처리하기 위해 최적화된 쿼리 성능을 추구한다는 점, 엄격한 데이터 품질 및 무결성 기준을 준수한다는 특징도 있다. 비즈니스 데이터 분석, 관리 보고서 작성 등에서 사용된다.

 

추가적으로 관리 및 유지보수가 제대로 이루어지지 않는 Data Lake를 Data Swamp라고 지칭한다. 적절하지 않은 데이터 관리로 인해 데이터의 품질이 떨어지고, 데이터의 검색 및 활용이 어려워진 상태를 말한다. 구조화되지 않고, 관리되지 않는 데이터로 가득 차 있는 저품질의 데이터를 갖고 있다. 데이터가 잘 조직되지 않아 필요한 정보를 찾기 어렵고 데이터 거버넌스 및 품질 관리 부재로 인해 좋지 않은 데이터 베이스이다.


Apache Hadoop

하둡은 2006년 야후의 더그 커팅이 '넛치'라는 검색엔진을 개발하는 과정에서 대용량의 비정형 데이터를 기존의 RDB 기술로는 처리가 힘들다는 것을 깨닫고, 새로운 기술을 찾는 중 구글에서 발표한 GFS와 MapReduce 관련 논문을 참고하여 개발하였다. 이후 아파치 재단의 오픈 소스로 공개 되었다.

하둡은 하나의 성능 좋은 컴퓨터를 이용하여 데이터를 처리하는 대신, 적당한 성능의 범용 컴퓨터 여러 대를 클러스터화하고, 큰 크기의 데이터를 클러스터에서 병렬로 동시에 처리하여 처리 속도를 높이는 것을 목적으로 하는 분산처리를 위한 오픈소스 프레임워크라고 할 수 있다. 현재는 사실상 Big Data 플랫폼의 표준이라고 볼 수 있다.

 

아래는 Hadoop ecosystem으로 Hadoop 핵심 구성요소와 이를 보완하는 다양한 도구 및 기술로 구성되어 있다. 이러한 도구와 기술들은 서로 상호작용하며 대규모 데이터 세트의 처리와 분석을 가능하게 한다.

Hadoop ecosystem의 핵심 구성요소들을 살펴보자.

Hadoop Distributed File System (HDFS): 대규모 데이터 세트를 클러스터 내의 여러 노드에 걸쳐 분산시켜 저장하는 파일 시스템이다. 높은 처리량과 데이터 가용성을 제공한다. 

MapReduce: 대용량 데이터 세트에 대해 병렬 처리를 가능하게 하는 프로그래밍 모델이다. 데이터는 Map(매핑) 단계와 Reduce(리듀스) 단계를 거쳐 처리된다. 

YARN (Yet Another Resource Negotiator): 클러스터의 자원 관리와 작업 스케줄링을 담당한다. Hadoop 2.0 이후에 추가된 구성요소로, 더 효율적인 자원 활용과 확장성을 제공한다.

 

추가적인 보완적인 도구 및 기술로는 다음과 같은 것들이 있다.

Hive: SQL과 유사한 쿼리 언어(HiveQL)를 제공하여 Hadoop에서 데이터를 쉽게 조회하고 분석할 수 있게 한다. 주로 데이터 웨어하우징 작업에 사용된다.

Pig: 데이터 흐름 언어와 실행 환경을 제공하여 복잡한 데이터 변환 작업을 단순화한다. Pig Latin이라는 스크립트 언어를 사용한다. HBase: HDFS 위에서 실행되는 비관계형, 분산 데이터베이스이다. 실시간 읽기/쓰기 액세스를 제공한다.

Sqoop: 관계형 데이터베이스 시스템과 Hadoop 간의 데이터를 이동할 수 있게 해주는 도구이다.

Flume: 로그 데이터와 같은 스트리밍 데이터를 Hadoop으로 수집하는 데 사용된다.

Oozie: Hadoop 작업(예: MapReduce, Pig, Hive 작업)을 워크플로우로 조합하고 스케줄링하는 서비스이다.

Spark: MapReduce와 비교하여 더 빠른 데이터 처리를 위한 인-메모리 데이터 처리 엔진이다. 머신러닝, 스트리밍 처리 등 다양한 목적으로 사용된다.

Zookeeper: 클러스터 내의 분산 애플리케이션을 위한 조정 서비스를 제공한다. 데이터의 동기화, 구성 관리 등에 사용된다.

 

HDFS는 특히나 Hadoop 생태계에서 핵심적인 기능이다. 큰 데이터는 하나의 서버에서 다룰 수 없다는 기본 컨셉을 기반으로 시작된 아이디어로 큰 사이즈의 데이터를 여러대의 컴퓨터에 Java-based file system으로 나누어 저장하는 것이다.

위와 같이 적당한 크기의 block으로 나누어서 아래처럼 여러대의 컴퓨터에 나누어 저장하는 것을 Sharding이라고 부른다.

이때 어느 데이터가 어느 컴퓨터에 저장되어있는지 알기 위해 관리하는 manager 역할을 하는 Namenode가 존재한다.

또한 한 컴퓨터가 고장났다고 해당 컴퓨터에 저장된 데이터가 전부 나라가면 안되기 때문에 아래와 같이 중복하여 데이터를 저장해둔다.

보통 동일한 블록을 3번 이상 복제한다.

HDFS의 데이터를 읽기 위해서는 아래와 같은 과정을 밟는다.

데이터를 쓰는 과정도 아래와 같이 간결하게 표현할 수 있다.

이때 Namenode가 망가지면 SPOF(Single-Point-of-Failure)이 발생한다. 컴퓨터 네트워크에서 자주 나왔던 개념으로 manager 역할을 하는 노드가 망가지면 전체 시스템이 망가지는 현상을 이야기한다.

이를 방지하기 위해 몇가지 대안이 있다. 우선 Back Up Metadata는 downtime을 피할 수 없는 문제가 있고 Secondary namenode를 이용하는 것은 downtime을 줄일 수는 있지만 여전히 부족하다. HDFS Federation을 이용하여 여러개의 namenode를 사용해 피해를 최소화할 수 있고 Hadoop v2부터는 HA Namenode를 이용한다. 두 개의 Namenode가 활성-대기(active-standby) 모드로 운영되어, 하나의 Namenode가 실패하면 다른 하나가 자동으로 그 역할을 맡을 수 있게 한다. 이들은 ZooKeeper와 같은 코디네이션 서비스를 사용하여 상태를 동기화하고, 공유 스토리지를 통해 메타데이터를 동기화한다.


RDBMS vs Hadoop

RDBMS가 scale-up을 한다면 Hadoop은 scale-out을 통해 큰 데이터를 관리한다.


MapReduce

MapReduce는 대규모 데이터 세트를 처리하고 분석하기 위한 프로그래밍 모델이자, 관련 구현이다. 이 모델은 주로 Google에서 개발되었으며, Apache Hadoop과 같은 시스템에서 널리 사용된다. MapReduce의 핵심 개념은 매우 큰 데이터 세트를 효율적으로 처리할 수 있는 방법으로, "Map"과 "Reduce"라는 두 가지 단계로 구성된다.

Map 단계
-목적: 입력 데이터를 처리하고 중간 키-값 쌍을 생성하는 것이다.
-작동 방식: Map 단계에서는 입력 데이터를 작은 청크로 분할한다. 각 청크는 맵 함수에 의해 독립적으로 처리되며, 이 함수는 입력 데이터에서 중간 키-값 쌍을 생성한다. map(item) -> <key,value>

Reduce 단계
-목적: Map 단계에서 생성된 중간 결과를 종합하여 최종 결과를 도출하는 것이다.
-작동 방식: Reduce 단계에서는 맵 단계에서 생성된 모든 중간 키-값 쌍을 키에 따라 그룹화한다. 그런 다음, 각 키에 대해 Reduce 함수를 적용하여 최종 결과를 생성한다. reduce(key,<list of values>) -> value

 

책 한 권에서 단어별 출연 빈도수를 세는 예시를 통해 살펴보자.

- Map: 아이들 각각에게 한 페이지씩 나누어주고, <단어, 빈도수>를 각각 포스트잇에 적어 보고하도록 한다.

- Reduce: A/B/C/D/E... 별로 포스트잇을 취합하여 각각 숫자를 더한다.


MapReduce의 특징
-분산 처리: MapReduce는 분산 처리를 기본으로 한다. 대규모 데이터 세트를 여러 노드에서 병렬로 처리할 수 있기 때문에, 처리 시간을 크게 줄일 수 있다.
-확장성: 클러스터에 노드를 추가함으로써 처리 능력을 쉽게 확장할 수 있다.
-내결함성: 시스템의 일부가 실패하더라도, MapReduce는 데이터의 복사본을 다른 노드에 저장하고, 실패한 작업을 다른 노드에서 재실행하여 처리를 계속할 수 있다.
-유연성: 다양한 유형의 데이터와 다양한 형태의 데이터 처리 작업에 적용할 수 있다. 


 

728x90

'Quality control (Univ. Study) > Database Design' 카테고리의 다른 글

NoSQL  (0) 2023.11.28
Concurrency Control  (1) 2023.11.23
Transaction  (3) 2023.11.21
Query Optimization  (0) 2023.11.16
INDEX 실습  (0) 2023.11.14