본문 바로가기

데브코스/TIL

[TIL] 10주차_Day42: 데이터 파이프라인, Airflow (2)

💡Today I Learned

  • 데이터 파이프라인과 Airflow에 대한 두 번째 수업을 진행했습니다.
  • Airflow 설치 및 실습

1. 트랜잭션 이해하기

- 테이블 업데이트 (Full Refresh vs. Incremental Update)

TRUNCATE: 조건 x, 테이블의 모든 레코드 삭제, SQL 트랜잭션 무시

DELETE FROM: 조건에 맞는 레코드 삭제, SQL 트랜잭션 준수

 

- 트랜잭션이란?

: BEGIN ~ COMMIT/END or ROLLBACK

auto commit = True: 기본적으로 모든 SQL 문이 물리적인 테이블 공간에 바로 커밋됨, BEGIN~END로 바꿀 수 있음

auto commit = False: 모든 operation이 자동으로 커밋되지 않음, 모두 staging 상태로 존재함, 따라서 connection 객체의 .commit()과 .rollback() 함수로 커밋할지 말지 결정

 

2. Airflow 설치하기

- 설치 방법

1. 직접 설치/운영

: 도커 위에서 Airflow 이미지 - 컨테이너 설치

: AWS EC2 등의 리눅스 서버에 직접 설치 (제일 좋은 방법 = 리눅스 서버 위 > Docker Container > Airflow 띄우기)

 

2. 클라우드 사용 (실제 회사의 프로덕션 환경에서 선호됨)

: AWS, 구글 클라우드(Cloud Composer 사용), MS Azure

 

- *) 리눅스 데모

ssh: 리눅스 서버 로그인 프로그램 (private / public key pair)

sudo: 슈퍼유저 (관리자 권한)

apt-get: 프로그램 설치/삭제

su: substitute user, 현재 사용중인 사용자 계정 로그아웃 없이 다른 사용자의 권한 얻기

vi: 텍스트 에디터 (i, :wq!, dd, /, esc, :q! ...)

 

: Airflow 서버에 총 3개의 account 사용 (1. ubuntu_메인 슈퍼유저  2. postgres_postgres 메타DB  3. airflow_airflow 서비스 실행용)

: 슈퍼유저 권한으로 설치하지 x (보안 이슈, 서비스별로 계정을 따로 만들고 계정마다 필요한 권한을 줌)

 

 

3. Airflow 설치 using Docker

- Airflow 코드의 기본 구조

1. DAG 객체 만들기 (이름, 실행주기_crontab 문법, 실행날짜, owner, etc...)

2. DAG 구성하는 task들 만들기 (task별로 적합한 operator 선택)

3. 최종적으로 task들 간의 실행순서 결정

 

- DAG 설정

: catchup = False (시작 날짜 ~ 스케줄링 정책에 따라 밀린 만큼 따라잡기 비활성) → Incremental Update에서만 의미있음

 

- DAG 트리거 (터미널에서 실행)

: airflow tasks test/run [DAG이름] [Task 이름] [날짜]

: test와 run은 동일, run은 실행 결과가 메타데이터DB에 기록됨

 

- Docker 내에서 Airflow 스케줄러 로그인

$ docker ps --돌고있는 컨테이너 확인
$ docker exec -it [docker-scheduler 컨테이너 ID] sh --컨테이너 안에서 shell script 띄우기

 

: 연결 후 커맨드라인으로 Airflow 명령어 실행

  • airflow dags list
  • airflow tasks list dag_v1
  • airflow tasks test dag_v1 ls 2020-08-09
  • airflow dags test dag_v1 2019-12-08
  • airflow dags backfill dag_v1 -s 2019-01-01 -e 2019-12-31
반응형