2. 1. 스파크란? 02
〮 오픈소스 클러스터 컴퓨팅 프레임워크
〮 Spark = MR + interactive query + streaming
〮 하둡 API를 사용하는 저장 시스템 지원
- HDFS, S3, Cassandra, Hive, Hbase
〮 In-Memory
3. 2. Spark vs Hadoop 03
1. Disk I/O
- iteration 작업 매 job마다 HDFS 접근
2. Hadoop + RAM
- fault-tolerant X
3. Hadoop + RAM + fault-tolerant(Piccolo)
- replicating : 하는동안 멈춰야 함…
- checkpoint : disk...
-> 그냥 느리다
4. 2. RDD 04
〮 Resilient Distributed Dataset
〮 스토리지 -> RDD, RDD -> RDD
〮 Immutable, Read-Only
- 어떻게 만들어졌는지 알면 다시 만들 수 있다. -> lineage에 기록
〮 DAG(Directed Acyclic Graph)로 표현
6. 4. Narrow and Wide dependencies 06
〮 Narrow Dependencies
- 작업이 한 노드에서(네트워크X)
- 그 노드에서 복원가능
〮 Wide Dependencies
- 노드간 셔플이 필요(네트워크O)
- 부셔지면 복원이 가능하지만 비쌈
7. 5. Lazy-execution and Fault-tolerant 07
〮 Transformation : RDD -> RDD, lineage만 기록
〮 Action : lineage에 쌓인 것들 수행
-> lazy-execution
〮 RDD 망가져도 lineage를 통해 복구 가능
-> fault-tolerant
〮 DAG를 통해 Execution Plan이 만들어진 상태
-> 자원의 상황을 고려해서 최적의 코스로 수행
9. 4. Spark 실행 구조 09
〮 드라이버
1. 사용자 프로그램 -> task
- Main()이 실행되는 프로세스
- SparkContext, RDD 생성
- Transformation, action 수행
- DAG -> 물리적 실행 계획으로 변환
2. Excutor에서의 task 스케줄링
- 항상 excutor들을 살펴보고 각 task를
데이터 위치에 기반해 적절한 위치에
서 실행될 수 있도록 함.
10. 4. Spark 실행 구조 10
〮 익스큐터
- 작업들을 실행하여 결과를 드라이버에 반환
- 각 익스큐터 안에 존재하는 블록매니저를 통해 캐시하는 RDD를 저장
11. 4. Spark 실행 구조 11
1. 사용자가 spark-submit을 통해 application 제출
2. Spark-submi이 드라이버 실행, main() 호출
3. 드라이버 -> 클러스터 매니저, 익스큐터를 위한 리소스 요청
4. 클러스터 매니저가 익스큐터들 실행
5. 드라이버가 실행되고 프로그램 내용에 따라 단위 작업으로 나누어 익
스큐터들에게 보냄.
6. 단위 작업들이 익스큐터에 의해 실행
7. Main()이 끝나거나 sparkcontext.stop() 호출되면 익스큐터들 중지되고
클러스터 매니저에 사용했던 자원 반환.
12. 잠깐 12
〮 수행 중 메모리가 부족한 경우?
LRU정책으로 안쓰는 파티션 없앰
〮 수행 중 Fault가 났을 때 Recovery 비용?
Lineage가 애초에 용량이 작기때문에 부담이 없음
〮 wide dependecy의 경우 Recovery 비용?
재계산 비용이 disk i/o보다 비쌀수 있다.
Checkpoint 이용을 고려하자
-> read-only기 때문에 병렬로 async 돌리면 됨.
16. 7. 스파크 SQL 16
〮 python, java, scala의 DataFrame 다룰 수 있음.
〮 다양한 구조적 포맷의 데이터 읽고 쓰기 가능. (JSON, Hive 테이블, Parquet)
〮 스파크 내부 또는 JDBC를 제공하는 툴을 써서 쿼리 날리기 가능
18. 8. 스파크 MLlib 18
〮 Java, Scala, Python, R 모두 지원
〮 일반적인 MR보다 100배 정도 빠름
〮 Mllib은 python의 scikit-learn에 기반
〮 RDD로 표현된 분산 데이터셋에서 다양한 알고리즘을 가져다 쓸 수 있도록 함
〮 Classification, Regression, Linear methods, Decision trees, Tree Ensembles
20. 9. 스파크 streaming 20
〮 스트림을 쪼개어 RDD처럼 처리
〮 스트림 데이터에 실시간으로 map, reduce, filter, join같은 함수 적용 가능
21. 9. 스파크 streaming 21
Localhost:7777 서버
Lines
DStream
errorLines
DStream
0~1초
데이터
1~2초
데이터
2~3초
데이터
3~4초
데이터
0~1초
데이터
1~2초
데이터
2~3초
데이터
3~4초
데이터
filter