Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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

실시간 검색어에 대한 수집/분석 데이터 파이프라인

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`