내 mac pro 에서 airflow 2.x 버전대를 빌드하면서 compile assets 를 이용한 ui 빌드를 시도하는데 다음과 같은 오류가 발생했다. 결론부터 말하면 mac 에 md5sum 바이너리가 없어서 실패난 현상이었다. (airflow) user@AL0000001 airflow % python setup.py compile_assets gitpython not found: Cannot compute the git version. /Users/user/.virtualenvs/airflow/lib/python3.8/site-packages/setuptools/installer.py:27: SetuptoolsDeprecationWarning: setuptools.installer is deprec..
DAG 를 만들었는데, 로직이 로딩되지 않았고, 로그를 뒤져보니 아래와 같은 오류가 발생했다. 오류가 나는 현상을 역추적해보니 dag 를 구성한 python 로직에 한글주석이 존재할 경우 아래와 같은 오류가 발생함을 발견했다. UnicodeEncodeError: 'charmap' codec can't encode characters in position 217-220: character maps to [2023-02-01 18:23:52,445] {logging_mixin.py:115} INFO - [2023-02-01 18:23:52,445] {dag.py:2439} INFO - Creating ORM DAG for my_test_dag [2023-02-01 18:23:52,459] {logging_m..

execution_date 이해하기 Airflow 에는 execution_date 라는 개념이 있다. 그런데 매우 헛갈리게 이름을 정한거 같다. 이름만 보면 Processing 되는 시간으로 보이지만, 사실은 스케쥴의 시작시간으로 보면 더 이해가 빠르다. 스케쥴의 간격은 10분이라고 가정하고, 특정 시점을 예로 값을 정리하면 아래와 같다. 구분값 날짜 예시 Processing Time (스케쥴된 실행시점) 2023-02-21 12:40:02 prev_execution_date 2023-02-21 12:20:00 execution_date 2023-02-21 12:30:00 next_execution_date 2023-02-21 12:40:00 왜 이런값이 나올까? crontab 을 기반으로 작업하는 사람..

airflow 2.x 버전에서는 timezone 처리가 가능하다. execution_date 를 로컬날짜 기준으로 사용하기위해서는 python 코드에서 로컬타임존 세팅후 전환하는 로직을 호출해주면 해결이 되는데, 문제는 DAG 의 실행결과를 확인하기위한 로그의 날짜가 버그가 존재한다. 어떤 상황이냐면, airflow 가 설치된 서버의 타임존은 한국기준로 세팅되어있고, 실행된 시점은 "Tue Feb 21 12:30:02 KST 2023" 이라고 가정하자. 편의상 시간만 보면 한국시간으로 12시 30분이라고 보면 된다. [2023-02-21, 21:30:02 KST] {subprocess.py:85} INFO - Output: [2023-02-21, 21:30:02 KST] {subprocess.py:92}..
Airflow 에서는 Docker 를 사용하기위한 DockerOperator 가 존재한다. 그리고 도커 이미지가 잘 동작하는지 확인하기위해 docker run 명령어를 이용해서 실행해보고 이를 airflow 의 DAG 로 등록하는 경우가 많을것이라고 생각한다. 그런데 이걸 DockerOperator 로 구성할때 인자값이 헛갈리는데 이를 비교해서 구성하는 예시를 안내하로자 한다. Docker 커맨드로 실행하는 예제 아래와 같은 명령어로 docker run 을 테스트해보았다고 가정하겠다. 볼륨 마운트와 EntryPoint 변경 그리고 CMD 에 환경변수 까지 존재하는 여러 케이스를 나열한 샘플이다. 그럼 이걸 AirflowDAG 로는 어떻게 표현할까? % docker run --entrypoint /keyt..
airflow 2.x 버전을 설치하여 관리하고 있었는데, 다음과 같은 오류가 발생했다. UnicodeEncodeError: 'charmap' codec can't encode characters in position 217-220: character maps to 실행되기전에 오류가 난것이기 때문에, airflow scheduler 로그에 해당 로그가 남아있었고, 한참 원인을 찾아 헤맸는데 원인은 한글 주석이 영향을 주는것이었다. [2023-02-01 18:23:52,459] {logging_mixin.py:115} INFO - [2023-02-01 18:23:52,459] {dag.py:2968} INFO - Setting next_dagrun for my_test_dag to 2023-02-01T09..
하둡클러스터에 kerberos 인증이 있다면, kinit 명령을 통해서 인증을 거친후 hadoop 명령어를 사용할 수 있다. 하지만, BashOperator 에서 매번 kinit 명령을 넣어서 DAG 를 구성하는건 꽤 번거로운일이다. 왜냐하면, 사용자가 암호를 생략하려면 keytab 파일을 사용해야 하는데 경로를 매번 기억해서 쓰는것도 번거롭다. 다행히 airflow 에서는 커버로스 인증을 주기적으로 하는 옵션이 존재한다. airflow kerberos 사용하기 우선 airflow.cfg 설정에 커버로스 관련 인증 설정이 필요하다. 당연히 인증을 위한 keytab 파일도 존재해야한다. [core] ... security = kerberos .... [kerberos] ccache = /tmp/airflo..

Airflow 에서 "hive_cli_default" Connection 을 설정할때, Extra 옵션에 {"use_beeline": true} 를 추가하면, beeline 을 통해 쿼리를 실행한다. 근데, 기본적으로 -hiveconf 옵션에 airflow.ctx.* 패턴의 값이 추가되면서 아래와 같은 오류가 발생될 때가 존재한다. java.lang.IllegalArgumentException: Cannot modify airflow.ctx.dag_id at runtime. It is not in list of params that are allowed to be modified at runtime 이 오류를 재현하는 방법은 beeline 을 실행할때 -hiveconf airflow.ctx.dag_id=..