Home Airflow Lecture 7
Post
Cancel

Airflow Lecture 7

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 로 로딩
  • 데이터 조작 작업을 진행(판다스와 아주 흡사하다)
  • 최종 결과를 저장한다.

실습

This post is licensed under CC BY 4.0 by the author.