Data Engineering(Pipeline, Hadoop...) 12

[Airflow] 워크플로우 - R Script 실행

dags 내에서 r script를 실행을 편하게 하기 위해, sh 파일을 작성을 우선적으로 해야한다. 1. run_r.sh 작성 #!/usr/bin/env Rscript args = commandArgs(trailingOnly=TRUE) setwd("[나의 경로]") source(args[1]) [나의 경로] 에 default directory로 지정하고 싶은 경로를 나의 분석환경에 맞게 설정만 해주고, 원하는 폴더에 해당 파일을 넣어 둔다. 2. my_dags.py 작성 import os # Get current directory cwd = os.getcwd() with DAG(dag_id="my_dags", default_args=default_args, schedule_interval='50 22 ..

[Airflow] Schedule Timezone을 한국시간(KST) 으로 설정하기

dags 작성을 하는 경우, 아래와 같이 매주 금요일 "2022-12-09 14:00:00" 에 schedule이 실행되도록 하는 코드를 작성했다. dag = DAG ( dag_id = 'workflow_test', start_date = datetime(2022, 12, 9), schedule_interval = "00 14 * * 5", catchup = False, tags = ['test'], description = 'Bash Operator Sample', default_args = default_args ) 그런데, 놀랍게도... 금요일 "2022-12-09 14:00:00" 에는 아무런 일이 발생하지 않는다. (airflow scheduler 가 돌지 않았다.) 이유는 무엇일까? Time ..

[Docker] Jupyter에 가상환경 kernel 추가하기

도커 컨테이너를 활용해, jupyter를 포트포워딩해서 띄운 경우, 다른 가상환경에 설치된 모듈을 이용한 개발이 필요할 때가 있다. 이런 경우, 우선 터미널창에서 가상환경을 실행해보자. (나 같은 경우에는 airflowenv 라는 가상환경을 기존에 가지고 있었다.) # 가상환경 실행 source ~/[나의 가상환경 이름]/bin/activate source ~/airflowenv/bin/activate # ipykernel 설치 pip install ipykernel # 커널 실행 python -m ipykernel install --user --name [나의 가상환경 이름] --display-name [Jupyter 커널에 표기하고자 하는 이름] python -m ipykernel install --..

[Airflow] Dags 관리(예제 Dags 삭제 및 Dags 경로 설정)

# 1. 예제 Dags 삭제하기 초기 Airflow setting이 된 시점부터, 여러 예제 Dags가 있는 것을 확인할 수 있다. 하지만 예제는 참고용일 뿐, 실제 내가 구성한 Dags만 남겨놓고 싶기에, 예제 Dags를 우선 삭제해보자. 삭제는 간단하다. airflow.cfg 파일을 열어 변경해주면 된다. https://dtstory.tistory.com/25 를 참고 하였다면, airflow.cfg 파일은 /root/airflow/ 경로에 있을 것이다. vim /root/airflow/airflow.cfg 명령으로 edit 모드로 진입해보자. 그 후, load_examples = True 라고 되어 있는 부분을 아래 그림과 같이 load_examples = False로 수정해보자 # 2. Dags ..

[Airflow] Devops 환경 구축 (R+Python+Airflow+ssh)

개발 및 분석 용도로 구성한 스크립트들을 스케줄링하여 주기적으로 실행되고 운영이 될 수 있는 환경을 Docker Container 내에서 할 수 있도록 만들어 보자. # 1. python을 사용하기 위한 jupyter docker container 실행 docker run -it -p 34888:8888 -p 34222:22 -p 34787:8787 -p 34080:8080 \ -v mount_vol:/mypath/mount_vol/ --name dtstory -e ROOT=TRUE -e PASSWORD=password tensorflow/tensorflow:latest-jupyter 참고로 해당 컨테이너 리눅스 배포판은 다음과 같다. 배포판 : Ubuntu 20.04.5 LTS \n \l -> ip:3..

Airflow + Python 스크립트 활용 DAG 구성

도커 컨테이너 환경에서 Airflow 를 구축하고, 진행하기를 원한다면 이전 포스팅을 참고하도록 하자. 2022.09.21 - [Cloud Computing/GCP] - GCP + Docker + Airflow 를 이용한 데이터 파이프라인 구축 1으 GCP + Docker + Airflow 를 이용한 데이터 파이프라인 구축 1 # [컨테이너 이름] 을 지정한 후, linux 커맨드에서 아래 명령어를 실행 -v 명령을 이용해, 폴더 마운트 (복수 허용) docker run -it -p 8080:8080 \ -v /home/airflow/dags:/opt/airflow/dags \ -v /home/airflow.. dtstory.tistory.com 우선 필요 패키지 및 실행파일(.py) 를 무작정 설치, ..

Docker Container 날짜(date) 한국시간(KST)으로 변경하기

date 간단하게 date 명령을 통해, 현재 날짜를 확인해보면, 아래와 같이 UTC 기준의 날짜와 시간으로 보이는 것을 확인할 수 있다. 이 시간대를 KST로 바꾸는 것은 간단하다. # systemd 설치 및 Seoul 시간 리스트 확인 apt install systemd timedatectl list-timezones | grep Seoul # 표준시를 Asia/Seoul 로 셋팅 timedatectl set-timezone Asia/Seoul # date 확인 host 서버의 시간을 바꾸는 것은 위와 같이 하면 간단하게 변경이 가능하다. 그러나, Docker Image로 올라간 container 내에서는 위와 같은 방법으로 진행할 경우, 아래와 같은 에러를 발생시킨다. System has not b..

Docker 파헤치기 4(컨테이너 이미지화[commit] -> 배포[push])

오늘은 생성한 컨테이너 환경을 누군가에 공유하고자 할 때 유용한 commit, push 기능에 대해 알아보겠다. 우선 작업한 컨테이너를 멈추어 주자 # docker stop docker stop [컨테이너명] docker stop my_container # 컨테이너 이미지화 docker commit [컨테이너명] [계정명]/[나의 이미지명 정하기]:latest docker commit my_container my_name/my_first_image:latest 이후, docker images 를 통해, 제대로 나의 컨테이너가 이미지화되어 올라갔는지 확인해보자. # 원격 Repository에 push 하기 위해 login --> 계정이 없으신 분은 hub.docker.com 에서 계정을 우선 생성하여야 한..

Docker 파헤치기 3(컨테이너 자원 할당)

여러 컨테이너를 운용하고, 각 컨테이너 별로 사용하는 사용자가 다르다면 서로의 자원이 공유되기 때문에 형평성이 맞게 자원을 분배 할당해야하는 시점이 올 것이다. 오늘은 서버 관리자로 잠깐 빙의해서, 각 컨테이너별 가상의 유저가 있다고 생각하고 자원을 균형있게 할당해보도록 하겠다. # 컨테이너 현재 상태 확인 docker inspect [컨테이너명] docker inspect my_container CpusetCpus, CpusetMems 가 " " 로 비어있는 것을 확인할 수 있다. 비어있는 부분을 채워주어야한다. # 컨테이너 별 현재 cpu, memory 사용량 확인 docker stats --format "table {{.Name}}\t{{.Container}}\t{{.CPUPerc}}\t{{.Mem..

Docker 파헤치기 2(데이터 공유 및 볼륨 마운트)

앞선 포스트에서 언급한 바와 같이, 데이터 공유 및 볼륨 마운트에 대해 알아보고자 한다. 데이터 공유라 하면, Host - Container 간 공유일 수 있고, Container - Container 간 공유일 수 있다. # Host -> Container 데이터 이동 docker cp [host 파일경로] [container name]:[container 내부 경로] (예시) docker cp ~/data/test.md my_container:/root/data/ # Container -> Host 데이터 이동 Host -> Container 로 이동과 반대로 명령을 하면 이동이 된다. docker cp [container name]:[container 내부 경로] [host 파일경로] (예시) do..