diff --git a/rapport/images/dev-version-erreur-connexion.png b/rapport/images/dev-version-erreur-connexion.png new file mode 100644 index 0000000000000000000000000000000000000000..4f7810fe94aec2dd388059a3d1dd3001f4bce24c Binary files /dev/null and b/rapport/images/dev-version-erreur-connexion.png differ diff --git a/rapport/images/non-dev-version-interface.png b/rapport/images/non-dev-version-interface.png new file mode 100644 index 0000000000000000000000000000000000000000..3195fd710e2460ae42710422314df92784f16d6f Binary files /dev/null and b/rapport/images/non-dev-version-interface.png differ diff --git a/rapport/rapport.md b/rapport/rapport.md index 272c26c74336092f0834b018fd78eaac0d3a5844..8239bc675bf3ee96e191d4c65726686de42792bc 100644 --- a/rapport/rapport.md +++ b/rapport/rapport.md @@ -1,70 +1,542 @@ --- -title: "Rapport du Projet d'IPBD" +title: Rapport du Projet d'IPBD author: - - Alexandre FORT - Tessa DEPAOLI - Xavier DE WEERD + - Alexandre FORT lang: fr -geometry: "top=2cm, bottom=2cm, left=2cm, right=2cm" +geometry: top=2cm, bottom=2cm, left=2cm, right=2cm fontsize: 12pt -linkcolor: "blue" +linkcolor: blue toc: true toc-depth: 3 titlepage: true -papersize: "a4paper" +papersize: a4paper --- # Analyse des tendances sur les animés -## Objectif et mise en place +```toc +``` + +## 1. Objectifs et mise en place ### Description des données et objectif -Le dataset que nous avons choisi est le suivant : https://www.kaggle.com/datasets/dbdmobile/myanimelist-dataset/. +Nous avons cherché des données d'au moins 2 Go, sans images car le traitement n'est pas le même. + +Le dataset que nous avons choisi fait 8 Go et porte sur les animés, trop bien : https://www.kaggle.com/datasets/dbdmobile/myanimelist-dataset/. Il s'agit de données sur les animés, les profils d'utilisateurs et les notations des utilisateurs de la plateforme [MyAnimeList](https://myanimelist.net/). Notre but est d'analyser ces données afin de trouver des tendances ou/et corrélation dans les données. -Pour cela, on utilisera les outils présentés pendant les différents ateliers en cherchant à en exposer de nouveaux usages : +Pour cela, on utilisera les outils suivants : + +- Python : pandas, seaborn - Docker +- Hadoop - Hive -- Spark -- OpenSearch -- OpenSearch Dashboards +- Superset -### Mise en place +### Dépôt du projet et paquets -On récupère le git du projet, contenant les scripts pour lancer le cluster Hive, Hadoop et OpenSearch : +On s'assure d'avoir les paquets nécessaires : +```shell +sudo dnf install git wget unzip python3 +``` + +Pour les utilisateurs : + +On récupère le git du projet. Ce dernier contient les scripts pour télécharger les données et lancer le cluster Hadoop et Hive : ```sh cd ~ git clone https://git.iiens.net/de-weerd2022/projet-ipbd24.git ``` -On télécharge l'archive des données avec une requête wget puis on l'extrait (script `download_dataset.sh`) : +Pour les développeurs : + +Afin de pouvoir travailler et effectué des changements sur le dépôt du projet depuis la VM, on ajoute une clé ssh de déploiement sur gitlab dans "Settings>Repository>Deploy keys". + +On doit pour cela générer une clé ssh, qu'on copie ensuite pour chaque utilisateur en prenant garde à données les bonnes permissions. +```shell +sudo - su +ssh-keygen -t rsa -b 4096 +cp /root/.ssh/id_rsa* /home/xavier/.ssh +chown xavier:ensiie /home/xavier/.ssh/* +cp /root/.ssh/id_rsa* /home/tessa/.ssh +chown tessa:ensiie /home/tessa/.ssh/* +cp /root/.ssh/id_rsa* /home/alexandre/.ssh +chown alexandre:ensiie /home/alexandre/.ssh/* +``` + +On peut désormais cloner le dépôt en utilisant ssh, et push des modifications (pour les développeurs, en tant qu'utilisateur du dépôt le lien du git https suffit) : +```shell +git clone git@git.iiens.net:de-weerd2022/projet-ipbd24.git +``` + +La version accélérée du déploiement est faisable en lisant uniquement la dernière section `TL;DR`. Un grand nombre de script incluant les commandes qui vont suivre permettant cette accélération. + +### Les données + +Afin de téléchargé les données sur kaggle, on a obtenu une commande `wget` permettant de télécharger le fichier à l'aide d'une extension de navigateur. Kaggle n'offrant pas de lien direct de téléchargement. + +Cette commande est dans le script `download_dataset.sh` : +```shell +wget --header="Host: storage.googleapis.com" --header="User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36" --header="Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.7" --header="Accept-Language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7,zh-TW;q=0.6,zh-CN;q=0.5,zh;q=0.4" --header="Referer: https://www.kaggle.com/" "https://storage.googleapis.com/kaggle-data-sets/3384322/6207733/bundle/archive.zip?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=gcp-kaggle-com%40kaggle-161607.iam.gserviceaccount.com%2F20240519%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20240519T145233Z&X-Goog-Expires=259200&X-Goog-SignedHeaders=host&X-Goog-Signature=1ac8f9216a239f62f3aa19666ce2b09c188d1d34d5199cf254a3677292e1b893eb10d0e2280baf0cbfb1f21d38a2b99f55e3e080beaa4a376d07326750503e15f35e123e2efd21c2c300a82c5bc06c787528bbe5e0d6b7be5a31bc0e6fb458b9a59456233fb852c658827d1dd547ca683890de508dd88940526568357bdd28611409ed5db0e479abf7b6f98855cd942d0cebfae55d463f288640c594bce7e11cd9f460e941cec80a7713e7faa54e69e3e9c4e9e3cd87b11bc35aa74439f96f80c2d592c6a97519353ca099d62e7276bec190a99e9327aee45ab9531d86f8f6be65fb3931148dbd4342712849494a71adcfe0b4eb54051582393fe8a98ebf68bc" -c -O 'dataset.zip' +``` + +On télécharge l'archive des données avec la requête wget puis on l'extrait : ```shell cd ~/projet-ipbd24 ./download_dataset.sh ``` -[A CORRIGER] -Les données sont désormais dans le dossier `dataset/`, on utilisera les csv d'origine : -- `anime-dataset-2023.csv` : informations sur les animés -- `users-details-2023.csv` : informations sur les utilisateurs -- `users-score-2023.csv` : notation des utilisateurs sur les animés +Les données sont désormais dans le dossier `dataset/`, on compte 6 csv : -Afin de pouvoir travailler et effectué des changements sur le dépôt du projet depuis la VM, on ajoute une clé ssh de déploiement sur gitlab dans "Settings>Repository>Deploy keys". +- `anime-dataset-2023.csv` +- `anime-filtered.csv` +- `final_animedataset.csv` +- `user-filtered.csv` +- `users-details-2023.csv` +- `users-score-2023.csv` + +Les fichiers `*-filtered.csv` et `final_*.csv` permettent d'être plus rapidement prêts à l'emploi en fonction de l'analyse qu'on compte faire dessus. + +On à fait le choix de se limiter aux tables `anime-dataset-2023`, `user-score-2023` et `user-filtered`. + +On supprime les autres csv. +```shell +cd ~/projet-ipbd24/files/dataset +rm anime-filtered.csv final_animedataset.csv users-details-2023.csv +``` + +Voici une description de nos tables : + +- `anime-dataset-2023.csv` + - anime_id: Unique ID for each anime. + - Name: The name of the anime in its original language. + - English name: The English name of the anime. + - Other name: Native name or title of the anime(can be in Japanese, Chinese or Korean). + - Score: The score or rating given to the anime. + - Genres: The genres of the anime, separated by commas. + - Synopsis: A brief description or summary of the anime's plot. + - Type: The type of the anime (e.g., TV series, movie, OVA, etc.). + - Episodes: The number of episodes in the anime. + - Aired: The dates when the anime was aired. + - Premiered: The season and year when the anime premiered. + - Status: The status of the anime (e.g., Finished Airing, Currently Airing, etc.). + - Producers: The production companies or producers of the anime. + - Licensors: The licensors of the anime (e.g., streaming platforms). + - Studios: The animation studios that worked on the anime. + - Source: The source material of the anime (e.g., manga, light novel, original). + - Duration: The duration of each episode. + - Rating: The age rating of the anime. + - Rank: The rank of the anime based on popularity or other criteria. + - Popularity: The popularity rank of the anime. + - Favorites: The number of times the anime was marked as a favorite by users. + - Scored By: The number of users who scored the anime. + - Members: The number of members who have added the anime to their list on the platform. + - Image URL: The URL of the anime's image or poster. + - The dataset offers valuable information for analyzing and comprehending the characteristics, ratings, popularity, and viewership of various anime shows. By utilizing this dataset, one can conduct a wide range of analyses, including identifying the highest-rated anime, exploring the most popular genres, examining the distribution of ratings, and gaining insights into viewer preferences and trends. Additionally, the dataset facilitates the creation of recommendation systems, time series analysis, and clustering to delve deeper into anime trends and user behavior. +- `users-details-2023.csv` + - Mal ID: Unique ID for each user. + - Username: The username of the user. + - Gender: The gender of the user. + - Birthday: The birthday of the user (in ISO format). + - Location: The location or country of the user. + - Joined: The date when the user joined the platform (in ISO format). + - Days Watched: The total number of days the user has spent watching anime. + - Mean Score: The average score given by the user to the anime they have watched. + - Watching: The number of anime currently being watched by the user. + - Completed: The number of anime completed by the user. + - On Hold: The number of anime on hold by the user. + - Dropped: The number of anime dropped by the user. + - Plan to Watch: The number of anime the user plans to watch in the future. + - Total Entries: The total number of anime entries in the user's list. + - Rewatched: The number of anime rewatched by the user. + - Episodes Watched: The total number of episodes watched by the user. + - The User Details Dataset provides valuable information for analyzing user behavior and preferences on the anime platform. By examining mean scores and anime genres, you can gain insights into user preferences. Users can be segmented into different groups based on their watching behavior, such as active users and casual viewers. Personalized recommendation systems can be built using users' completed and plan-to-watch lists. Location-based analysis reveals anime popularity and user engagement in various countries. Trends in watching behavior, user retention, and gender-based differences in anime preferences can be identified. Additionally, you can explore rewatching habits and perform time series analysis to understand user engagement patterns over time. +- `users-score-2023.csv` + - user_id: Unique ID for each user. + - Username: The username of the user. + - anime_id: Unique ID for each anime. + - Anime Title: The title of the anime. + - rating: The rating given by the user to the anime. + - The User Score Dataset enables various analyses and insights into user interactions with anime. By examining user ratings for different anime titles, you can identify highly-rated and popular anime among users. Additionally, you can explore user preferences and watch patterns for specific anime titles. This dataset also forms the foundation for building recommendation systems based on user ratings, helping to suggest anime that align with individual tastes. Furthermore, you can perform collaborative filtering and similarity analysis to discover patterns of similar user interests. Overall, this dataset offers valuable information for understanding user engagement and preferences on the anime platform. + +- `user-filtered` : contient uniquement l'id de l'anime, l'id du user qui a mis la note, et la note. + +## 2. Nettoyage des données et pré-analyse + +### Environnement Python + +Pour mettre en place cette partie, nous avons décidé d'utiliser la librairie `pandas` sur Python afin d'extraire des données et faire des analyses comme la tendance sur les genres d'animés les plus visionnés par exemple. La librairie python `seaborn` permettra un affichage des données. + +Pour ce faire nous avons procédé à toute la partie mise en place de python sur la VM dans un environnement virtuel : +```shell +cd ~ +# Création du v-env +python3 -m venv mon-venv +source mon-venv/bin/activate +# Installation des modules +pip install --upgrade pip +python3 -m pip install pandas seaborn +``` + +On exécute ensuite le code. +```shell +(mon-venv)$ python3 treat.py +``` + +### Nettoyage des données + +- Nettoyage et conversion des données : + +Les colonnes numériques du DataFrame df (comme Score, Popularity, Favorites, etc.) qui contiennent des valeurs "UNKNOWN" sont remplacées par -1. -## 2. Utilisation de Apache Superset +Ces colonnes sont ensuite converties en types de données appropriés (float64 pour les scores et int64 pour les autres). -Apache Superset est .. +Séparation de la colonne "Premiered" : -On lance la version `non-dev` qui prend une image immutable une fois `up`. +La colonne Premiered est divisée en deux nouvelles colonnes : Premiere_year et Premiere_season. + +Une fonction yr_season est définie pour gérer cette séparation et assigner "UNKNOWN" lorsque nécessaire. + +- Encodage des genres : + +Les genres sont convertis en format one-hot encoding. Chaque genre devient une nouvelle colonne avec des valeurs 0 ou 1 indiquant la présence de ce genre dans chaque anime. + +Une fonction split_genre est utilisée pour mettre à jour chaque ligne avec les valeurs one-hot encodées. + +- Rafraîchissement et sauvegarde des données : + +Le DataFrame est sauvegardé dans un nouveau fichier CSV `anime-dataset-2023-refined.csv`, puis rechargé avec `anime_id` comme index. + +- Agrégation des données par année : + +Les données sont regroupées par année de première diffusion (`Premiere_year`), calculant le score moyen (`mean_score`) et le nombre de shows (`show_count`) par année. + +Une somme totale des genres par année est également calculée (`genre_all_sum`). + +### Premières visualisations + +- Evolution de la proportion des genres par année + +Ici on va vouloir utiliser la librairie `seaborn` pour pouvoir afficher une "heatmap" + +[Proportion des genres par années](images/genre_in_years.png) + +- Nombre d'utilisateurs par pays + +ici la chose à faire n'était pas si compliquée, il fallait différencier 3 cas dans les données de localisation (en splitant le string via le caractère de la virgule) : + +On va faire alors une nouvelle colonne "COUNTRY" composée de : +- le string vide [""] -> on remplace par "UNKNOWN" +- le string composé d'un pays ["France"], -> on vient prendre le premier élément +- le string composé de la ville ET du pays ["Evry, France"] -> on vient prendre le deuxième (indice -1) + +Après ceci on vient faire une requête en groupby sur les country, on compte, puis affichage sous forme de barre. + +```python +sns.barplot(x='User_count', y='Country', data=top_15_countries, palette="viridis", ax=ax) +``` + +[Nombre d'utilisateurs par pays](images/users_by_country.png) + +## 3. Hadoop et Hive + +Pour repartir de 0 (l'option `-v` supprime les volumes) : +```shell +# Arrêt des docker-compose +docker compose -f ~/projet-ipbd24/docker-files/hadoop/docker-compose.yml -v down +docker compose -f ~/superset/docker-compose.yml -v down +# Suppression de tous les conteneurs +docker rm -f $(docker ps -a -q) +# Suppression de tous les volumes restants +docker volume rm $(docker volume ls -q) +``` + +### Démarrage + +On lance tout d'abord le cluster Hadoop avec les scripts de démarrage. Ces scripts sont disponibles dans le dossier `~/projet-ipbd24/docker-files/hadoop/`. + +Il s'agit de ceux vus en cours modifié. Les scripts de démarrage ont été légèrement factorisés avec l'introduction d'une variable pour définir le fichier `docker-compose` a utilisé. De plus, les conteneurs spark ont été enlevés car inutilisé et le nom du cluster est désormais `project` et non `test`. + +On lance le cluster : +```shell +cd ~/projet-ipbd24/docker-files/hadoop/ +./start-hadoop.sh +``` + +Dans un souci de lisibilité, j'ai ajouté des volumes nommés afin de pouvoir savoir quel volume est lié à quel conteneur. J'utilise la commande suivante pour déterminer les volumes montés de tous les conteneurs qui n'ont pas encore de nom lisible. +```shell +docker container inspect $(docker ps -q) | grep -A5 Mounts +``` + +Le seul volume à ajouter fut `hadoop_metastore_postgresql`. + +La liste des volumes est à présent limpide, pour les conteneurs actifs. +```shell +docker volume ls +``` +### Import des données dans HDFS + +On se connecte au conteneur `namenode` et on vérifie que HDFS fonctionne correctement : +```shell +docker exec -it namenode bash +# Le volume contenant les données +cd /data/hdfs/files/dataset +# Vérification du bon fonctionnement d'HDFS +hdfs dfs -df -h +``` + +On créer ensuite les répertoires dans HDFS et on ajoute nos données : +```shell +hdfs dfs -mkdir /dataset +hdfs dfs -put /data/hdfs/files/dataset/*.csv /dataset +# Pour vérifier : +hdfs dfs -ls /dataset +``` + +On peut également vérifier via l'interface graphique : http://162.19.124.170:9870/explorer.html#/ + +Une fois le cluster Hadoop/Hive/Yarn lancé et les données mises sur HDFS, on peut passer sur Hive. + +### Création de la database du Hive + +On se connecte au docker du serveur Hive après être revenu sur la VM (quitter le docker avec C-D). +```shell +docker exec -it hive-server bash +``` + +On initialise ensuite la database `myanimelist_db` ainsi que ses tables. Toutes les commandes sql nécessaires sont dans le fichier `files/scripts/init_db.sql` du dépôt. Il suffit d'exécuter ce fichier sur Hive, il se trouve dans le volume du docker `/data/hive/files/`. +```shell +/opt/hive/bin/beeline -u jdbc:hive2://hive-server:10000 -f /data/hive/files/scripts/init_db.sql +``` + +Un extrait de ce fichier SQL : +```sql +CREATE DATABASE IF NOT EXISTS myanimelist_db; + +USE myanimelist_db; + + +CREATE EXTERNAL TABLE IF NOT EXISTS score ( + user_id INT, + anime_id INT, + rating INT +) +ROW FORMAT DELIMITED +FIELDS TERMINATED BY ',' +LINES TERMINATED BY '\n' +STORED AS TEXTFILE +LOCATION '/dataset/'; + +[...] +``` + +Si aucune erreur de survient, tout va bien. On peut tout de même se connecter notre database sur Hive et vérifier que les tables sont correctes : +```shell +/opt/hive/bin/beeline -u jdbc:hive2://hive-server:10000/myanimelist_db +SHOW TABLES; +SELECT * FROM anime LIMIT 3; +SELECT * FROM users LIMIT 10; +SELECT * FROM score LIMIT 10; +``` + +On voit plusieurs problème : +- le header de chaque fichier csv a été importé. +- les groupement créé par les apostrophes ne sont pas prises en compte, en plus de cela ces groupements peuvent comprendre des retours à la ligne. +- au delà du problème des guillemets, il y a beaucoup trop de valeurs `NULL`. + +Pour le problème de guillemet et de header on remplace : +```sql +ROW FORMAT DELIMITED +FIELDS TERMINATED BY ',' +LINES TERMINATED BY '\n' +STORED AS TEXTFILE +LOCATION '/dataset/score' +``` + +Par : +```sql +ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' +WITH SERDEPROPERTIES ( + "separatorChar" = ',', + "quoteChar" = '\"', + "escapeChar" = "\\" +) +STORED AS TEXTFILE +LOCATION '/dataset/score' +TBLPROPERTIES ("skip.header.line.count"="1"); +``` + +L'ancien fichier `files/scripts/init_db.sql` s'appelle désormais `wrong_init_db.sql` pour voir les différences. + +Pour régler la trop grande présence de valeurs nulles, on créer un répertoire par dossier csv. Actuellement, toutes les tables ont la même `LOCATION` ce qui peut pose problème. + +Pour pouvoir traiter les retours à la lignes dans le csv, on écrit un écrit un script python `files/scripts/replace_newlines.py` qui remplace les retours à la ligne dans les colonnes du csv par `\\n` afin que Hive puisse l'importer. On fournit les csv à traiter en ligne de commande, le script utilise les libraires `pandas`, `os` et `sys`. +```shell +source ~/mon-venv/bin/activate +cd ~/projet-ipbd24/files/ +./scripts/replace_newlines.py dataset/*.csv + deactivate +``` + +Les fichiers traité on pour nomenclature `*_modified.csv`. + +On recommence l'importation de 0 avec les csv modifiés : +```shell +docker exec -it namenode bash +# Suppression +hdfs dfs -rm -r -f /dataset/* +# Création des dossiers +hdfs dfs -mkdir /dataset/{anime,users,score} +# Importation des données sur HDFS +hdfs dfs -put /data/hdfs/files/dataset/anime-dataset-2023_modified.csv /dataset/anime/anime-dataset-2023.csv +hdfs dfs -put /data/hdfs/files/dataset/users-score-2023_modified.csv /dataset/users/users-score-2023.csv +hdfs dfs -put /data/hdfs/files/dataset/user-filtered_modified.csv /dataset/score/user-filtered.csv +# Pour vérifier : +hdfs dfs -ls /dataset/* +# <C-D> quitter le conteneur +``` + +On supprime les tables, et on importe à nouveau dans Hive : +```shell +docker exec -it hive-server bash +/opt/hive/bin/beeline -u jdbc:hive2://hive-server:10000/myanimelist_db +DROP TABLE anime; +DROP TABLE users; +DROP TABLE score; +# <C-C> quitter Hive, pas le conteneur +``` + +On importe à nouveau, en étant dans le conteneur `hive-server` : +```shell +/opt/hive/bin/beeline -u jdbc:hive2://hive-server:10000 -f /data/hive/files/scripts/init_db.sql +``` + +Et on vérifie à nouveau : +```shell +/opt/hive/bin/beeline -u jdbc:hive2://hive-server:10000/myanimelist_db +SHOW TABLES; +SELECT * FROM anime LIMIT 3; +SELECT * FROM users LIMIT 5; +SELECT * FROM score LIMIT 5; +``` + +Finalement, après toutes ces manipulations en allé retour pour vérifier quelle modifiction fonctionne, on a nos données proprement importé dans Hive ! Plus qu'à faire de belle visualisation dans Superset + +### Résolution du problème de connexion à Hive + +Fréquemment la connexion à Hive ne fonctionne plus, la seconde commande retournant une erreur : +```shell +docker exec -it hive-server bash +/opt/hive/bin/beeline -u jdbc:hive2://hive-server:10000 +``` + +L'erreur retournée témoigne que la database par défaut `default` n'existe pas, ce qui rend la connexion impossible. +```shell +$ docker logs hive-server +FAILED: SemanticException [Error 10072]: Database does not exist: default +``` + +Pour résoudre ce problème, on arrête les deux containers du metastore et on les relance : +```shell +docker compose down hive-metastore +docker compose down hive-metastore-postgresql +cd ~/projet-ipbd24/docker-files/hadoop/ +./start-hadoop.sh +``` + +## 4. Utilisation d'Apache Superset + +Apache Superset est une plateforme de visualisation et d'exploration de données moderne. Elle inclut entre autres une interface no-code mais supporte également des requêtes SQL pour des requêtes avancées. ```shell git clone --depth=1 https://github.com/apache/superset.git cd superset +``` + +L'entièreté de cette partie, git clone compris mais hors création de Dashboard, peut être faite en lançant simplement le script suivant : +```shell +./files/superset/docker-compose-superset-git.sh +``` + +Pour vivre toutes péripéties et problèmes rencontrés, continuer avec la partie qui suit. + +### Premier essai : version dev + +On a effectué un premier lancement avec la version de développement, qui est supposé se mettre à jour lors de changement de données locales. Cependant l'interface en ligne ne fonctionnait (http://162.19.124.170:8088/, identifiants : `admin`, `admin`). + +[UI Web de la version dev en erreur](images/dev-version-erreur-connexion.png) + +La commande néanmoins : +```shell +docker compose up -f docker-compose.yml -d +``` + +Quelque chose était possiblement mal configuré, je n'ai pas spécialement cherché plus loin et j'ai installé la version `non-dev`. Il fallait d'abord désinstaller la version `dev`, ce qui a posé quelques problèmes car le network `superset_default` était encore up et ne voulait pas être arrêté. Je pense que cela était dû à un arrêt du lancement mal géré lors d'un Ctrl-D. + +J'ai donc inspecté ce réseau, ce dernier avait encore un `endpoint` actif ce qui l'empêchait d'être arrêté. Après déconnexion de l'endpoint, c'était bon. +```shell +docker network inspect superset_default +docker network disconnect -f superset_default superset_init +docker compose down +``` + +### Deuxième essai : version non-dev + +La version dev ne fonctionnant pas, nous avons lancé la version non-dev qui nous conviendrait tout autant. + +La version `non-dev` prenant une image immutable une fois `up`, c'est-à -dire que toute modification des fichiers de configuration locaux ne sont pas visibles sans un redémarrage. +```shell +docker compose -f docker-compose-non-dev.yml up -d +``` + +On se connecte ensuite sur l'interface en ligne http://162.19.124.170:8088/ avec les identifiants par défaut `admin`, `admin`. + +Tout fonctionne. + +[UI Web non-dev fonctionnel](images/non-dev-version-interface.png) + +### Connexion à Hive + +On souhaite désormais accéder aux données gérées par Hive. + +La première étape est d'installer les drivers nécessaires pour Hive sur le conteneur de Superset. On doit l'ajouter dans la configuration et recréer l'image docker. +```shell +cd ~/superset +touch ./docker/requirements-local.txt +echo "pyhive" >> ./docker/requirements-local.txt docker compose -f docker-compose-non-dev.yml up -d ``` -On s'y connecte à l'adresse http://162.19.124.170:8088/ avec les identifiants -par défaut `admin`, `admin`. + Deuxièmement, sur l'interface web (http://162.19.124.170:8088/, admin, admin) on va dans "Settings > Database Connections > + Database > SUPPORTED DATABASES" et on sélectionne Apache Hive. On ajoute ici l'URI SQLAlchemy de Hive : +``` +hive://hive@162.19.124.170:10000/myanimelist_db +``` + +On teste la connexion à la db en cliquant sur le bouton `TEST CONNECTION`. La connexion est bonne. + +On clique ensuite sur "Connect", la db est créée sur Superset bien qu'une erreur s'affiche. + +### Création de Dashboards + +## 5. Pour aller plus loin + +Superset est actuellement toujours configuré en mode développement. Mettre en place un environnement de production digne de ce nom selon les indications de la documentation nécessite un certain nombre de changement. + +https://superset.apache.org/docs/configuration/configuring-superset/#setting-up-a-production-metadata-database +https://superset.apache.org/docs/installation/docker-compose +https://minikube.sigs.k8s.io/docs/start/ +minikube : kubernetes pour une seul host (VM). + + +## TL;DR + +Les commandes pour tout mettre en place, en dehors de ce qui concerne l'interface Superset et la création des dashboard (via l'UI). + +```shell +``` +