홍카나의 공부방

[Airflow] 쉘 스크립트(Shell) 실행하기 본문

Data Engineering/Airflow

[Airflow] 쉘 스크립트(Shell) 실행하기

홍문관카페나무 2023. 11. 12. 18:37

대표적인 Shell인 Windows의 cmd

 

 

쉘 스크립트는 Unix/Linux Shell 명령을 이용하여 만들어지고, 인터프리터에 의해 한 줄씩 처리되는 파일이다.

주로 파일 이름에 .sh 확장자를 붙인다.

 

Airflow의 Bash Operator 안에다가 shell 명령어를 입력하면 동작하게 된다.

쉘 명령어는 복잡한 로직을 처리하는 경우에 사용한다.

 

Worker 컨테이너가 쉘 스크립트를 수행하려면, 쉘 파일을 인식하게 만들어야 한다.

그러나 Docker의 특성상 컨테이너는 외부의 파일을 인식할 수 없다.

그리고 컨테이너 안에 파일을 만들어줘도 컨테이너 재시작시 파일이 사라진다.

 


 

 

이에 대한 해결 방법은 /plugins:/opt/airflow/plugins 폴더에 쉘 파일을 넣어두는 것이다.

 

 

.yaml 파일을 확인하면 위치를 확인할 수 있다.

 

 

.yaml 파일에는 기본적으로 Docker Volume을 사용하기 위한 설정이 준비되어있다.

airflow 공식 가이드에는 custmomize하게 만든 파일(.sh 등)은 해당 플러그인 위치에 배치하라고 나와있다.

 

airflow docs

 

 

아래는 Shell을 수행하기 위한 DAG 코드의 예시다.

 

 

from airflow import DAG
import pendulum
import datetime
from airflow.operators.bash import BashOperator

with DAG(
    dag_id="dags_bash_select_fruit",
    schedule = "10 * * * *",
    start_date = pendulum.datetime(2023, 11, 1, tz='Asia/Seoul'),
    catchup = False
) as dag:

    t1_orange = BashOperator(
        task_id = "t1_orange",
        bash_command="/opt/airflow/plugins/fruit_choose.sh ORANGE",
    )

    t2_banana = BashOperator(
        task_id = "t2_banana",
        bash_command="/opt/airflow/plugins/fruit_choose.sh BANANA",
    )

    t1_orange >> t2_banana

 

 

반응형