Spark
- databricks : 요즘 가장 핫한 회사. 8억불. 성장률이 매 해 10%이상씩.
- 아파치 스파크
- data lake : 라지 데이터의 또 다른 이름
- 기업에서 온갖 서버에서 데이터 생성
- 데이터는 쏟아져 나옴.
- 일단 한 곳에 모아. 분석도 원활하게 해줌 -> 데이터 레이크의 핵심
- 정형화된 시스템의 모양
- snowflake : 스키마가 조인을 할 때. 뭔가 한 쪽으로 계속 긴 것. 핫함.
- 데이터 관련된 회사가 이처럼 성장하고 있다
✅ spark
- 프레임워크임
- spark의 언어 : scala
- spark + scala 는 언제나 웰컴임.
- 우린 java...
- 교수님도 scala는 안 써봄
- 기존에 했던 거에 spark로 코팅을 함.
- 맵리듀스로 많이 짰는데 이건 20년..이나 됨. 이걸로 신규 프로젝트하는 회사 없음.
- 데이터의 흐름에 맞춰서.
- matrix product 두 번째 단계 맵 : 그대로 아웃풋으로 만들어냄.
✅ 맵리듀스 단점
- 매 계산마다 hdfs read write가 발생. 오버헤드가 무시할 수 있는 건 아님.
- 개선한 것이 스파크
✅ 개선한 spark
- 아예 api수준으로 제공함
- hdfs 에서 write하는 것을 없애고, 메모리에 저장함
- 저장되는 영역도 read-only로만
- 아파치 스파크 : 메모리 데이터의 모디파이가 불가능하게. 그 영역의 이름 RDD
- 스파크는 RDD가 핵심
- RDD 는 쉽게 이야기하면 array임
- 분산돼서 저장될 수 있는 array임.
- 아파치 스파크의 핵심적인 계산 원리
✅ RDD
- spark의 핵심적인 자료구조
- array
- Immutable
- 스토리지에서 파일로 저장돼있는 걸 RDD로 변환을 하거나.RDD를 또 다른 RDD로 바꾸는 것 밖에 안 됨
- 계산을 정의하는 것 : lineage
- lineage를 바탕으로 다시 계산
- RDD -> RDD : transformation
- action이 시작이 될 때 lineage가 실행이 됨
- 분산 처리가 기본 전제임
- 버섯
- transformation
- 앞 화살표 2개는 lineage
- action : rdd로부터 원하는 결과를 얻어내는 동작. 앨리먼트 개수를 얻어내거나.
✅ lazy-execution
- lineage만 생성되는 중.
- 스케줄링을 최적화할 수 있음.
✅ spark runtime
✅ checkpointing
- 중간 중간에 계산 결과를 디스크에 저장
- false에 대한 recovery비용을 줄일 수 있음
✅ Evaluation
- hdfs는 대등한 비교가 아님
- hadoop bm은 스파크 대비 성능이 좋지 않음
- 머신의 수가 늘어도 스파크가 성능이 좋음
- 왜 이렇게 성능의 차이가 나느냐
- 스파크가 좋다
- spark vs in-memory hadoop
✅ wordcount
- map과 flatmap의 차이
- map : 하나하나의 리스트가 그룹으로 구성이 됨. 각 문장에 대해 각 문장별로 오퍼레이션의 결과를 그룹화
- flatmap : 그룹 구별을 달리 안 해주겠다. 영역 구별이 없어짐. 개별요소가 하나의 엘리먼트.
- 그 word를 키로 하고 밸류를 1로 해줌.
- 같은 키를 가진 애들끼리 묶어줌 : reduceByKey
- 우리가 구현할 때는 reduceByKey를 구현하는 것이 아니라 다른 것.
- saveAsTextFile을 시작할 때 앞에 구성한 계산이 실행됨.