CTAS의 단점
- 원본 테이블의 속성들(DEFAULT) 이 사라진다.
- 이런 경우에는 단계를 나누어 진행한다.
구글 시트 연동하기
- Google sheet -> RedShift table
API & Airflow monitoring
- curl -X GET –user “airflow:airflow” http://localhost:8080/health
Dag Dependencies
- Explicit trigger
- Reactive trigger
Spark
- MapReduce(Hive/Presto) 보다 빠른 성능
- 과거에는 디스크를 쓰는 Hive에 비해 훨씬 빨랐으나, 요즘에는 Spark 나 Hive 모두 메모리 & 디스크 양쪽을 지원한다.
- 리소스매니저(YARN, K8s) 등 위에 올려서 사용한다.
- 요즘은 MapReduce 사용하지 않는다.
Spark 프로그래밍 API
- RDD( Resilient Distributed DataSet )
- 로우레벨 프로그래밍 API로 세밀한 제어가 가능하다.
- 코딩 복잡도가 증가한다.
- DataFrame & DataSet (판다스 데이터프레임과 흡사)
- 타입정보 명시에 따라, 자유로운 python의 경우 DataFrame, 명시적인 java & scala 의 경우 DataSet 을 사용한다.
- SparkSQL은 구조화된 데이터를 SQL로 처리한다.
- 데이터프레임은 테이블처럼 SQL로 처리 가능하다.
- SparkML, 등등…
예시
- 1) logfile -> s3 -> spark(hive, presto(aws에서는 athena), hive 등등) -> redshift
- 2) ML 모델에 사용되는 대용량 피쳐 처리
Spark 구조
- Driver : 코드가 실행되는 마스터 역할 -> 다수의 Executer : 실제 task를 실행해주는 역할을 수행 (Executor별로 CPU 수와 메모리를 할당한다)
Spark 시스템 아키텍쳐
- 대용량 스토리지에 저장된 데이터를 spark 클러스터로 올려서 -> 처리 -> 외부데이터에서 사용하는 형태
- 데이터가 병렬처리가 가능하려면 데이터가 나눠져있어야 한다.
- 데이터를 block 단위로 쪼개서 병렬처리 함으로서 처리속도를 높인다.
- 처리할 수 있는 데이터의 크기 또한 커지게 된다.
- 개발자의 개입 없이 발생하는 여러 문제들을 핸들링 가능하다
셔플링
- group by 와 같이, key의 값을 중심으로 한데로 모여야 하는 케이스의 경우에는 key값을 가지는 block이 어떤식으로 분산되어 있는지에 따라 처리속도가 크게 따라진다.
- 따라서 group by, sort 등등 새로운 block이 만들어져야 하는 경우에 발생한다.
- 네트워크를 타고 데이터가 이동하는데, 이때 시간이 많이 걸리며, 셔플링이 수행하는 경우 데이터가 편향되어 한쪽에 몰리게 되면
Data Skewness
가 발생한다. -> 요걸 잘 해결하는 것이 결국은 핵심이다!
Spark Programming
- Spark 세션(Spark cluster 와 통신하는 객체) 생성
- 입력데이터를 Spark Cluster 로 로딩
- 데이터 조작 작업을 진행(판다스와 아주 흡사하다)
- 최종 결과를 저장한다.