Interface that enables automatic parallelization & distribution of large scale computation
= 싸고 대중적인 PC들을 묶어 돌리자.
하지만, 싼 pc들, 싼 네트워크들로 인해 속도에 제한이 생김
→ 데이터의 흐름을 줄이려고 많은 노력함.
challenge )
how do you distribute computation?
computation )
사용자가 정의한 map, reduce 함수의 계산
- 사용자는 제공되는 인터페이스에 맞게 map,reduce 함수만 짜고,
병렬처리, sync 처리 등의 작업은 모두 system에서 자동으로 해줌
=> ‼️ 성능이 나쁜 네트워크로 인해 '데이터 이동'을 '최소화'해야한다
따라서
primary node -> local node
기존 ) 데이터를 보냄
map reduce ) 코드(map,reduce)를 보냄
challenge
how can we make it easy to write distributed programs?
how to deal with machine failure?
- copying data over a network는 시간이 오래걸림
SOLUTION
1. bring computation close to the data
- 데이터를 넘기는게 아니라 code를 넘김
2. store files multiple times for reliability (replicatio)
- 한 데이터를 여러 복사본으로 저장 ( 기본값 : rf = 3 (replication factors))
node가 fail한다면 data를 어떻게 persistently 저장할 것인가
-> sol ) distributed File System (DFS) 분산파일시스템
: provides global file namespace
🗂️ 파일 시스템
: 파일들의 쪼개진 위치 정보를 가짐
: 하나의 파일은 저장될 때 작은 블록의 크기로 인해 기본적으로 분산되어 저장된다.
: 파일 시스템은 몇개의 블록, 어느 블록에 저장되는지의 정보(주소)를 찾아서 읽어옴
WORM (Write Once Read Many)
: 보통 빅데이터는 한번 저장되면 수정되는 일이 거의 없고 거의 대부분 read, append가 일어난다.
: file이 contiguous chunk로 쪼개지고, 각 청크는 replicated 되며 다른 rack들에 저장된다. ( reliability 때문 )
: 파일들의 저장위치에 대한 metadata를 저장한다.
master 가 죽으면 답이 없기 때문에 replicate 옵션이 존재한다
: talks to master to find chunk servers