![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bCjfiQ/btr0ik6GrrG/fHXqDuKxXsQKxamwLODuBk/img.png)
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 을 기반으로 작업하는 사람..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bEkjib/btr0hecEeZJ/6ulksUnEjdMijR7Q1Rw5k0/img.png)
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..
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..
이미지를 입맛에 맞게 사용할때, 이미지를 새로 빌드하지 않고 실행시점에 ENTRYPOINT 를 엎어써서 사용하는게 유용하다. 이때, ENTRYPOINT 와 CMD 의 특징을 이해하고 작업하면 도움이 되므로 차이를 모른다면 아래글을 읽고 테스트해보자 2022.09.21 - [docker & kube] - [Docker] RUN, ENTRYPOINT, CMD 차이 이해하기 로컬에서 인사말 출력하기 이해를 돕기위해 아래와 같은 동작을 하는 쉘스크립트를 도커에서 어떻게 구성할지에 대해 접근해보자. 아래와 같은 쉘스크립트 동작을 도커에서 동작하게 한다고 가정한다. % cat /home1/user/hello.sh #!/bin/bash for name in $@ do echo "안녕하세요! 님 반갑습니다." done..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/dUVylY/btrZexFU1eM/wAK807jb4in781dDole8ak/img.png)
테이블을 생성하려고 했는데 아래와 같이 "HiveAccessControlException Permission denied" 오류가 발생하면서 CREATE 를 실패한다면, 권한관리를 위해서 ranger 를 사용하고 현재 유저는 해당 db 경로에 권한이 없기 때문에 나타나는 현상이다. hive> create table if not exists info.t_user ( ID string comment '[K] 아이디' ,NAME string comment '이름' ,AGE int comment '나이' ,ADDRESS string comment '주소' ) comment '회원정보' stored as ORC tblproperties ("orc.compress"="ZLIB"); Error: Error while..
도커를 사용하다보면 사용하는 용량이 점점 커지면서 100% 채우면서 서버 로그인도 안되는 상황이 발생되기도 한다. 이럴때 할수 있는 조치는 크게 2가지가 있다. 1. 미사용 리소스 삭제하기 centos 기준 docker 의 기본 경로는 "/var/lib/docker" 인데, 이 하위 폴더에 다양한 임시파일이나 이미지 컨테이너 관련 파일들이 누적되면서 용량이 커지는 문제가 있다. 해당 폴더의 용량을 찾아보면 overlay2 폴더의 용량이 거대해지는 특징이 있는데 이런 경우 아래와 같이 명령어를 입력하면 미사용 리소스를 삭제하면서 용량이 확보된다. overay2 관련 내용이 궁금하면 아래 링크를 좀더 읽어보자. https://tech.kakaoenterprise.com/171 [컨테이너 인터널 #2] 컨테이..