본문 바로가기

공부/빅데이터와 머신러닝 소프트웨어 (K-MOOC)

2주차. 빅데이터 처리 시스템 개요 및 예시

반응형

빅데이터 처리 시스템 개요 및 예시

2-1. 데이터 처리 개요

데이터 분석시스템

  • 프로그래밍 모델
    • Compiler Interpreter 에서 프로그램 변환 수행하능한 계획으로 바꿈
    • 계획받아서 수행하는 부분 Runtime
    • Runtime은 많은 데이터를 분산처리, 그르므로 얼마나 잘하는지가 상당히 중요
    • program - (compiler) - logical plan - physical plan - runtime
    • 구조화된 데이터라면 SQL사용
    • 중간 레벨에서는 RDD같이 변환을 가지고 파이프라인 작성가능
    • 더 아래 레벨에서는 그래프 형태로 표현
    • 데이터 플로우 그래프
      • DAG
      • Vertax - operator, Edge -data dependency
      • 병렬화 쉬움, 최적화 쉬움, 다양한 환경 deploy 쉬움
      • 여러 레벨의 수행 계획을 표현 가능
      • physical plan도 표현 가능
  • Ececution model : 어떤 방식으로 수행하는지에 대한 것

2.2 맵리듀스

  • 맵리듀스
    • Map 함수는 입력으로 key-value 쌍을 만들어내는 함수
    • Reduce 함수는 같은 중간 key를 갖는 여러 중간 값들을 받아서 합해 어떤 함수를 수행하는 것
    • ex) Word Count
      • Map 은 (word, 1) lambda 함수
      • Reduce는 count가 들어왔을 때 그 count 를 합해서 더해진 count 를 계산 하는 lambda 함수
    • 입력이 들어와서 map 함수 수행
    • map의 결과가 reduce 쪽으로 전달
    • reduce는 받은 입력을 reduce 함수를 수행 분석 -> 결과
    • 수행되는 것은 lambda 함수
    • Logical plan을 물리적 계획으로 바뀌게됨
    • 각각 map task가 자기의 입력을 처리해서 결과를 만들음
    • reduce task에서 자신이 처리해야할 key/value 값을 받아옴
    • 모든 map task에서 받아오게 되는데 이 과정을 Shuffle 이라고함
    • reduce task 에서 처리하게 되면 Output data partition이 만들어짐

  • Mapreduce Runtime
    • 어떻게 하나의 job을 여러 task로 나누어 수행할지에 대한 Scheduling을 알아서해줌
    • Job이 수행되다가 특정 task가 죽었을때 복구하게 하는 Fault Tolerance도 지원
    • 데이터가 많아질수록 더많은 task를 써서 빠르게 분석하게 해주는 Scalability 지원
    • 자원이 가용한 것이 시간에 따라 바뀔때 자원을 최대한 활용할 수 있게 해주는 Elasticity 지원
  • 맵리듀스 특징
    • 초기에는 많이 사용됨
    • 하지만 상당히 제한적인 프로그래밍 모델
    • Map과 Reduce 두개의 함수
    • 따라서 요구사항 늘어날 수록 힘들어짐
    • 제한된 프로그래밍 유연성 - 복잡한 여러단계 알고리즘에서 비효율적
    • 효과적인 데이터 공유방법이 없음 - 중간결과 저장필수 따라서 반복저장 비효율적

2-3. 스파크 개요

  • Spark
    • 기존의 맵리듀스와 비교해서 더 일반적인 데이터 프로세싱 모델
    • 특징
      • 다양한 데이터 분석을 통합지원
      • 다양한 언어로 분석할 수 있음, js, scala, python, R 의 API지원
      • 아파치 오픈소스재단에서 활발하게 개발 커뮤니티 우너영중
      • 일반적인 데이터 플로우 그래프로 수행하는 것 표현
      • 다양한 operator 사용 - 다양한 방식으로 연결된 그래프 형태를 지원
      • RDD라는 개념을 통해 In-memory 계산 지원
        • 중간계산결과를 저장해놓고 빠르게 지원
      • 쉬운 프로그래밍 인터페이스
        • RDD의 다양한 변환 표현 가능
      • 강력한 기능 이용 배치분석, 스트림분석, 머신러닝, 그래프, SQL 등 다양한 데이터 처리 지원
    • 구성
      • cluster 자원을 활용할 수 있는 다양한 자원관리자 사용
      • Standalone 방식으로 동작, 혹은 Yarn , Mesos
      • 코어위에 분석 애플리 케이션 도메인 마다 더 stack이 올라감
      • 다양한 라이브러리 통해서 분석할 수 있음
  • RDD
    • 클러스터 여러 머신에 나눠져서 저장되어 있는 변하지 않는 object 의 collection
    • immutable, 생성후 임의부분 수정 불가
    • 정적 타입 정보를 가지고 있음
    • 계산 방법
      • 변환 - map, filter, groupBy 같이 특정부분선택 병렬 수행
      • Actions - count, collect 같은 명령들
    • 성질
      • RDD partition이 lineage라는 정보를 통해서 자동으로 복구
      • 즉, 데이터 부분이 손실 나면 Spark가 그부분을 복구
      • lineage는 메타 정보를 가지고 있음 (어떤 변환을 거쳤는지)
      • 성능 관련된 최적화
      • 변환시 lineage에 적어놓고 lazy하게 수행됨
      • 따라서 전체 변환을 보고 최적화 할 수 있기 때문에 성능 최적화 가능
      • 메모리나 또는 디스크에 계산된 결과를 저장 가능 - Materialization
      • RDD 결과가 필요할 경우 재계산 없이 바로 이용 가능
    • 프로그램 구조
      • Load : 데이터를 모아서 올리는 과정
      • 변환 : 분석 파이프라인을 기술
      • Store : 저장

Quiz

Quiz_1

데이터 플로우 그래프는 계산을 그래프 형태로 표현한 것이다. 그래프의 노드는 오퍼레이터를 의미하고 노드간의 연결은 데이터의 전달을 의미한다.

O 정답

X 오답

정답은 o입니다.

Quiz_2

다음 중 데이터 플로우 그래프 설명으로 틀린 것은?

데이터 플로우 그래프에서 두 오퍼레이터의 입력 간에 의존성이 없으면 병렬화 할 수 있다.

데이터 플로우 그래프로 논리적인 계획과 물리적인 계획을 표현할 수 있다.

데이터 플로우 그래프의 물리적인 계획에서 한 노드는 오퍼레이터에 해당한다. 정답

데이터 플로우 그래프로 표현된 논리적인 계획이 물리적인 계획으로 바뀌어 수행된다.

해설)

정답은 3번입니다. 데이터 플로우 그래프의 물리적인 계획에서 한 노드는 태스크 (오퍼레이터의 한 인스턴스)에 해당한다.

Quiz_3

맵리듀스에서 50개의 맵 태스크와 10개의 리듀스 태스크를 사용하면 총 몇 번의 데이터 전송이 맵 태스크와 리듀스 태스크 사이에 일어나는가?

5

50

*500 *

5000

해설)

정답은 3번입니다. 각 리듀스 태스크가 모든 맵 태스크로부터 자기가 처리해야 하는 부분의 데이터를 가지고 오기 때문에 50번의 데이터 전송이 발생한다. 그리고, 총 10개의 리듀스 태스크가 있기 때문에 총 데이터 전송은 50*10번 = 500번 발생한다.

Quiz_4

한 머신에서 네 개의 맵 태스크 또는 리듀스 태스크를 동시에 수행할 수 있다. Job 실행은 맵 태스크가 다 끝난 후 리듀스 태스크가 실행된다. 수행하려고 하는 Job은 총 48개의 맵 태스크와 24개의 리듀스 태스크를 수행한다. 모든 맵 태스크의 수행시간이 동일하고 모든 리듀스 태스크의 수행시간이 동일하다고 가정하면, 최대한 병렬화해서 이 Job을 수행하려면 최소 몇 개의 머신이 물리적으로 필요한가?

72

48

18

12 정답

해설)

정답은 4번입니다 한 머신에서 4개의 태스크를 동시에 수행가능하기 때문에 48개의 맵 태스크를 동시에 수행하려면 12개의 머신이 필요하다. 리듀스 태스크는 맵 태스크가 끝난 후에 실행 가능하므로 따로 더 물리적인 머신을 추가할 필요는 없고 12개 중에 6개의 머신을 사용하면 된다.

Quiz_5

스파크 RDD의 특성이 아닌 것은?

RDD의 복구는 lineage를 사용하여 한다.

RDD는 두 가지 종류의 연산을 제공한다. 한 종류는 transformation이고 다른 종류는 action이다.

RDD는 in-memory computing을 가능하게 한다.

RDD는 수정이 가능한 Object가 클러스터에 분산 저장되어 있는 형태이다. 정답

해설)

정답은 4번입니다 RDD는 수정이 가능하지 않은 Object가 클러스터에 분산 저장되어 있는 형태이다.

반응형