Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/alchemine/realtime-trend-pipeline
실시간 검색어에 대한 수집/분석 데이터 파이프라인
https://github.com/alchemine/realtime-trend-pipeline
airflow docker hadoop hive kafka python selenium spark
Last synced: 27 days ago
JSON representation
실시간 검색어에 대한 수집/분석 데이터 파이프라인
- Host: GitHub
- URL: https://github.com/alchemine/realtime-trend-pipeline
- Owner: alchemine
- Created: 2023-09-01T00:40:09.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2023-09-03T16:50:14.000Z (about 1 year ago)
- Last Synced: 2024-10-11T22:10:54.811Z (27 days ago)
- Topics: airflow, docker, hadoop, hive, kafka, python, selenium, spark
- Language: Python
- Homepage:
- Size: 529 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# realtime_trend_pipeline
실시간 검색어를 크롤링하여 hive metastore에 적재, 분석 후 분석 결과를 카카오톡 메시지로 전송하는 데이터 파이프라인Workflow: [realtime_trend_pipeline.py](https://github.com/alchemine/realtime_trend_pipeline/blob/main/realtime_trend_pipeline.py)
![workflow](/assets/image-0.png)
## TODO
- SQL/NoSQL DB 구축
- Airflow callback을 위한 새로운 topic 및 consumer 추가
- 시스템 안정성 추가- 시간이 제대로 싱크되지 않는 문제 해결 (`KST = pendulum.timezone("Asia/Seoul")` 이용)
- airflow-dags에 submodule 추가
- 각 단계에서 사용되는 기술 stack들 자세히 설명---
## 1. Configuration
- OS: Ubuntu22.04
- Docker cluster: [alchemine/hadoop-docker-cluster](https://github.com/alchemine/hadoop-docker-cluster)
- Schedule interval: 10분 (`'*/10 * * * *'`)
- Data source: [시그널 실시간 검색어](http://signal.bz)## 2. Airflow Workflow
### 1) Crawl
[시그널 실시간 검색어](http://signal.bz)로부터 실시간 검색어를 크롤링하고 csv format으로 local에 저장
- `airflow.providers.docker.operators.docker.DockerOperator`
- [`selenium/standalone-chrome:90.0.4430.85-chromedriver-90.0.4430.24`](https://hub.docker.com/layers/selenium/standalone-chrome/90.0.4430.85-chromedriver-90.0.4430.24-grid-4.0.0-beta-3-20210426/images/sha256-1532a6d76064edc555045aa790918fbbca972426099e0559ee4eef138dd0db62?context=explore)![site sample](/assets/image-1.png)
![csv sample](/assets/image-2.png)### 2) Load
Local csv file을 hive metastore 내 external partitioned orc table에 적재
- `airflow.operators.hive_operator.HiveOperator`
- partition unit: hour![Alt text](/assets/image-4.png)
![partition sample](/assets/image-3.png)
![orc sample](/assets/image-4-1.png)### 3) Analyze
최근 1시간(기준: `{{ execution_date }}`) 동안 저장된 인기 검색어들을 읽어와 각 검색어에 대하여, 검색어 순위 내 출현비율과 평균순위를 계산한 결과를 local csv file로 저장
- `airflow.providers.apache.spark.operators.spark_submit.SparkSubmitOperator`![output sample](/assets/image-5.png)
### 4) Postprocess
분석 결과를 카카오톡 메시지로 보내기 적절한 형태로 처리
- `airflow.operators.python.PythonOperator`![Alt text](/assets/image-5-1.png)
### 5) Request message
후처리된 메시지를 카카오톡 메시지를 보내주는 서버에 json 형태로 publish
- `airflow.providers.apache.kafka.operators.produce.ProduceToTopicOperator`
- Kakao message server: [operators/send/start_kakao_message_server.py](https://github.com/alchemine/realtime_trend_pipeline/blob/main/operators/send/start_kakao_message_server.py)![message sample](/assets/image-6.jpg)
### 6) Finish
모든 작업이 정상종료되었다는 것을 확인
- `airflow.operators.dummy_operator.DummyOperator`![message sample](/assets/image-7.png)
## 3. Considerations
### 1) Airflow
1. 실패 시, 5분 마다 재실행(`retries`, `retry_delay`) 및 카카오톡 메시지 전송(`on_failure_callback`)
2. `DockerOperator`, `HiveOperator`, `SparkSubmitOperator`, `ProduceToTopicOperator`, `Python`