Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 컴퓨터네트워크
- 컴퓨터 네트워크
- Django
- 데이터 엔지니어링
- 데브코스
- airflow
- HADOOP
- 자료구조
- 데이터 파이프라인
- TIL
- 정리
- S3
- TCP
- Docker
- http
- 데이터베이스
- dockerfile
- linux
- sql
- AWS
- 종류
- airflow.cfg
- redshift
- 가상환경
- 운영체제
- 데이터엔지니어링
- 데이터 웨어하우스
- PYTHON
- 파이썬
- Go
Archives
- Today
- Total
홍카나의 공부방
[DE 데브코스] 06.04 TIL - 트랜잭션과 Airflow 설치 본문
DELETE FROM vs TRUNCATE
- 분명 DROP까지 포함해서 삭제 쿼리문들의 차이점을 정리해놨었는데, 트랜잭션에서 레코드를 다 날려버릴 때 왜 DELETE를 쓰지? 잠시나마 고민했었다. 생각해보니 TRUNCATE가 auto commit이 되는 명령어라 트랜잭션을 이용하기 어렵겠구나하는 판단이 들었다.
- https://hongcana.tistory.com/102 정리본을 다시 읽어보자..
트랜잭션에서 try/except를 사용할때 주의점
try:
cur.execute(sql)
cur.execute("COMMIT;")
except:
cur.execute("ROLLBACK;")
raise
- 위 코드 처럼 except에서 raise를 호출하면 발생했던 exception이 상위 코드로 전파된다.
- 즉, 예외 처리를 더 상위 레벨에서 수행할 수 있게 한다.
- ETL을 관리하는 입장에서 어떤 에러가 감춰지는 것보다는 명확하게 드러나는 것이 좋다.
Airflow Setup
- 직접 설치하고 운영하는 방법과 AWS의 MWAA처럼 클라우드를 사용하는 방법이 있다.
- 클라우드는 기본적으로 서버 3대를 돌리기 때문에 비용 부담이 생긴다. 그래서 직접 설치하여 사용해 보겠다.
- 직접 설치는 개인 컴퓨터에 Docker를 설치한 뒤에 Airflow를 설치하는 방법을 사용할 수 있다.
리눅스 이해하기
- 우분투(ubuntu) : 리눅스 타입 중의 하나로, 다른 타입은 데비안, 레드햇, 페도라 등이 있다.
- ssh : private key와 public key를 이용하여 리눅스 혹은 유닉스 서버에 인증을 가능케 하는 프로그램(터미널)이다.
- sudo : 보통 슈퍼유저로서 프로그램을 구동할 수 있도록 하는 프로그램이다.
- apt-get : 우분투/데비안 계열의 리눅스에서 프로그램 설치/삭제를 관리하는 프로그램이다. ( apt-get install... )
- su : substitute user의 약자로 현재 사용 중인 사용자 계정을 로그아웃하지 않고, 다른 사용자의 권한을 얻을 때 사용한다.
- vi : 리눅스 계열에서 사용하는 텍스트 에디터다.
Airflow 설치 과정(using Docker)
- 먼저 Docker Engine을 각자 컴퓨터에 설치한다.
- Docker를 실행하고 설정 메뉴에서 메모리 할당 부분을 맥은 4GB, 윈도우 6GB로 부여한다.
- 터미널 프로그램을 실행하고 airflow를 설치할 적당한 폴더로 이동한다.
- airflow-setup Github repo를 클론한다.
- cd airflow-setup 이후, 2.5.1 이미지 관련 yaml 파일을 다운로드한다.
- docker-compose 명령을 수행하여 이미지 다운로드와 컨테이너를 실행한다.
- 로컬호스트 8080번 포트로 들어가서 airflow:airflow를 계정으로 입력하여 접속하면 되는데, 추후 이게 인터넷 환경으로 배포될 경우, 계정 정보를 꼭 보안 측면에서 변경해줘야 한다.
- 설치가 정상적으로 완료되었다면 위 사진과 비슷하게 Container 정보가 나올 것이다. init 프로세스가 비활성화 되어있는데, init은 초기화를 위한 프로세스로 본인 역할이 끝나서 실행되지 않는 것이다.
Airflow 기본 프로그램 실행
- airflow 코드의 기본 구조는 DAG를 대표하는 객체를 먼저 만들고, DAG를 구성하는 태스크들을 만들면 된다.
- 태스크를 만들 때는 태스크별로 적합한 오퍼레이터를 선택하고, 태스크 ID를 부여하고 해야할 작업의 세부사항을 지정한다.
- 최종적으로는 태스크들 간의 실행 순서를 결정하면 된다.
- DAG를 설정할 때는 먼저 모든 태스크들에 공통으로 적용되는 설정을 default_args라는 딕셔너리로 만들어준다.
from datetime import datetime, timedelta
default_args = {
'owner': 'hongcana',
'email': ['hongcana@kakao.com'],
'retries': 1,
'retry_delay': timedelta(minutes=3),
}
- 그다음 실제로 DAG를 만들면 된다.
from airflow import DAG
dag = DAG(
"dag_v1", # DAG name
start_date = datetime(2020,8,7,hour=0,minute=00),
schedule = "0 * * * *",
tags =['example'],
catchup=False,
# common settings
default_args = default_args
)
- 위 코드에서 Catchup은, start_date와 현재 date 간의 간격이 있을 때 그 간격을 메꾸느냐, 메꾸지 않느냐를 정의할 때 사용한다.
- 현재는 False니까 그 간격을 메꾸지 않겠다는 뜻이 된다. 예를 들어 Full refresh를 한다고 했을 때 과거와의 시간 간격을 맞출 필요는 없기 때문에 False로 설정하는 것이다.
- schedule은 각각 Minute, Hour, Day, Month, Week인데 크론 익스프레션으로 None, @once, @hourly.. 로 작성할 수도 있다.
- 웹 UI를 통해서 DAG의 여러 정보를 살펴볼 수 있다.
- 커맨드 라인의 실행은 다음의 게시글을 참조한다.
- https://hongcana.tistory.com/118
반응형
'Data Engineering > 프로그래머스 데브코스' 카테고리의 다른 글
[DE 데브코스] 06.05 TIL - Airflow 예제 (0) | 2023.06.06 |
---|---|
[DE 데브코스] 05.25 TIL - Redshift 심화, Fact/Dimension/외부테이블과 View 차이점 등 (0) | 2023.05.25 |
[DE 데브코스] 05.23 TIL - Redshift, Serverless, ELT 예시 (0) | 2023.05.24 |
[DE 데브코스] 05.22 TIL - 데이터 팀에 대하여, DevOps 등 (0) | 2023.05.22 |
[DE 데브코스] 05.19 TIL - Lambda, Docker (0) | 2023.05.19 |