인프런 커뮤니티 질문&답변

minsubrother님의 프로필 이미지
minsubrother

작성한 질문수

Airflow 마스터 클래스

Custom operator 개발 실습

섹션7: CustomOperator 개발 실습부분 pandas에 관하여

해결된 질문

작성

·

388

0

안녕하세요. 강사님 코드를 참조하며 공부를 하다보니, 어느새 새벽시간대가 되었네요

다름이 아니라, 방금 전 쯤에 질문 드린 xmltodict는 import 에러가 발생했는데, (비주얼스튜디오 환경에서 pip install 및 wsl2환경에서 pip install 했음에도 불구하고)

섹션7: CustomOperator 개발 실습 부근에서 pandas를 사용하는데,

비주얼 스튜디오 코드 가상환경(venv)에서 pandas가 설치되어있지 않아서 제가 pip install pandas로 설치를 하고 진행을 했는데, airflow 상에서 import error 가 나지 않는 점이 궁금해서 질문을 드리게 되었습니다.

 


추가)

xml 데이터가 자꾸 안되어서 다른 데이터를 사용해보자는 마음으로 일단 json 양식까지 지원되는 open api를 물색해봤는데, 잘 동작하네요.

---

  • 서울시 전기차 충전소 정보(서울시 설치)

  • 서울시 전기차 급속충전기 정보 현황(서울시 설치)

    • 서울시 자동차 전용도로 위치 정보(좌표계: GS80)

     


데이터 사이언티스트 쪽에서 데이터 엔지니어로 직무를 바꾸게 되었는데, 아무래도 정보가 정말 없다보니, 뭐부터 시작을 해야할지 막막했었습니다.

아직도 신입으로 취업하기 위해서는 구체적으로 어떤 것을 완성해야할지 모르지만, 인프런에서 좋은 강의를 알게 되어서 강사님께 항상 감사하게 생각하고 있습니다.


 

답변 1

0

김현진님의 프로필 이미지
김현진
지식공유자

minsubrother님

pandas 라이브러리의 경우 Airflow 이미지내에 이미 포함돼 있어서 그렇습니다.

지금 말씀드린건 도커 이미지입니다.

반면 로컬 컴퓨터의 파이썬 가상환경 내에서 pip install "apache-airflow[celery]==2.5.1 명령으로 airflow 관련한 라이브러리를 설치했을 때에는 pandas는 포함돼있지 않습니다.

여기서 말씀드린건 pip install 명령입니다.

그러니까 pandas 라이브러리는 도커 이미지에는 포함돼있고

pip install 명령으로는 설치되지 않는 라이브러리입니다.

 

pandas 뿐만 아니라 몇몇 라이브러리들이 그러한데, https://github.com/apache/airflow/blob/main/Dockerfile 여기에 가보면 airflow 이미지를 만드는 Dockerfile 내용이 공개돼있습니다.

내용이 좀 어렵긴한데 여기에 보면 pandas 라이브러리를 추가하도록 구성돼있습니다.

image

그래서 Airflow 이미지로부터 올라온 Airflow 서비스인 스케줄러, 워커는 import pandas 를 에러없이 처리할 수 있는 것이죠.

 

airflow 서비스를 올리고나서

#> sudo docker ps 명령으로 컨테이너 목록 확인 하시고, 그 중 스케줄러나 워커 컨테이너 확인 해서

#> sudo docker exec -it {컨테이너ID} bash 명령으로 컨테이너 안에 들어간 후에

python 명령으로 파이썬 프롬프트 모드로 진입 / import pandas as pd 해보시면

이상없이 pandas가 import 되는것도 보실 수 있습니다.

 

여담으로 minsubrother 님이 데이터 엔지니어 쪽으로 진로를 생각하신다니 매우 반갑네요 ^^

데이터 분석은 너무나 많은 자료가 존재하고, 공부해야할 방향이 상대적으로 명확한데

데이터 엔지니어는 그런 나침반이 부족한 것 같습니다.

그래서 minsubrother님을 포함해서 많은 데이터 엔지니어를 희망하시는 분들의 고민이 너무나 잘 이해됩니다.

제 생각에 데이터 엔지니어는 이거랑 저거만 알면 돼. 같은 방식으로는 접근하기가 어려운 직군입니다.

비즈니스 요건마다, 프로젝트마다 다양한 아키텍처와 지식을 요구하는 경우가 다반사죠.

그리고 해당 아키텍처에 쓰이는 기술요소를 일일이 완벽히 공부한다는 것도 어려운 일입니다.

 

하지만 데이터 엔지니어도 데이터 분석가처럼 로드맵 또는 커리큘럼이 필요하다고 생각하고 있습니다.

그래서 Airflow 강의를 시작으로 그런 커리큘럼을 한번 만들어보려고 해요 ^^

 

마지막으로, 데이터 엔지니어를 생각하신다면 기반 지식을 두루두루 넓히시길 추천드립니다.

전문가는 많이 아는 것이 전문가가 아닙니다.

문제가 생겼을 떄 해결하려면 무엇을 점검해야하고 무엇이 필요한지 아는 사람이 전문가입니다.

그리고 이럴 때 필요한게 기반지식입니다. NW 지식, DB지식, OS 지식 등등...

기반 지식이 탄탄하면 airflow든 spark이든 배우는 것은 금방 배웁니다.

현직자 중에서도 airflow도 잘하고 kafka도 잘하고 spark도 잘하고 hadoop도 잘하는 분들은 그리 많지 않습니다.

너무 마음 조급하게 먹지 마시고 기반 지식들도 필요한 지식이라 생각하시고 모두 흡수해가세요.

 

말이 길어졌는데 남은 공부도 열공하시고 화이팅입니다 ^^

 

minsubrother님의 프로필 이미지
minsubrother
질문자

감사합니다. 너무 많은 걸 한번에 배워야한다는 것 때문에, (채용 공고만 봐도 요구하는 게 너무 많았습니다.) 막막했었는데, 말씀 주신 부분을 되새기며 다시 계획을 짤 수 있었습니다. airflow를 시작했으니, 중점적으로 파고 프로젝트에 응용도 해보고, CS스터디를 하면서 기반 지식을 탄탄히 익히는데 시간을 많이 써야겠다는 생각을 하였습니다. 강의를 수강하면서 모르는 부분을 깊고 자세하게 알려주셔서 항상 감사드립니다.

추가로 밑에 궁금한 사항이 생겼는데, 바쁘시지 않을 때 답변을 주시면 감사하겠습니다.

Q: 섹션8에서 진행되는 내용이 기존 이미지의 layer를 차곡차곡 쌓는 extension방법인데, 기존 이미지에도 설치되어있는 pip 패키지들을 확인해보고 설치하는 작업이 중요할까요? 왜냐하면, pip install로 설치를 하면 layer들이 늘어나게 되어 무거워지는데, 중복해서 패키지들이 설치되면 문제가 생기지 않을까? 생각했습니다.


+) pip install xmltodict에 관해 해결(감사합니다.)

말씀 주신 부분과 섹션8의 강의를 참고하여,

image이렇게 이미지를 설치할 수 있었습니다. 설치된 패키지로 다시 CustomOperator 부터 CustomHook까지 복습해보도록 하겠습니다.

 

+) airflow 2.6.3에 설치되어있는 pip패키지들

 

image

말씀 주신 airflow github 링크 들어가서 확인해보니 pandas가 있는 것을 알 수 있었습니다. 그래서 ARG는 변수인데, AIRFLOW_EXTRAS에 들어가는구나를 알 수 있었습니다.

image

imageimage

https://github.com/apache/airflow/blob/main/constraints/README.md

 

 

 

 

김현진님의 프로필 이미지
김현진
지식공유자

도커 이미지에 라이브러리 추가할 때 기존 이미지에 있는지 확인하고 해야하느냐

꼭 그럴필요는 없습니다.

도커 Layer로 지정되는 명령어는 RUN, ADD, COPY 이 3가지인데,

airflow 이미지 수정하기 위한 Dockerfile 내용을 보면 minsubrother님이 적으신것처럼

RUN 명령 하나에 apt-get update && apt-get install -y .... 명령들을 모두 모아놨습니다.

이렇게 하면 layer는 1개만 생성됩니다. 만약 아래처럼 하나하나 RUN 명령으로 명시하면 layer가 많아지는 것이죠.

RUN apt-get update
RUN apt-get install -y gcc
RUN apt-get install y heimdal-dev 

따라서 파이썬 라이브러리 설치할 때에도

RUN pip install 명령어 뒤에 설치해줘야 하는 라이브러리 여러 개를 쭉 나열한 것이고 이렇게 하면 Layer는 1개만 생성됩니다.

설치하려고 하는 라이브러리가 base 이미지에 이미 있어서 제외한다고 해도 어쨌든 layer 1개는 생기는 것이므로 크게 차이가 없습니다.

결국, base 이미지가 라이브러리를 이미 가지고 있는지 여부를 확인하기보다는 그냥 또 쓰셔도 됩니다. ^^

minsubrother님의 프로필 이미지
minsubrother

작성한 질문수

질문하기