개발

개발/Data Engineering

Apache Airflow DAG 간의 dependency 설정

Apache Airflow의 DAG 내에 task들의 dependency를 설정함으로써 task 실행 순서와 병렬 실행 task들 등을 정의할 수 있는데, Airflow를 조금이라도 사용해 봤다면 이것은 당연히 알 것이다. 그리고 Airflow에서는 2.1 버전부터 DAG 내 task들 뿐만 아니라 DAG 간의 dependency를 설정할 수 있는 기능도 제공한다. 설정할 필요성을 생각해보면, A라는 DAG이 B라는 DAG 로직에서 생성한 데이터가 있어야만 정상적으로 수행 가능하다고 하자. 그러면 B DAG의 수행 시간(schedule_interval)을 A DAG이 일반적으로 종료되는 시간 이후로 설정하는 방법이 있는데 충분히 여유를 두고 설정하더라도 A DAG 수행이 모종의 이유로 특별히 오래 걸렸다..

개발/리눅스

리눅스 bash 쉘 환경 설정 파일

환경 설정 파일에는 시스템 초기화 파일과 사용자 초기화 파일이 있다. 시스템 초기화 파일 시스템을 사용하는 전체 사용자의 공통 환경을 설정하는 파일이다. /etc 디렉토리에 존재한다. 많이 사용하는 bash 쉘의 경우 다음과 같은 파일들이 있다. /etc/profile /etc/bashrc /etc/profile.d/*.sh : /etc/profile 파일에서 /etc/profile.d 하위의 sh 파일들을 source 하도록 되어있다. 사용자 초기화 파일 각 사용자 홈 디렉토리에 존재하며 개별 사용자의 환경을 설정하는 파일이다. 많이 사용하는 bash 쉘의 경우 다음 세 개가 있다. .profile .bash_profile .bashrc 이중 .profile, .bash_profile은 같은 것으로 보..

개발

Dockerfile 에서 CMD, ENTRYPOINT 사용시 환경 변수 로딩 문제

도커 이미지를 만들기 위해 Dockerfile을 작성하게 되는데, 컨테이너 생성 시 실행할 명령어를 지정하기 위해 Dockerfile 내에 CMD, ENTRYPOINT 명령어를 사용하게 된다. 컨테이너가 생성되며 웹 서버, DB 서버 등 어플리케이션을 구동시킬 때 많이 사용하게 되는데 이럴 경우 리눅스 환경 변수 로딩은 되지 않는 경우가 발생할 수 있다. 구동시킨 어플리케이션에서 이런 환경 변수가 필요하지 않다면 문제될 것이 없지만 필요하다면 정상적으로 동작하지 않을 수 있기 때문에 이 부분에 관해서 알아두고 정상적으로 로딩되게할 필요가 있다. 작성자 같은 경우에는 Apache Airflow를 ENTRYPOINT 명령어를 통해 구동시키게 Dockerfile을 작성하고 컨테이너 구동 후에 Airflow D..

개발

자주 사용하는 Docker 명령어 모음

1. 컨테이너 실행하여 쉘 사용하기 docker run -it \ -v {로컬 경로}:{docker 컨테이너에서 사용할 경로} --rm {docker 이미지} {명령어} # example docker run -it \ -v /Users/user/dev:/Users/user/dev \ --rm registry.domain.com/some_image:1.0.0 /bin/bash Usage docker run [OPTIONS] IMAGE [COMMAND] [ARG...] OPTIONS -v, --volume list : Bind mount a volume -t, --tty : Allocate a pseudo-TTY -i, --interactive : Keep STDIN open even if not attac..

개발/Data Engineering

Apache Hudi 소개 - HDFS upsert/delete

HDFS는 RDBMS와는 다르게 기존 데이터를 업데이트해서 사용하는데 적합하지 않다. 하지만 로그성 데이터가 아니라 상태값이나 변할 수 있는 값을 가지는 데이터인 경우 변경 사항이 계속 발생하고 이것을 주기적으로 반영해야할 필요성이 있을 수 있다. 예를 들어 상품 판매 순위를 집계하려면, 상품 판매 로그와 상품 자체에 대한 정보가 있어야 한다. (로그에 상품에 대한 정보를 포함시킬 수도 있지만 최신 정보를 얻으려면 별도 정보가 필요할 것이다.) 로그는 변하지 않는 데이터이지만 상품에 대한 정보는 상품명, 카테고리 등이 계속 변할 수 있다. 이런 경우 데이터 전체 크기가 그렇게 크지 않은 경우 전체 데이터를 주기적으로 새로 dump할 수 있다. (Sqoop 등을 활용해서) 하지만 전체 데이터 크기가 커서 ..

개발/Data Engineering

Avro와 Parquet

에이브로 (Avro) 아파치 에이브로는 더그 커팅이 개발한 언어에 중립적인 스키마 기반의 데이터 직렬화 프레임워크이다. 데이터를 네트워크를 통해 전송하거나 저장하기 위해서는 데이터를 직렬화해야한다. 하둡 Writable 클래스들은 언어 이식성이 없기 때문에 에이브로는 하둡에서 데이터를 직렬화하는데 선호되는 도구이다. 스키마 스키마는 JSON을 사용하여 정의된다 [User에 대한 스키마 예제 (user.avsc)] { "namespace": "example.avro", "type": "record", "name": "User", "fields": [ {"name": "name", "type": "string"}, {"name": "favorite_number", "type": ["int", "null"]}..

bebeside77
'개발' 카테고리의 글 목록 (3 Page)