////
Search

MapReduce and Spark

NoSQL

NoSQL은 consistency를 speed와 맞바꾼 것이다.
large scale computing을 할 때 distribute computation을 해야한다.
필요한 소프트웨어 스택
분산 파일 시스템
큰 블럭, 데이터 복제, 미디어 실패를 막기위한 redundancy 등
MapReduce programming 시스템
hardware failure에 대응하고 cluster를 효율적으로 computing 해야함
physical organization of compute nodes
파일은 redundantly하게 저장되야함
연산은 태스크로 나눠져야하는데, 하나의 태스크가 실패해도 다른 태스크에 영향을 주지 않고 다시 시작될 수 있어야한다.
Distributed File System
기본적으로 파일이 업데이트가 덜 되고 많이 읽히거나 추가되야한다.
file은 chunk로 나뉜다. 보통 64메가 단위. chunk는 다른 컴퓨트 노드에 복제된다. 다른 컴퓨팅 노드도 다른 랙에 위치해야한다.
master node
chunk 파일을 찾는데 사용되는 파일
마스터 노드도 복제될 수 있다..
client library for file access
마스터에게 chunk 서버를 찾으라고 말하는 것
directly connect할 수 있다.
구현
GFS → 구글
HDFS → 하둡

MapReduce

1.
task를 mapping하기
2.
key에 대해서 묶기
3.
task reducing해서 결과 내기
Word counting
map: input을 읽어서 key-value pair를 생산
group by key: 같은 키에 대해서 pair를 묶기
reduce: 키에 대한 모든 값들을 묶어서 output으로 만들기
Workflow systems
MapReduce를 확장해서 acyclic network of function을 만드는 것
workflow는 completion이 되면 아웃풋을 deliever하는 거다.
task fail이 나면 아무것도 전달되지 않는다.
master controller는 그러면 실패한 애들을 restart를 하면 됨.

Apache Spark

Resilient distributed dataset (RDD)
스파크의 핵심 데이터 추상화
한 타입의 오브젝트 파일이다.
function으로 넘어가는 애들
여러 chunks로 분리될 수 있고, 다른 컴퓨팅 노드에 있다.
스파크는 RDD에 대한 손실에 resilient하다.
Spark program
Transformation: RDD에서 RDD를 생산하는 function
Actions: RDD를 특정한 데이터로 바꾸는 작업
Map
function을 파라미터로 받아서 RDD에 돌아가면서 적용하는 거다.
MapReduce의 Map과는 다름
MapReducesms 1:N이 됬는데, Spark에서는 1:1만 됨.
Flatmap
MapReduce의 Map과 비슷하게, object를 특정한 리스트로 mapping 시킴
그래서 RDD object에 대해서 flatten 해진다.
Filter
Transformation인데 특정한 걸 걸러내는데 쓰임
Reduce
action으로써 RDD 대신 value를 return함.
받는 function type이 (V,V) ⇒ V임.
관계형 operation 도 몇 개 있다
Join
각 키쌍에 대해서 조인처럼 해줌.,
GroupByKey
각 키쌍에 대해서 key로 정렬을 해줌.
MapReduce랑 비교
RDD가 chunk로 나뉘고, 다른 computing node로 가는 거는 비슷하다.
RDD에 대한 transformation 또한 chunk에 대해서 Parallel하게 가는 것도 같다.
두 가지 나아진 점
Lazy evalution of RDD
실제로 action이 수행되는 시점에 RDD가 생성된다.
마지막에 저장이 될 때 메모리에서 필요한 만큼 읽어서 쭉 연산을 하고 drop하는 식
이러면 중간중간 disk에 저장할 필요도 없고, 시간도 준다.
Lineage for RDD
lazy evaluation을 위해 RDD간 관계를 저장해놓기 때문에, 중간 단계가 유실되면 그 전꺼에서 reconstruct를 하면 된다.
왜 중간 에 저장을 하지 않나요?
빠른 스피드를 위해 complex revoery를 trade off하는게 일반적으로 더 좋다.
빠르게 동작할 수록 failure 기회가 적어진다.
중간 결과를 저장하는게 long period로 파일 storage를 관리해야한다,.

NewSQL