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..
커버로스 기반으로 하둡 클러스터를 관리하고 유저권한을 keytab 으로 관리하다보면, 별도의 유저별로 바꿔서 실행해야 하는 경우가 종종 있다. 그런데 이상하게 아래와 같은 오류가 발생할 때가 있는데, 원인은 HADOOP_PROXY_USER 를 사용하지 않는 상황인데, 해당 값이 지정된 경우 발생된다. % hadoop fs -ls ls: User: flink@MY.HOME.SERVER.COM is not allowed to impersonate sample 해결방법 권한관리를 하다보면, 여러케이스의 유저권한이 존재할 수 있는데, 유저 여러개의 권한을 하나에 부여하고, HADOOP_PROXY_USER 를 지정해서 유저를 지정해서 해당 권한으로 사용하는게 가능하다. 일종의 슈퍼키(?) 처럼 큰 권한을 받은 녀..
하둡에서 권한관리가 되어있을때 나타나는 문제이다. 다음과 같이 hive catalog 를 등록하려고 했는데 다음과 같은 오류가 발생한다. 참고로 커버로스 인증으로 구성된 하둡 클러스터 환경에서 flink 유저를 만들어서 사용한 케이스이고, 원인은 Ranger 에서 flink 유저는 hive 의 warehouse 패스의 hdfs 접근이 제한되어있기 때문에 나타나는 현상이다. Flink SQL> create catalog myHive with( 'type' = 'hive' , 'hive-conf-dir' = '/usr/hdp/3.3.0/hive/conf'); [ERROR] Could not execute SQL statement. Reason: org.apache.hadoop.hive.metastore.ap..
kerberos 인증을 위한 정보는 기본적으로는 /etc/krb5.conf 가 기본경로로 되어있다. 하지만, 경우에 따라서는 이 파일을 변경하지 않고 임의로 지정하여 실행해야 하는 경우가 생긴다. 이때 hadoop 명령어 실행시 관련 경로를 지키지 않았을경우 다음과 같은 오류가 발생된다. # ----------------------------------------------- # 커버로스 인증 (krb.conf 가 별도의 경로에 있음을 인지하자) # ----------------------------------------------- % export KEYTAB_PATH=/Users/myUser/hadoop3/keytab % export KRB5_CONFIG=/Users/myUser/hadoop3/key..
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..
HDFS 라이브러리가 없다? Flink 를 테스트로 운영할때는 HA 나 savepoint, checkpoint 정보가 필요없을수 있지만, 운영환경에서 관리하기위해서는 해당 정보가 남을수 있도록 해야하고, 이럴때 HDFS 를 연계해서 사용한다. 그러다보니 내가 사용하는 하둡클러스터의 환경에 영향을 받는다. 즉, 관련된 세팅을 했을때 아래와 같은 오류가 발생한다면 hdfs 연결을 못하는 상황일 확률이 크다. java.io.IOException: Could not create FileSystem for highly available storage path org.apache.flink.core.fs.UnsupportedFileSystemSchemeException: Could not find a file sy..