빅데이터

빅데이터_chapter02_하둡과 데이터과학

강용민 2022. 3. 18. 13:18

1.하둡이란?

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

 

하둡은 하나의 좋은 컴퓨터를 이용하여 데이터를 처리하는 대신, 적당한 성능의 범용 컴퓨터 여러 대를 클러스터화하고, 큰 크기의 데이터를 클러스터에서 병렬로 동시에 처리하여 처리 속도를 높이는 것을 목적으로 하는 분산처리를 위한다.

특징으로는 다음과 같다.

  • HW 확장을 위해 장애를 일반적인 현상으로 허용한다.
  • 소프트웨어 수준에서 복원 체계를 구축한다.
    • 병렬처리 노드는 고장날 가능성이 높고 이에 대한 유연한 처리를 위해 Master/Slave 구조, 3-copy전략을 이용한다.
  • 각 서버의 데이터들을 하나의 슈퍼컴퓨터로 모아 프로그램에 넣는 방식이 아닌 HDFS를 이용하여 각 서버에 프로그램을 배포하는 형식으로 바뀌었다.
  • Scale Up방식에서 Scale Out방식으로 변화하였다. 최근에는 두 방식을 병행한다.
    • Scale UP은 서버 용량을 늘리는 것이고, Scale Out은 서버대수를 늘리는 것이라 이해한다.
  • Key,Value의 데이터모델방식을 채택하였다.

대용량데이터처리를 위한 플랫폼은 분산파일시스템(HDFS), 리소스 관리자와 스케줄러(Yarn), 분산 데이터처리 프레임워크(MapReduce)등이 있다.

 

1.1 하둡분산 파일 시스템 : Haddop Distributed File System, HDFS

HDFS는 하둡이 실행되는 파일을 관리해주는 시스템이다. 

특징은 다음과 같다.

  • 파일을 다수의 블록으로 나누어 저장한다. 이때 블록의 크기는 64MB,128MB 정도이다.
  • 하부운영체제의 파일 시스템을 그대로 사용한다.
  • 견고성(Robustness)과 읽기 효율성 향상
    • 3-copy를 이용해 하드웨어 오류를 SW수준에서 처리 및 데이터 접근 속도 향상
  • Write Once Read Many
  • 웹에서 접근 가능 : WebHDFS제공
  • 스트리밍 데이터 액세스 : Batch job에 최적화
  • 계층구조의 파일시스템을 제공 : 폴더 트리 형태

 

네임노드와 데이터노드

HDFS에는 Master/Slave 아키텍처를 사용하고 있다. Master node는 네임 노드가 Slave node는 데이터노드가 담당하고 있다.

실제 데이터 블록을 다수의 Data Node에 분산하여 저장하며 복제는 한 rack에 모든 복제 블록이 놓이지 않도록(Rack awareness) 하고 있다.

데이터노드는 클라이언트나 네임노드의 요청이 있을 때 블록을 저장하고 탐색한다.

네임노드메타정보 저장 및 관리를 하며, 특정 파일을 저장하는 모든 블록이 저장된 데이터 노드를 저장한다.

네임노드가 없으면 파일시스템은 동작하지 않는다. 네임노드를 실행하는 머신이 손상되면 파일시스템의 어떤 파일도 찾을 수 없다.

따라서 네임도드의 장애 복구 기능은 필수 인데, 그것을 담당하는것이 보조 네임노드이다.

보조 네임노드네임노드의 마지막 상태를 보존하는 체크포인트를 주기적으로 저장하는 역할을 하고있다.

 

그럼 네임 노드와 데이터노드는 어떠한 통신을 하는가?(Heartbeat)

데이터 노드는 보유 블록 리스트를 Name Node에 정기적으로 알리며,

네임 노드는 고장 데이터 노드를 감지하여, 그 노드의 블록들을 다른 노드들에 복제하여 replication factor를 유지한다.

 

1.2 리소스 관리자와 스케줄러(Yarn)

Yarn은 Yet Another Resource Nagotiator의 약자로 리소스 관리자이자 스케줄러이며, 윈도우의 작업관리자와 비슷한 역할을 한다.

각 구성과 몇가지 기능을 살펴보면 다음과 같다.

  • 어플리케이션 스케줄러 : 자원을 분배하는 규칙을 설정
  • 컨테이너 분리 : 리소스를 컨테이너로 분할
    • 컨테이너는 CPU코어수, 메모리용량, 추가요소(GPU, Storage)으로 정의
  • 컨테이너 관리 : 관리 실행중인 컨테이너 모니터링 : 리소스 최대할당량 초과를 억제
  • 데이터의 지역성  특정 데이터 위치에 맞게 특정 컨테이너를 할당

1.3 하둡분산 데이터 처리 프레임워크 : Map/Reduce

하둡은 빅데이터를 분산해서 병렬처리하는 프레임워크로써, Map/Recude는 HDFS와 함께 하둡의 가장 기본이 되는 시스템이다.

HDFS(하둡분산파일시스템)은 데이터를 저장하는 쪽이고, 그 위에서 작업을 처리하는 쪽이 Map reduce이다.

 

MapReduce는 여러 노드에 Task를 분배하는 방법으로 이름과 같이 Map과 Reduce 크게 두단계로 구성되어 있으며, 그 중간에 Shuffle단계가 존재한다.

  • Map : 분산된 데이터를 Key와 value의 리스트로 모으는 단계
  • shuffle : Map에서 나온 결과물(데이터)을 정리해 나눠주는 단계
  • reduce : 리스트에서 원하는 데이터를 찾아서 집계하는 단계

위의 그림을 예시로 들었을때, Input Splits가 Welcome to Haddop, Class Hadoop is, good Hadoop is, bad로 나뉜것을 Map을 통해 (Welcome 1개, to 1개, Hadoop 1개), (Class 1개, Haddop 1개, is 1개), (good 1개, Hadoop 1개, is 1개), (bad 1개)로 (Key value)형태를 나눠놨다.

후 Shuffle을 통해 각 단어(Key)별로 모아놓고, Reduce를 통해 Key마다의 Value를 합친것을 볼 수 있다.

 

Map/Reduce를 활용한 방식은 Converge, 선영대수 Eigenvalue찾기, 경사하강법등이 있다.

 

2.데이터과학용 하둡도구(Hadoop EcoSystem)

하둡의 코어 프로젝트는 HDFS와 MapReduce지만 그 외에도 데이터과학 과정(수집, 품질분석, 정제, 스크립팅, 통계, 분산처리, 시각화 등)들을 다룰 수 있는 다양한 서브 프로젝트들이 많이 있다.하둡 에코시스템은 프레임워크를 이루고 있는 다양한 서브 프로젝트들의 모임이라 볼 수있으며 아래 그림과 같은 서브 프로젝트들이 존재한다.

Apache Sqoop

Sqoop은 하둡과 정형 데이터베이스(RDB, NoSQL 등)간에 대용량 데이터 이관을 지원하는 도구이다.

외부시스템 데이터를 HDFS로 가져와 하이브나 Hbase테이블에 삽입(import)해준다.

데이터를 파티션으로 분할하여 mapper작업을 할당해 파티션을 전송하기에 대용량 데이터 이관작업을 할 수 있다.

 

Apache Flume

Flume은 서버에서 생성되는 대용량 로그데이터를 효율적으로 수집해 HDFS로 전송하는 도구이다.

분산된 서버에 agent가 설치되고, agent로부터 데이터를 전달받는 콜랙터로 구성되어 있으며, 전체 데이터의 모든 설정을 동적으로 변경할 수 있다.

 

Apache Hive

Hive는 하둡 기반의 데이터웨어하우스 인프라 구조로서 SQL처럼 데이터 요약, 질의 및 분석 기능을 제공한다.

HiveQL은 내부적으로 Map/Reduce 작업으로 변환되어 실행된다.

 

Apach Pig

Pig는 하둡의 복작한 ETL(추출, 변환, 적재)작업을 손쉽게 구현하기 위한 스크립트 변환도구로 복잡한 MapReduce 프로그래밍을 대체한 Pig Latin이라는 자체 언어(스크립트언어)를 제공한다.

 

Apache Spark

Spark는 메모리 내 처리를 지원하여 데이터를 분석하는 어플리케이션 성능을 향상시키는 병렬 처리 프레임워크이다.

Spark에서는 RDD, Data Frame, Data Set의 3가지 API를 제공하는데, 이러한 데이터를 바탕으로 In-memory 연산을 가능하도록 하여 성능을 끌어 올렸다.

  • Spark SQL
    • SQL처리엔진으로 다양한 정형 데이터를 읽고 쓸 수 있다.
    • DataFrame과 DataSet에 적용된 연산을 일정 시점에 RDD 연산으로 변환한다.
  • Mlib
    • 머신 러닝 알고리즘 라이브러리이다.
  • Spark GraphX
    • 그래프 RDD(EdgeRdd 및 VertexRDD)형태의 그래프 구조를 만들 수 있는 기능을 제공한다.
  • Spark Streaming
    • 실시간 스트리밍 데이터를 처리하는 프레임워크이다.
    • 슬라이스 데이터를 처리하는 방식을 따른다.

 

 

 

[참조] https://wikidocs.net/22654

https://honeyassistant.tistory.com/44

https://12bme.tistory.com/154

https://butter-shower.tistory.com/73