iT邦幫忙

2023 iThome 鐵人賽

DAY 18
2
AI & Data

Airflow 是什麼? 能吃嗎 ? 數據水管工的超級蘑菇系列 第 18

[day18] 急!在線等!求解20 點!Airflow 安裝 Python 模組

  • 分享至 

  • xImage
  •  

安安~在嗎~各位大大~什麼!這種梗透露年齡了嗎~該不會大家都千禧年之後出生的吧/images/emoticon/emoticon16.gif/images/emoticon/emoticon05.gif~趕快開始今天的內容吧~

Before Install Library

建立測試 DAG

先建立一個 dag 用於顯示目前的 library 版本,要顯示的 library 有 requesets 和 pytest

劇透一下~ 這兩個都是後面專案會用到的模組/images/emoticon/emoticon31.gif

import requests
import pytest
from datetime import datetime
from airflow.decorators import dag, task

@dag(schedule=None, start_date=datetime(2023, 10, 3), catchup=False)
def show_module_version():
    @task
    def show_version():
        return {"requests version": requests.__version__, "pytest version": pytest.__version__ }

    show_version()

show_module_version()

Before Before Install Library

  1. 目前我的舉例和環境都是基於 docker 環境,如果還沒有用 docker 安裝 airflow,可以 🎵 moutain top 就跟著一起來 🎵 :
  2. 如果不知道什麼是 docker,可以 🎶 回到最初的起點 🎶 :
  3. 如果發現上方的dag寫法和你用的不一樣,沒看過@dag@task,可以 🎵 回憶過去 🎵 :
  4. 記得做任何事之前要先開啟 Docker Desktop
  5. 記得用 docker-compose 安裝的 airflow 環境,Web UI 帳號密碼都是 airflow

方法一:設定 _PIP_ADDITIONAL_REQUIREMENTS 參數 (for dev environment)

step 1 : 查看 docker-compose.yaml

注意:airflow 2.1.1之後才可以用

  • 在 docker-compose.yaml 當中可以看到有 _PIP_ADDITIONAL_REQUIREMENTS 參數
_PIP_ADDITIONAL_REQUIREMENTS: ${_PIP_ADDITIONAL_REQUIREMENTS:-}

step 2 : 新增 .env 環境變數

  • 專案目錄架構如下
--docker-airflow
    |__dags/
    |__logs/
    |__plugins/
    |__config/
    |__docker-compose.yaml
    |__.env

在.env當中加入環境變數設定

_PIP_ADDITIONAL_REQUIREMENTS=pytest==7.3.2

step 3 : 重新 create docker 容器

docker-compose up -d

官方提醒: 建議不要將 _PIP_ADDITIONAL_REQUIREMENTS 用於正式環境,僅用於開發的功能。

step 4 : 執行 DAG 檢查

https://ithelp.ithome.com.tw/upload/images/20231003/20135427FGBkam4Rz8.png

有發現我們根本沒安裝 requests 模組嗎,怎麼沒有 error,因為 requests 模組在我們安裝 airflow 時就已經安裝了,如果想知道安裝 airflow 到底還安裝哪些模組,可以進到 docker container 當中執行 pip list 就可以看到了~

方法二:使用 Dockerfile

step 1 : 將 Dockerfile 和 requirements.txt 放到專案裡

  • 專案目錄架構如下
--docker-airflow
    |__dags/
    |__logs/
    |__plugins/
    |__config/
    |__docker-compose.yaml
    |__Dockerfile
    |__requirements.txt

step 2:建立 requirements.txt

pytest==7.4.2
requests==2.31.0

step 3:建立 Dockerfile

  • Dockerfile 如下,FROM 代表 base image,COPY 專案下的檔案到 Image,RUN 執行 pip install 安裝 requirements.txt 裡面的 library 和指定的版本
FROM apache/airflow:2.7.1
COPY requirements.txt .
RUN pip install -r requirements.txt

記得 apache/airflow:2.7.1 的版本號要換成你自己的喔~

step 4:修改 docker-compose.yaml

將在 image: XXX 下方的 # build: 註解打開,把上方的 image: XXX 註解起來

version: '3.8'
x-airflow-common:
  &airflow-common
  image: ${AIRFLOW_IMAGE_NAME:-apache/airflow:2.7.1}
  # build: .
  environment:

上面↑ 要修改成 下面↓

version: '3.8'
x-airflow-common:
  &airflow-common
  #image: ${AIRFLOW_IMAGE_NAME:-apache/airflow:2.7.1}
  build: .
  environment:

代表沒有要用 image: XXX 這個 image 建立 Container,要使用自訂的 Dockerfile 設定 Image 建立 Container,. 代表使用當前 Dockerfile 所在的路徑。

step 5:重新 create docker 容器

docker-compose up -d

docker-compose 會從 Dockerfile 重新建立 Image,再 create 新的 docker 容器

  • 如果 create 容器失敗,可以用重新 build 一個 Image 再 create
docker-compose build --no-cache

step 6:執行 DAG 檢查

有發現我故意在方法一:設定 _PIP_ADDITIONAL_REQUIREMENTS安裝 pytest 之前的版本,這樣方法二:使用 Dockerfile安裝完才看得出來啊~

結語

這樣回答不知道拿不拿的到 20 點/images/emoticon/emoticon01.gif
明天終於要來講 airflow 的 schedule 排程和時間問題了,這個我覺得有很多「坑」的主題~


上一篇
[Day17] Airflow 連接到 Database 的三種方法
下一篇
[Day19] Airflow Scheduler 排程爬坑筆記(上)
系列文
Airflow 是什麼? 能吃嗎 ? 數據水管工的超級蘑菇30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
Shawn
iT邦新手 4 級 ‧ 2023-10-03 22:38:41

方法二 : docker-compose 如果跑到「記憶體不足」,代表 docker Desktop 資源需要再開大一點/images/emoticon/emoticon02.gif

我要留言

立即登入留言