빅데이터 처리 시스템 개요 및 예시
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가 클러스터에 분산 저장되어 있는 형태이다.
'공부 > 빅데이터와 머신러닝 소프트웨어 (K-MOOC)' 카테고리의 다른 글
4주차. 빅데이터 스트림 분석 (0) | 2021.04.24 |
---|---|
3주차. 빅데이터 배치 분석 및 대화형 질의 (0) | 2021.04.19 |
1주차. 빅데이터 분석 소프트웨어 개요 (0) | 2021.04.18 |