6. airflow-day1-6

김종욱·2023년 6월 6일
0

학습주제
컴포넌트,
학습내용

대그 수가 늘어가면 용량이 부족해지기 시작 - 스케일링 필요
코드의 구조를 살펴본다.

구성


웹 서버: 파이썬 플라스크
스케줄러: 정해진 시간에 실행. 순차적 태스크 실행
워커:테스크 코드를 실행
메타 데이터베이스: 스케줄러, 워커, 파이프라인 정보. Sqlite가 기본 설치. 싱글 쓰레드, 파일기반 데이터베이스. 보통은 mysql, postgre설치해서 사용함
큐: 다수 서버로 에어플로우 구성하는 경우, 워커가 한대 서버 용량으로 제약이 생김. 늘어난 서버는 워커용으로 사용. 데이터 파이프라인 특정 태스크가 어느 워커에서 실행될지 미리 정할 수 없음. 큐에 넣어놓고 놀고있는 워커에게 큐에 있는 태스크를 줌.
executor가 어떤 종류에 따라 서버 1대라도 큐 사용

에어 플로우는
웹서버 스케줄러: 마스터
워커: 일꾼. 스케일링한다 - 워커 수를 늘림
메타 데이터 데이터베이스: 기록
큐: 분산 처리
executor 차후에 설명


대그(파이프라인)을 스케줄러가 워커들에게 배정함.(정확히 대그 안에 태스크를 스케줄링)
실행 결과를 웹 UI
관리 UI, 사용자 로그인 등
워커는 실제로 대그 안의 태스크를 실행


워커의 수 결정: 서버가 갖고있는 CPU 숫자 만큼 설정. CPU가 6개가 있으면 6개의 워커가 동시에 동작
웹 서버는 파이썬 플라스크

별도로 메타데이터 데이터베이스 - 실제로는 mysql, postgres 사용

동시에 실행할 수 있는 태스크의 수가 제약됨.
한대만으론 부족하게 됨.
스케일링을 할 때


두가지 접근
스케일 업 - 서버 자체의 사양을 높임 (CPU, 메모리 증가, 한계 있음)
스케일 아웃 - 서버의 수를 늘림. (관리는 좀 더 힘들어짐, 나머지는 워커 용도)

맥스님: 처음에 한대짜리 세팅, 용량 부족시, 스케일 업 방식, out은 비용도 늘고 관리도 힘들어짐. 더 이상 업이 불가할 때 out을 함. airflow를 제공하는 클라우드를 쓰는 게 훨씬 좋음.

보통 빅데이터 시스템에서 항상 사용하는 용어
굉장히 유기적인 하나의 컴퓨터 처럼 보이지만, 프로토콜, 제어방식 협업구조임.


메타데이터 DB와 연결
다수의 워커, 노드들이 있고, 통신은 큐를 통해서 하게 됨.
스케줄러가 바로 워커 주는게 아니라, 엑시큐터 통해서 넘겨줌
엑시큐터 무엇이냐 따라 큐 사용여부 달라짐

다수서버 - 워커가 여러개


UI에서 웹서버와 통신.
코드를 만드는 대그 디렉토리, 특정 폴더에 파이썬으로 작성한 데이터 파이프라인 코드를 위치. 이 디렉토리를 에어플로우가 주기적으로 파싱함. DB에 기록함. 지정시간에 가져다가 워커에게 일을 나눠줌. 이때 스케줄러가 엑시큐터 통해서 주게 됨.
엑시큐터 특성에 따라 큐 유무 갈림.

우측에 보면 다양한 엑시큐터 있음
sequential이 기본. 보통 잘 안 씀
local Executor을 써볼 예정. (많이 씀)


장점

  • 데이터 파이프라인 세밀 제어.
  • 다양한 파이썬 모듈, 데스티네이션 DW 지원함. 코딩 수고 덜어줌
  • 데이터 엔지니어의 삶을 불행하게 만드는 백필을 쉽게 해줌. (알려주는대로 코딩)

단점

  • 러닝 커브가 있음. (그래서 차근차근 설명해주심. 이해 안되는 부분 반복)
  • 개발 환경을 구성하기 쉽지 않음 (다수 서버로 구성하는 순간, 운영비용이 상당히 큼 최대한 airflow 한대로 구성해서 쓰다가 스케일 업, 정 안되면 스케일 아웃. 직접 스케일 아웃해서 다수 서버 운영 X 클라우드에서 제공하는 airflow 서버 사용바람)
  • 다수 에어플로우 서버를 쓸정도면 회사가 경제적으로 어렵진 않을 것임.


ETL을 부르는 말.
태스크로 구성됨.
오퍼레이터로 만들어짐 - 테스크
class를 생각하면 됨. (OOP 개념)
굉장히 많은 오퍼레이터들이 있음.
에어플로우가 빌트인 해서 제공, 커뮤니티 형태로 제공.
찾아보고 임포트 한 뒤, 적당한 파라미터를 주면 내가 원하는 태스크가 실행.
파이썬 코드를 처음부터 끝까지 -> 파이썬 오퍼레이터 사용
대그 - 태스크 집합
에어플로우 코딩 -> 대그 인스턴스 -> 대그 구성하는 태스크들을 오퍼레이터 형태로 구성


3개의 태스크로 구성
실행 순서는 직렬


t2, t3가 병렬 실행되게 할 수 있음

profile
반갑습니다 햄스터 좋아합니다

0개의 댓글