수업 1108

galoo·2023년 11월 8일
0

HelloVision Dx Data School

목록 보기
72/72

docker-compose 실행

  • docker-compose -f 컴포즈파일경로 up --build

이미지 실행 여부 확인

도커 엔진 확인

  • docker ps
  • 브라우저에서 8080으로 접속해서 설정된 아이디와 비밀번호를 입력해서 모니터링 가능한지 확인
  • postgresql도 같이 설치하기에 db접속도구에서 localhost의 5432번 포트에 airflow라는 스키마에 airflow 아이디로 airflow 비밀번호를 이용해서 접속

Airflow의 목적

  • 주기적(배치)으로 데이터를 수집(로그나 크롤링)해서 가공(전처리)하고 저장(반영구적 저장소)하는 역할

✔ 로그를 수집할 웹 서버 생성 - Flask 구성

  • FAST API, Django 등 상관은 없음
  • 로컬에서 실행해도 되고, 배포를 해도 됩니다.
  • 로그를 기록할 때, 파일로 기록하기도 하지만, REST API 형태로 로그 수집기가 로그를 수집할 수 있도록 리턴하기도 합니다.

필요한 패키지 설치

  • click, faker, flask, pandas
  • 가상환경말고 그냥 해보자

로컬에서 실행

  • python app.js

EC2에서 실행되도록 수정해보자

  • EC2에는 파이썬이 없으니 그걸 설치하고 작업해야 한다.
  • EC2위의 서버를 실행하고자 하는 경우, 파일을 EC2로 복사할 수 있다.
    - 복사를 잘 이용하자
    - app.py를 만들어놨으니까 이걸 쓰자고
    - 가상환경에서 작업했다면, freeze 해서 requirements 내보내서 해도 될거야

로컬에서 EC2로 파일을 전송

  • windows는 ppk파일 경로를 주자
  • pscp -i ppk파일경로 전송할파일경로 계정@EC2ip:저장될파일경로

파이썬 설치(명령은 python대신에 python3일 수 있습니다)

  • sudo apt-get update
  • sudo apt-get install python
  • python --version

필요한 패키지 설치

  • click, faker, flask, pandas
  • python pip보 설치하자
  • sudo apt-get install python-pip

실행

  • 모든 곳에서 접속할 수 있도록 실행
  • flask run --host=0.0.0.0

EC2에서 5000포트를 외부에서 접속할 수 있도록 허용

로컬 컴퓨터에서 IP:5000/events로 접속해보자

스케줄 설정이 없는 DAG를 사용

  • Docker-Compose에서 dag디렉토리와 볼륨 연결을 했기 때문에 docker-compose.yml이 있는 곳에 dag디렉토리를 생성해서 그 디렉토리 안에 DAG파일을 생성하면, airflow가 자동으로 인식한다.

웹 브라우저에서 새로고침하거나 컨테이너 재실행하면 dag 확인가능

DAG 활성화하고 action

scheduler의 bash에 접속

  • docker exec -it 컨테이너ID /bin/bash
  • cd /tmp 해서 json이 나왔는지 확인하자

작업

  • 웹에서의 데이터 수집은 bashOperator를 이용하고, 가공 작업은 PythonOperator를 이용하고, 외부와 연동할 때는 연동하는 Provider의 Operator를 이용합니다.

DAG가 안보인다면

  • docker-compose.yml있는 디렉에 dags 디렉이 있는지 확인하자

failed라면

  • graph view에서 log를 확인하자

web push, apns, fcm, kafka, rabbitMQ 이건 알아두자..

  • 만들어진 이유는?
    -

✔ 스케줄링 설정

설정 항목

  • schedule_interval
    - 간격
  • start_date
    - 시작 날짜
  • end_date(선택)
    - 종료 날짜

간격에 해당하는 매크로

  • @once : 한 번
  • @hourly
  • @daily
  • @weekly
  • @monthly
  • @yearly

cron 형태가 가능합니다

  • 분 시간 일 월 요일
    - 위와 같은 형태로 존재함
  • 시간마다 수행
    - * 0 * * *
  • 매일 자정마다 수행
    - * 0 0 * *
  • 콤마(,)가능
    - * 0 * * MON, WED, FRI : 월 수 금 매 시간마다

datetime의 timedelta를 이용하면 일정한 간격 가능함

dag = DAG(
    dag_id="unscheduled", # with_end_date
    start_date=datetime(2019, 1, 1), # end_date=datetime(2019,1,5)
    schedule_interval=None # @daily, @hourly
)
  • 이 때,schedule_interval=dt.timedelta(days=3)을 하면 3일마다로 설정

✔ 데이터 증분 처리

서버를 만들 때 주의할 점

  • 데이터가 많은 경우, 한 번에 데이터를 제공하는 것은 트래픽 증가가 불가피하고, 데이터가 업데이트 될 때, 너무 많은 데이터를 전송하게 됩니다.
  • 많은 양의 데이터를 클라이언트에게 전송해야 하는 경우(Open API)에는, 파라미터를 이용해서 데이터를 잘라서 제공하는 것에 대해서 고려해야 합니다.

클라이언트나 데이터 수집기를 만들 때 주의

  • 주기적으로 데이터를 수집하는 경우, 데이터를 변경된 부분만 받아서 쌓는것에 대해서 고민해야 합니다.
profile
밀가루 귀여워요

0개의 댓글