Le projet a été réalisé dans le cadre du bootcamp Data Engineer proposé par Datascientest et l'Ecole des Mines ParisTech.
L'équipe qui à réalisé le projet se compose de:
Il nous a été demandé de réaliser un projet permettant de mettre en oeuvre un large pannel de compétences du métier de Data Engineer.
Ce projet devait utiliser comme source de données les API du portail développeur du New York Times.
Il nous a été laissé la liberté de la finalité du projet et de la stack technique mise en oeuvre.
Notre équipe a décidé de réaliser un ensemble de services dont la finalité est un dashboard permettant de suivre les contenus produits par les équipes du New York Times.
L'utilisateur que nous avons retenu est un rédacteur en chef du titre qui souhaite suivre la production journalistique et identifier des tendances dans :
-
Les articles relatifs aux news
-
Les listes thématiques de livres best sellers
-
Les chroniques de films
-
Les contraintes des API du New York Times:
- 60 appels maximum par minute
- 500 appels maximum par jour
-
Un projet devant être réalisé en 1.5 mois
La solution proposée se compose de :
-
Un ETL qui a la charge de récupérer les contenus du New York Times.
-
Une base de données Elasticsearch où son entreprosés les documents récupérés.
-
Un dashboard Dash.
-
Une API FastApi permettant au dashboard de requêter la base de données.
-
Un DAG Airflow pour gérer l'orchestration de l'ETL
Nous avons implémenté trois index :
-
news
-
books
-
movies
Chaque index utilise les settings suivants :
-
2 chards
-
2 réplicats
-
Un analyseur
English
sur tous les champs texte
Le DAG réalise deux taches:
-
Vérifier que la base de données Elasticsearch est bien fonctionelle
-
Si c'est le cas lancer l'ETL
Le DAG envoie des alertes sur le groupe Slack de l'équipe en cas de succès ou de l'échec de chaque tâche.
.
├── README.md
├── api
│ ├── Dockerfile
│ ├── __init__.py
│ ├── logs
│ ├── main.py
│ ├── requirements.txt
│ └── start.sh
├── dag
│ └── etl_dag.py
├── dash
│ ├── Dockerfile
│ ├── __init__.py
│ ├── assets
│ ├── dashboardLists.py
│ ├── main.py
│ ├── queries.py
│ ├── requirements.txt
│ └── start.sh
├── data
│ ├── _state
│ ├── indices
│ ├── node.lock
│ ├── nodes
│ └── snapshot_cache
├── docker-compose.yml
├── etl
│ ├── Dockerfile
│ ├── __init__.py
│ ├── app.py
│ ├── constants.py
│ ├── extract.py
│ ├── load.py
│ ├── logs
│ ├── requirements.txt
│ ├── session.py
│ ├── start.sh
│ ├── transform.py
│ └── utils.py
├── logs
│ ├── api
│ ├── dash
│ └── etl
├── notebooks
│ ├── ES_load.ipynb
│ ├── api results
│ ├── api_exploaration.ipynb
│ ├── books_queries.ipynb
│ ├── movies_queries.ipynb
│ └── news_queries.ipynb
└── requirements.txt
En plus du code des services, le repository contient une series de notebooks ayant servi :
-
À découvrir les API du New York Times
-
À élaborer la logique de l'ETL
-
À construire les requêtes Elasticsearch utilisées dans l'API
-
Hormis le DAG l'ensemble des services se lance avec la commande
docker-compose up -d
-
Le fichier du code du DAG doit être mis dans le dossier
DAG
d'une configuration Airflow locale. Celle-ci doit avoir accès à l'API Docker sur le poste où elle est lancée. Deux variables d'environement sont à paramétrer:-
local_logs
: Le chemin d'accès absolu du fichierlogs
dans le dossier du projet clonné -
network_id
: L'identifiant du network dockerny_times_backend
. Ce dernier est retrouvable en utilisant la commande suivante:docker network ls
Les alertes Slack nécessitent de créer un webhook sur la plateforme de paramétrer une une connexion dans Airfflow. Le code des alertes est déjà implémenté dans le DAG. L'article Chris Young publié sur Towards Data Science indique comment réaliser le paramétrage.
Avant d'activer le DAG il est également nécessaire d'enregistrer une API Key sur le portail développeurs du New York Times dans un fichier
.env
. Ce dernier sera aussi nécessaire afin d'utiliser les notebooks d'exploration. Le fichier sera a ranger dans chacun de ces dossiersetl
etnotebooks
. La démarche pour récupérer l'API KEY est indiquée ci-dessous.- créer un compte sur la plateforme New York Times Developers
- Suivre les instruction de la page Get Started pour récupérer une clé API
- Créer un fichier
.env
à la racine du dossier local où le projet a été créé et ajouter votre clé API de la manière suivante :
API_KEY=<API_KEY_NYT_DEVELOPER>
-