[빅데이터 분산 프로젝트] 분산 처리 시스템 이해

DonaDona·2023년 2월 21일
0

분산 처리 시스템 사전학습

개요

  • 빅데이터 분석 어려움 -> 병렬 분산 알고리즘 디자인 및 빅데이터 처리를 해야하는 과정 때문.
  • 병렬 분산 알고리즘을 사용해야하는 이유 : 몇멸의 하이엔드 머신 스케일 업(Scale-Up) 방식에 비해 비교적 저렴한 로우 엔드(low-end) 머신들을 대량으로 두고 사용하는 스케일-아웃(Scale-Out) 방식이 비용적으로 효율적

맵리듀스 프레임워크(Mapreduce Framework)

특징1

  • 수 십 ~ 수 천대의 컴퓨터를 묶어서 처리하기 쉽도록 만들어준다.
  • 값 싼 여러대의 컴퓨터들로 이루어진 거대한 클러스터(cluster)에서 빅데이터를 처리하기 위한 스케일러블 병렬 어플리케이션(scalable parallel application) 소프트웨어의 개발을 쉽게 할 수 있도록 해주는 프로그래밍 모델.
  • 스케일러블 -> 사용자 수/데이터 수가 급증해도 프로그램이 멈추거나 성능이 크게 떨어지는 일이 없다는 뜻

    Hadoop

    • 구글의 맵리듀스 혹은 동등한 형태의 오픈 소스
    • 데이터 중심 애플리케이션 제작에 아주 우수한 형태이자 툴
  • 맵리듀스 프레임워크에서는 HDFS(Hadoop Distributed File System)이라 불리는 분산 파일 시스템이 빅데이터를 여러대의 머신에 분산하여 저장. 각 파일을 여러개의 순차적인 블록으로 분할하여 저장.
  • 각각의 블록들은 Fault Tolerance(결함감내)를 위해서 여러 개로 복사되어 여기저기 저장됨.
  • 레코드/튜플 => (key,value) 쌍으로 표현됨.
  • 유저가 정의한 맵(map)과 리듀스(reduce)라는 함수를 이용하여 맵-페이즈, 셔플링-페이즈, 리듀스-페이즈로 구성된 3개의 페이즈가 한 번 떠는 반복으로 수행됨. => 통칭 맵리듀스 페이즈(MapReduce Phase)
  • 맵/리듀스 함수는 한 개의 (key, value) 쌍을 입력으로 받고 0,1,n개의 (key, value) 쌍을 출력.

특징2

  • 입력 데이터는 여러 머신에 나누어 저장
  • 맵-페이즈
    - 유저가 정의한 맵 함수가 여러 파티션에 병렬 분산 호출 수행, 결과(key, value) => 여러 머신의 key에 따라 random하게 나누어 전달됨.
    • 같은 Key를 가진 (key,value)쌍은 같은 머신으로 모인다.
  • 셔플링-페이즈(Shuffling Phase)
    - 이후 각 머신에서 수행. 모인 key-value쌍들을 Key를 이용해 정렬, 각 Key마다 그 Key를 갖는 Value들을 병합(merge)하여 Value리스트를 만듦.
  • 리듀스 페이즈
    - 셔플링-페이즈에서 만든 (key, value-list) 쌍마다 한 개의 리듀스 함수가 호출되어 수행되고 출력이 있다면 (key, value)쌍 형태로 출력.

    함수의 입출력 표현 (출력의 value는 리스트 형태가 될 수 있음)
    Map:(key,value)>[(key,value)]Map : (key, value) -> [(key, value)]
    Reduce:(key,[value])>[(key,value)]Reduce : (key, [value]) -> [(key, value)]

  • 각 맵 함수와 리듀스 함수의 출력은 (key, value)로 하여 HDFS에 분산 파일 형태로 저장됨.

특징3

  • 맵리듀스 프레임워크는 메인(main) 함수를 한 개의 마스터 머신에서 수행
  • 이 머신은 맵 함수를 수행하기 전에 전처리를 하거나 리듀스 함수의 결과를 후처리하는데 사용될 수 있음.
  • 맵리듀스 프레임워크 주요 구성 = 맵리듀스(MapReduce) + HDFS(Hadoop 분산 파일 시스템) = 한 개의 네임노드(마스터 역할) + 여러 개의 데이터노드(슬레이브 노드)
    - 맵리듀스 : 소프트웨어의 수행을 분산
    • HDFS : 데이터를 분산
    • 네임노드 : 파일 시스템을 관리하고 클라이언트가 파일에 접근할 수 있게함
    • 데이터노드 : 컴퓨터에 들어있는 데이터에 접근할 수 있게 함
profile
기록용 공부용 개발 블로그

0개의 댓글