210901 FUNDAMENTAL 30. 맵리듀스

시에나 Sienna·2021년 9월 1일
0

AIFFEL

목록 보기
39/66
post-custom-banner
  • 빅데이터 : 제타바이트(Zettabyte, 10^{21}) 단위까지 증가한 데이터

1. 맵리듀스(Mapreduce)

  • 하나의 컴퓨터에서 하던 작업을 여러 개의 컴퓨터에서 처리하도록 분산시키는 프로그래밍 모델
  • 클러스터 위에 동작하는 알고리즘
  • 로직(논리의 흐름) : Map, Reduce , Shuffle, 함수형 프로그래밍(Functional Programming)
  • 데이터분석의 Split-Apply-Combine Strategy
    • 큰 문제를 관리 가능한 작은 조각으로 나누고(Split)
    • 각 조각을 독립적으로 처리한 다음(Apply)
    • 모든 조각을 다시 합치는(Combine) 전략
    • ex) SQL groupby
    • 개념도
  • 구성 : map() 함수와 reduce() 함수 ⇨ 합쳐서 MapReduce
    • map()함수 : Apply 역할
      • in_key 인자 : Split의 결과로 생긴 partitioning 키값
      • in_value 인자
      • out_key 인자 : map함수가 결과물을 구분하는 기준 키값
      • intermediate_value 인자
    • reduce() 함수 : Combine 역할, out_key 기준으로 sum
      • 입력 : 여러 map함수의 intermediate_value들을 out_key별로 리스트업한 것
      • 출력 : out_value의 list

  • 실행(Execution) 모델
  • 특징 : map 함수뿐 아니라 reduce 함수도 병렬수행 가능

2.병렬/분산 컴퓨팅

  • 병렬 컴퓨팅(Parallel Computing)
    • 멀티 프로세스 (Multiprocessing)
      • Process : 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램 또는 스케줄링의 대상이 되는 작업(task)
      • 멀티 프로세스는 2개 이상의 프로세스를 사용하는 것
    • 멀티 스레드 (Multithreading)
      • 스레드(thread) : 프로세스 내에서 실행되는 흐름의 단위
      • 멀티 스레드는 2개 이상의 스레드를 사용하는 것
  • 분산 컴퓨팅(Distributed Computing)
    • 여러 대의 컴퓨터가 네트워크로 연결된 상황을 전제로 하는 것
    • ex) P2P(Peer to Peer)/HTTP/Network
  • 클러스터 컴퓨팅
    • 여러 대의 컴퓨터들이 연결되어 하나의 시스템처럼 동작하는 컴퓨터들의 집합
    • 구성
      • 클러스터 노드 : 프로세싱 자원을 제공하는 시스템
      • 클러스터 관리자 : 노드를 서로 연결하여 단일 시스템처럼 보이게 만드는 로직을 제공
    • ex) 병렬 컴퓨팅(Parellel Computing)/분산 컴퓨팅(Distributed Computing)/클라우드 컴퓨팅(Cloud Computing)???????????????

3. 하둡 에코시스템(Hadoop Ecosystem)

  • 하둡(Hadoop)
    • 대용량 데이터를 분산 처리할 수 있는 자바 기반의 오픈소스 프레임워크
    • 강점 : HDFS같은 분산 파일 시스템을 제공
    • 단점
      • map함수가 모두 종료해야 reduce함수가 실행된다는 성능 손실이 큼(사실상 MapReduce의 문제)
      • map 함수의 결과가 디스크에 저장되고, 그걸 reduce 함수가 다시 읽어와함 ⇨ 성능상 손실 발생
  • 스파크(Spark)
    • 하둡의 단점을 보완
    • 단독으로 또는 다른 분산 컴퓨팅 툴과 조율해 여러 컴퓨터로 데이터 처리 작업을 분산할 수 있는 데이터 처리 프레임워크
    • MapReduce 기능에서 Map함수가 전부 종료되지 않았더라도 Map의 결과를 스트리밍하는 방식
    • 구성요소
      • 드라이버(driver) : 사용자의 코드를 여러 작업자 노드로 배분할 수 있는 여러 작업으로 변환
      • 이그제큐터(executor) : 노드에 할당된 작업을 실행 및 클러스터 관리자
    • 특징
      • 인메모리 데이터 엔진을 통해 초기 맵리듀스의 성능상 한계를 크게 극복 ⇨ Hadoop 속도의 10배
      • 다양한 언어가 필요한 환경에서 손쉽고 빠르게 스파크와 연동
        (ex. 자바(Java), 스칼라(Scala), 파이썬(Python), R 프로그래밍 언어 등)
      • SQL, 스트리밍 데이터, 머신러닝, 그래프 프로세싱을 추가로 지원

함수형 프로그래밍 철학
1. 변경 가능한 상태를 불변의 상태(Immutable)로 만들어 에러를 없애자.
2. 모든 것은 객체이다.
3. 코드를 간결하게 하고 가독성을 높여 구현할 로직에 집중한다.
4. 보다 효율적인 동시성 작업
ex) Javascript, Scala, Go 등

4. 함수형 프로그래밍과 맵리듀스

데이터 컬렉션

  • 컬렉션(Collection) = 컨테이너(Container)
    • List, Tuple, Dictionary, Set와 같은 형태의 자료형
  • collections 모듈 : 자료형 외 데이터 컬렉션 타입을 제공
    • deque, namedtuple(), defaultdict
    • namedtuple() :명명된 필드가 있는 튜플 하위 클래스를 만들기 위한 팩토리 함수
    • defaultdict : 누락된 값을 제공하기 위해 팩토리 함수를 호출하는 dict 서브클래스

맵리듀스 기본 함수 알아보기

CC : 컬렉션, xx: CC의 요소

  • 람다(lambda) 문법 중요
  • map(매핑) : 컬렉션의 모든 요소에 함수를 적용(=매핑), M(x):xCM(x) : x \in C
  • filter : 컬렉션 내의 요소를 선택(=필터링), x:xC,ifF(x)x: x \in C, if F(x)
  • reduce : 컬렉션을 축약 xCx\sum_{x \in C} x

예제

  • 맵리듀스 4단계 : Map Task(Split - Map) - Reduce Task(Shuffle - Reduce)
  • 예제 : 알파벳 수 찾기
    ||단계|진행과정|
    |--|---|---|
    |1|입력 데이터|hello python|
    |2|Split|h,e,l,l,o,(공백),p,y,t,h,o,n|
    |3|Map|(h:1, e:1, l:1, l:1, o:1, ' ':1, ...)|
    |4|Reduce|(h:1, e:1, l:2...)|
  • 구현
post-custom-banner

0개의 댓글