Skip to content

Conversation

@seoyeong200
Copy link
Collaborator

@seoyeong200 seoyeong200 commented Aug 29, 2024

description

1. docker proxy container 추가

dockeroperator 쓰려면 에어플로우 안에서 호스트에 있는 도커 데몬이랑 통신해야돼서 프록시용 컨테이너 필요 -> 정상 실행 확인 완료 (airlflow dag 실행하면 지정한 search keyword 로 트윗 데이터 수집 후 csv파일로 생성해서 마운트한 경로에 저장됨)

context

Screenshot 2024-08-31 at 3 13 07 PM dockeroperator 의 컨테이너가 호스트 도커 데몬과 통신하기 위해 airflow 컨테이너에 mount된 소켓 파일 접근 불가(permission denied) 해결을 위해선 (1) root 권한으로 다 부여 (2)호스트 쪽에서 docker group 생성 후 권한 설정, 해당 권한 airflow컨테이너에 부여하는 방법 가능

(1) docker 측에서 보안적으로 매우 권장하지 않는 방법 (2) 호스트 머신 임의 configuration 필요, 적절하지 않음

rather

Screenshot 2024-08-31 at 3 13 14 PM

프록시 용도로 하나 띄워서 dockeroperator 통신 관할

todo

dag 코드 안에서 에어플로우 컨테이너 쪽 경로말고 호스트머신 경로 침조가 필요해서 코드 수정 필요(현재 스크립트에 테스트 쪽 호스트머신 절대겅로를 스트링으로 해놓은 상태)

2. dynamic task mapping

https://airflow.apache.org/docs/apache-airflow/stable/authoring-and-scheduling/dynamic-task-mapping.html

s3에서 brand 이름 갖고와서 동적으로 crawler task에 할당하는 동작 필요

@seoyeong200
Copy link
Collaborator Author

seoyeong200 commented Sep 3, 2024

instagram dag 구조

status

  • get_brand_list_fr_s3 함수로 keyword로 넣어줄 브랜드명을 리스트 형태로 받아올 수 있다.
  • InsCrawler 인스턴스 생성할때 keyword를 리스트 형태로 줄 수 있다.
  • InsURLCrawler 인스턴스는 InsCrawler 를 상속한다.
  • InsURLCrawler 인스턴스의 get_urls는 keyword를 하나 주어지면 해당 keyword에 해당하는 url 리스트를 수집한다. keyword가 주어지지 않는경우 InsCrawler 생성자에서 주어진 keyword 리스트에 대해 url을 수집한다.
  • InsDataCrawler 인스턴스는 각 url에 대해 유저id, 게시날짜, 좋아요수, 이미지 데이터를 수집한다.

thoughts

  1. keyword 리스트를 받아오는 get_brand_list_fr_s3 부분을 dynamic task mapping으로 각 keyword에 대해 task를 생성한다.
    • airflow가 task 병렬처리를 알아서 해주는것을 기대
  2. keyword를 받아와서 InsURLCrawler().get_urls(keyword) -> InsDataCrawler() 한 사이클을 하나의 subprocess로 잡고 cpu 개수만큼 multiprocessing한다. ✅
    • 🔴 chromedriver 파일 여러개의 프로세스에서 동시 접근, rw 불가

@seoyeong200
Copy link
Collaborator Author

seoyeong200 commented Sep 4, 2024

selenium in airflow

try 1. pythonvirtualoperator 🔴
가상환경 지원하는 operator 사용해서 필요한 패키지 및 버전 명시해주고, 해당 환경 안에서 크롤러 동작하도록 하기

try2. remote webdriver with dockeroperator

  • 도커 네트워크 추가
  • 네트워크 좀 더 파악 필요
  • 일단 에어플로우 안타고 로컬 저장 -> s3 업로드 하는 스크립트로 돌리고 있기로

try3. airflow.operators.selenium_plugin import SeleniumOperator

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant