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=..
airflow 에서 셀러리기반으로 운영할때 DAG 요청을 담는 메시지큐로 rabbitmq 를 주로 사용한다. 그런데 테스트를 위해 모든 노드를 죽였는데 rabbitmq 가 기동을 못하는 상황이 발생되었다. 로그를 확인해보면 다음과 같은 메시지가 error 메시지로 존재했었다. Feature flag 'quorum_queue': migration function crashed Jul 12 18:24:03 my-server001 rabbitmq-server[48802]: * suggestion: start the node Jul 12 18:24:03 my-server001 rabbitmq-server[48802]: rabbit@my-server002: Jul 12 18:24:03 my-server001 ra..
데이터를 다루기 위해서는 다양한 데이터 변환과 조작작업을 주기적으로 수행해야 한다. 이런 행위를 단단히 줄여서 ETL (Extract, Transform, Load) 작업이라고 하는데, 이런 작업을 구성하고 스케쥴 하는 방법에 대해서는 몇년전엔 여러 플랫폼들이 혼재되어있었지만 지금은 AIRFLOW 가 결국 살아 남은거 같다. 과거에는 춘추전국 시대 사실 ETL 을 전문적으로 다루지 않는 부서에서는 Jenkins(젠킨스) 와 Spring Batch(스트림배치) 를 섞어서 주기적인 배치작업을 돌리는 경우도 많다. (Jenkins 는 빌드관리를 위한 용도인데, 희안하게 주위에 배치 스케쥴러로 쓰는 케이스를 꽤 많이 봤다) crontab 을 쓰는것 대비 WEB UI 에서 진행상태나 로그를 확인 할 수 있기 때문..