ssung_데이터 엔지니어링 64

3차 프로젝트_(5)

pythonOperator에서의 op_args, op_kwargs 두 가지의 공통점은 변수를 전달해주는 역할 op_args list 형태의 인수 전달 operator를 생성할 때 op_args 변수로 전달 op_kwargs Dictionary 형태의 인수 전달 operator에 전달 되는 모든 변수를 전달 op_kwargs의 키에 맞는 변수를 선언하면 자동으로 전달 params는 airflow DAG를 실행할 때 전달한 파라미터 (Trigger DAG w / config 사용) op_args 예제 코드 t1 = PythonOperator( task_id='print_test', python_callable=print, op_args=["hello", "world"], dag=dag ) 결과 값 더보기 h..

3차 프로젝트_(4)

Docker container 실행 실패 문제 : 더보기 Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:8080 -> 0.0.0.0:0: listen tcp 0.0.0.0:8080: bind: An attempt was made to access a socket in a way forbidden by its access permissions. 발생하지 않던 위의 메시지가 갑자기 발생.. 원인 : 원인은 포트의 중복된 사용이 있다는 말이었음 이로 인해 정상적으로 container가 실행되지 않음 (docker compose up 실패) powershell에서 내가 지금 사용할 수 없는 포트 번호를 확인할 수 있는..

3차 프로젝트_(3)

DB (Mysql)연동하여 Slack 메시지로 보내주기 1. Test를 위한 Mysql workbench를 사용해 Local 환경 구성해주기 2. Airflow에서 Admin 창에 들어가 Connection 설정 해주기 Connection Id - 설정하고자 하는 이름 입력 Connection Type - Mysql 선택 Host - 해당 PC의 IP 주소 입력 (cmd 창 -> ipconfig 입력 -> IPv4 주소 입력) Login - Local mysql 아이디 입력 Password - 설정 비밀번호 입력 Port - 3306 위의 정보들을 입력 후 Test 버튼을 눌러 연결 확인 후 Save 3. Slack DM을 보내고자 하는 Slack channel 생성 4. api.slack.com 접속 ..

3차 프로젝트_(2)

리눅스 환경에서 git 활용 (commit 하기) commit 할 파일이 있는 디렉토리로 cd 해당 디렉토리에서 git status 명령어 실행 (해당 사진에서는 firtst_testDAG.py 상태를 확인 바람) git add '파일명' 실행 git commit -m "커밋 메시지 입력" git status 명령어 입력 후 commit을 했던 파일의 상태 확인 git push origin 브랜치 선택 Local에서 docker 환경이 안올라감 docker container를 다 삭제 후 yaml 파일을 up 했는데 정상 실행이 이루어지지 않음 (한 번 실행되었다가 중복 실행이 이루어짐) 원인이 뭘까.. 다시 삭제 후 실행 중.... AWS RDS 연결이 최종 목표이지만 그 전에 강의에서 사용했던 db에..

3차 프로젝트_(1)

git clone 에러 프로젝트 시작부터 에러가 없어지질 않았다.. repo가 clone이 정상적으로 이루어지지 않음 현상 : git clone 시 모든 파일들이 다운되지 않음 (.git 파일만 다운) 계속해서 반복된 문제가 발생 원인 : 구글링을 통해 찾아보니 다양한 원인들이 있음 파일의 경로 길이가 너무 길어 제한이 발생해 생기는 원인 git config --system core.longpaths true 명령어를 cmd 창에 입력하여 해결 가능 위의 방법으로도 해결이 되지 않을 경우 window powershell을 관리자 권한으로 실행시켜 git config --global core.longpaths true 명령어를 입력하여 해결 가능 두 가지 방법으로도 해결 못함 작성된 파일이 mac os에서..

Airflow 고급_(5)

DBT Seeds 많은 Diension 테이블은 크기가 작고 많이 변하지 않음 이를 파일 형태로 데이터 웨어하우스에 로드하는 방법 (Seeds는 작은 파일의 데이터를 가리키고 이는 주로 csv파일) root 폴더에서 dbt seed를 실행하여 빌드 DBT Sources Staging 테이블 생성 시 입력 테이블이 자주 바뀔 때 즉, models의 .sql 파일들을 일일이 찾아 바꿔주어야 하는 경우 이 번거로움을 해결하기 위해 Sources를 사용 입력 테이블에 별칭 (Alias)을 주고 별칭을 staging 테이블에서 사용 기본적으로 처음 입력이 되는 ETL 테이블을 대상으로 함 별칭을 제공 최신 레코드 체크 기능 제공 테이블 이름에 별칭 (Alias)를 부여 ETL 단의 소스 테이블이 바뀌어도 뒤에 영..

Airflow_고급(4)

Data Normalization 데이터베이스를 조금 더 조직적이고 일관화 된 방법으로 디자인하려는 방법 데이터베이스의 정합성을 쉽게 유지하고 레코드들을 수정/적재/삭제를 용이하게 함 Normalization에 사용되는 개념 Primary Key Composite Key Foreign Key 1NF (Frist Normal Form) - 중복된 키를 제거하고 atomicity 한 것이 목표 한 셀에는 하나의 값만 있어야 함 (atomicity) Primary 키가 있어야 함 중복된 키나 레코드 값이 없어야 함 2NF (Second Normal Form) 1NF를 만족해야 함 다음으로 Primary 키를 중심으로 의존결과를 알 수 있어야 함 부분적인 의존도가 없어야 함 즉, 모든 부가 속성들을 Primar..

Airflow 고급_(3)

Dag Dependencies Dag 실행 방법 주기적 실행 : schedule로 지정 다른 Dag에 의해 트리거 Explicit Trigger : Dag A가 분명하게 Dag B를 트리거 (TriggerDagRunOperator) Reactive Trigger : Dag B가 Dag A가 끝나기를 대기 (ExternalTaskSensor) 상황에 따라 다른 테스크 실행 방식 BranchPythonOperator : 조건에 따라 다른 테스크로 분기 LatestOnlyOperator : 과거 데이터 Backfill 시에는 불필요한 테스크 처리 앞 단의 테스크들의 상황에 따라 실패해도 후위의 테스크가 동작해야하는 경우가 있을 수 있음 Explicit trigger TriggerDagRunOperator Da..

Airflow 고급_(1), (2)

Airflow 실행환경 관리방안 기타 환경설정 값들 (Variables, Connections 등등)을 어떻게 관리하고 배포하는가? 주로 docker-compose.yml(yaml) 파일의 아래 부분에 정의 (환경변수가 아니라 별도 credentials 전용 Secrets 백엔드라는 것을 사용하기도 함) enviroment: &airflow-common-env AIRFLOW_VAR_DATA_DIR: /opt/airflow/data AIRFLOW_CONN_TEST_ID: test_connection Airflow 이미지를 통해 어디까지 관리하고 무엇을 docker-compose.yml에서 관리할지 생각 회사마다 조금씩 다름 Airflow 자체 이미지를 만들고 거기에 넣을 경우 환경변수를 자체 이미지에 넣고..

Docker_(5)

서버의 복잡도 상승 시 해결 방안 문서화 - 서비스 상황, 셋업 방법 문서화 - 문제 발생 시 해결 방법 문서화 - 하지만, 서버를 일일히 관리하고 명령을 실행한 다는 것은 사실상 불가능 코드화 - Infrastructure As Code : DevOps 엔지니어가 꼭! 알아야함 - 자동화 된 코드 스크립트로 해결 - 다수의 서버에 명령을 대신 실행 - 다양한 툴이 존재 - 단점 : Learning curve가 높음, 설치 시 소프트웨어 충돌 문제에는 도움이 안됨 Virtual Machine 도입 - 소프트웨어의 충돌 해결을 위해 사용 (하나의 Physical Server에 다수의 VM을 올리고 서비스 별로 하나씩 할당) - 단점 : VM의 리소스 소비가 크고 느림, 특정 VM 벤더 혹은 클라우드에 종속..

728x90