Analyse des gemmes avec Hadoop

HadoopHadoopBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans le charme enchanté de l'Académie Royale de Magie, une équipe de gemmologues expérimentés s'est consacrée à dévoiler les mystères des gemmes mystiques qui alimentaient le monde magique. Parmi eux, il y avait une chercheuse prodigieuse, Aria, dont la curiosité inébranlable et son esprit perspicace la rendaient une force à ne pas négliger.

Récemment, l'académie a acquis un immense trésor de données concernant les propriétés et les applications de ces gemmes, une abondance de connaissances qui promettait d'ouvrir de nouvelles voies d'innovation magique. Cependant, l'énorme volume d'informations présentait un défi redoutable, un défi qui nécessitait l'aide d'outils analytiques puissants.

Aria, indéfectible, s'est tournée vers l'illustre écosystème Hadoop, reconnaissant son potentiel pour dompter l'immense étendue de données. Son objectif était double : plonger plus profondément dans les subtilités du comportement des gemmes et découvrir des modèles cachés qui pourraient révolutionner la manière dont la magie est exploitée et utilisée.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL hadoop(("Hadoop")) -.-> hadoop/HadoopHDFSGroup(["Hadoop HDFS"]) hadoop(("Hadoop")) -.-> hadoop/HadoopHiveGroup(["Hadoop Hive"]) hadoop/HadoopHDFSGroup -.-> hadoop/fs_mkdir("FS Shell mkdir") hadoop/HadoopHDFSGroup -.-> hadoop/fs_cp("FS Shell cp") hadoop/HadoopHiveGroup -.-> hadoop/manage_db("Managing Database") hadoop/HadoopHiveGroup -.-> hadoop/create_tables("Creating Tables") hadoop/HadoopHiveGroup -.-> hadoop/load_insert_data("Loading and Inserting Data") hadoop/HadoopHiveGroup -.-> hadoop/group_by("group by Usage") hadoop/HadoopHiveGroup -.-> hadoop/distribute_by("distribute by Usage") hadoop/HadoopHiveGroup -.-> hadoop/partitions_buckets("Implementing Partitions and Buckets") subgraph Lab Skills hadoop/fs_mkdir -.-> lab-288967{{"Analyse des gemmes avec Hadoop"}} hadoop/fs_cp -.-> lab-288967{{"Analyse des gemmes avec Hadoop"}} hadoop/manage_db -.-> lab-288967{{"Analyse des gemmes avec Hadoop"}} hadoop/create_tables -.-> lab-288967{{"Analyse des gemmes avec Hadoop"}} hadoop/load_insert_data -.-> lab-288967{{"Analyse des gemmes avec Hadoop"}} hadoop/group_by -.-> lab-288967{{"Analyse des gemmes avec Hadoop"}} hadoop/distribute_by -.-> lab-288967{{"Analyse des gemmes avec Hadoop"}} hadoop/partitions_buckets -.-> lab-288967{{"Analyse des gemmes avec Hadoop"}} end

Exploration du jeu de données de gemmes

Dans cette étape, nous allons familiariser nous avec le jeu de données de gemmes et sa structure, en posant les bases de notre analyse ultérieure.
Tout d'abord, assurez-vous d'être connecté en tant qu'utilisateur hadoop en exécutant la commande suivante dans le terminal :

su - hadoop

Maintenant, commençons par créer un exemple. Copiez la ligne de commande suivante dans le terminal pour créer notre fichier d'échantillonnage.

mkdir -p hadoop/gemstone_data
cd hadoop/gemstone_data
echo "gem_id,gem_name,color,hardness,density,refractive_index" > gem_properties.csv
echo "1,Ruby   ,Red     ,9.0,4.0,1.77" >> gem_properties.csv
echo "2,Emerald,Green   ,8.0,3.1,1.58" >> gem_properties.csv
echo "3,Sapphire,Blue    ,9.0,4.0,1.76" >> gem_properties.csv
echo "4,Diamond,Colorless,10.0,3.5,2.42" >> gem_properties.csv
echo "5,Amethyst,Purple  ,7.0,2.6,1.54" >> gem_properties.csv
echo "6,Topaz  ,Yellow  ,8.0,3.5,1.63" >> gem_properties.csv
echo "7,Pearl  ,White   ,2.5,2.7,1.53" >> gem_properties.csv
echo "8,Agate  ,Multi   ,7.0,2.6,1.53" >> gem_properties.csv
echo "9,Rose   ,Pink    ,7.0,2.7,1.54" >> gem_properties.csv
echo "10,CatsEye,Green   ,6.5,3.2,1.54" >> gem_properties.csv
echo "gem_id,application" > gem_applications.csv
echo "1,Fire Magic       " >> gem_applications.csv
echo "2,Earth Magic      " >> gem_applications.csv
echo "3,Water Magic      " >> gem_applications.csv
echo "4,Enhancement Magic" >> gem_applications.csv
echo "5,Psychic Magic    " >> gem_applications.csv
echo "6,Lightning Magic  " >> gem_applications.csv
echo "7,Illusion Magic   " >> gem_applications.csv
echo "8,Strength Magic   " >> gem_applications.csv
echo "9,Love Magic       " >> gem_applications.csv
echo "10,Stealth Magic   " >> gem_applications.csv

Maintenant que nous sommes dans le répertoire gemstone_data, prenons un moment pour examiner le contenu de ce répertoire :

ls

En parcourant le répertoire, vous verrez ces deux fichiers, chacun consacré à un aspect distinct des données sur les gemmes. gem_properties.csv approfondit les caractéristiques physiques des gemmes, tandis que gem_applications.csv fournit des informations sur leurs diverses utilisations magiques.

Pour mieux comprendre notre jeu de données, jetons un coup d'œil aux premières lignes de l'un de ces fichiers :

head -n 5 gem_properties.csv

Le résultat devrait être similaire au suivant :

gem_id,gem_name,color,hardness,density,refractive_index
1,Ruby,Red,9.0,4.0,1.77
2,Emerald,Green,8.0,3.1,1.58
3,Sapphire,Blue,9.0,4.0,1.76
4,Diamond,Colorless,10.0,3.5,2.42

Cette commande a affiché les cinq premières lignes du fichier gem_properties.csv, vous donnant un aperçu de sa structure et de son contenu.

Création d'une table Hive

Maintenant que nous sommes familiers avec le jeu de données, passons à la création d'une table Hive pour stocker et interroger les données sur les propriétés des gemmes.

Tout d'abord, lancez l'interface de ligne de commande Hive :

hive

Une fois dans l'interface de ligne de commande Hive, créez une nouvelle base de données appelée gemstone_analysis pour stocker nos données sur les gemmes :

CREATE DATABASE gemstone_analysis;

Ensuite, basculez vers la base de données nouvellement créée :

USE gemstone_analysis;

Avec la base de données configurée, passons à la création d'une table nommée gem_properties pour stocker les données du fichier gem_properties.csv. Cette table contiendra des informations sur l'identifiant de la gemme, le nom, la couleur, la dureté, la densité et l'indice de réfraction :

CREATE TABLE gem_properties (
  gem_id INT COMMENT 'Identifiant unique de la gemme',
  gem_name STRING COMMENT 'Nom de la gemme',
  color STRING COMMENT 'Couleur de la gemme',
  hardness FLOAT COMMENT 'Dureté de la gemme',
  density FLOAT COMMENT 'Densité de la gemme',
  refractive_index FLOAT COMMENT 'Indice de réfraction de la gemme'
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE
TBLPROPERTIES ('skip.header.line.count'='1');

Cette instruction définit la structure de la table gem_properties, en spécifiant les noms de colonnes et les types de données. La clause ROW FORMAT indique que les données sont délimitées par des virgules, et la clause STORED AS TEXTFILE spécifie que les données doivent être stockées sous forme de fichier texte brut.

Maintenant, chargeons les données du fichier gem_properties.csv dans la table gem_properties nouvellement créée :

LOAD DATA LOCAL INPATH '/home/hadoop/hadoop/gemstone_data/gem_properties.csv'
INTO TABLE gem_properties;

Cette commande charge les données à partir du chemin de fichier spécifié dans la table gem_properties.

Une fois les données chargées, vérifions qu'elles ont été chargées correctement en exécutant une requête SELECT simple pour afficher les cinq premières lignes de la table gem_properties :

SELECT * FROM gem_properties LIMIT 5;

Cette requête affichera les cinq premières lignes de la table gem_properties, nous permettant de confirmer que les données ont été chargées correctement. Le résultat devrait être le suivant :

OK
1	Ruby    	Red      	9.0	4.0	1.77
2	Emerald 	Green    	8.0	3.1	1.58
3	Sapphire	Blue     	9.0	4.0	1.76
4	Diamond 	Colorless	10.0	3.5	2.42
5	Amethyst	Purple   	7.0	2.6	1.54
Time taken: 1.234 seconds, Fetched: 5 row(s)

Analyse des propriétés des gemmes

Dans cette étape, nous allons exploiter le pouvoir de la clause DISTRIBUTE BY dans Hive pour analyser efficacement les données sur les propriétés des gemmes.

Pour commencer, créons une nouvelle table nommée distributed_gem_properties pour partitionner les données par la colonne gem_name :

(Ça peut prendre un peu de temps, soyez patient)

CREATE TABLE distributed_gem_properties
AS
SELECT * FROM gem_properties
DISTRIBUTE BY gem_id;

Cette table reflète la structure de la table d'origine gem_properties mais incorpore des clauses supplémentaires pour organiser et distribuer efficacement les données :

AS SELECT * FROM gem_properties : Cette partie de l'instruction sélectionne toutes les colonnes et les lignes de la table gem_properties existante. Nous copions essentiellement les données de la table d'origine dans notre nouvelle table distribuée.

DISTRIBUTE BY gem_id : Cette clause spécifie la distribution des données entre les réducteurs sur la base de la colonne gem_id. En distribuant les données de cette manière, nous pouvons utiliser le traitement parallèle pour analyser plus efficacement les propriétés des gemmes.

Maintenant que nous avons configuré notre table distribuée, nous pouvons procéder à effectuer diverses analyses sur les données des propriétés des gemmes avec une efficacité améliorée.

Exécutons une requête pour trouver les gemmes dont la dureté est comprise entre 8,0 et 9,0, copiez et collez ce code dans le terminal pour l'exécuter.

SELECT * FROM distributed_gem_properties WHERE hardness BETWEEN 8.0 AND 9.0;

Cette requête récupérera les données sur les gemmes de la table distribuée où la dureté se situe dans la plage spécifiée. Le résultat devrait être le suivant :

OK
6	Topaz   	Yellow   	8.0	3.5	1.63
3	Sapphire	Blue     	9.0	4.0	1.76
2	Emerald 	Green    	8.0	3.1	1.58
1	Ruby    	Red      	9.0	4.0	1.77
Time taken: 0.388 seconds, Fetched: 4 row(s)

Ensuite, essayons le extrait de code suivant, qui utilise GROUP BY.

SELECT color, COUNT(*) AS count FROM distributed_gem_properties GROUP BY color;

Ce code est une instruction de requête utilisée pour compter le nombre de gemmes pour chaque couleur dans la table distribuée distributed_gem_properties. Le résultat devrait être le suivant :

OK
Blue     	1
Colorless	1
Green    	2
Multi    	1
Pink     	1
Purple   	1
Red      	1
White    	1
Yellow   	1
Time taken: 18.566 seconds, Fetched: 9 row(s)

Voici un autre exemple de requête utilisant PARTITION BY :

SELECT gem_name, color, COUNT(*) OVER(PARTITION BY color) AS color_count
FROM distributed_gem_properties;

Cette requête sélectionne le gem_name et la color de la table distributed_gem_properties et compte le nombre de gemmes pour chaque color. La clause PARTITION BY spécifie la colonne par laquelle partitionner le comptage, dans ce cas, la colonne color. Cela générera un comptage séparé pour chaque couleur de gemmes. Le résultat devrait être le suivant :

OK
Sapphire	Blue     	1
Diamond 	Colorless	1
Emerald 	Green    	2
CatsEye	Green    	2
Agate   	Multi    	1
Rose    	Pink     	1
Amethyst	Purple   	1
Ruby    	Red      	1
Pearl   	White    	1
Topaz   	Yellow   	1
Time taken: 20.865 seconds, Fetched: 10 row(s)

Ce ne sont que deux exemples simples pour nous aider à acquérir une compréhension préliminaire de l'analyse et de l'application des tables distribuées par DISTRIBUTE BY, en incorporant des commandes telles que PARTITION BY et GROUP BY. Cette leçon est terminée, et je crois que vous avez maintenant une certaine compréhension.

Sommaire

Dans ce laboratoire, nous avons entrepris un voyage captivant dans le domaine de l'analyse des gemmes, guidés par la gemmologue talentueuse du monde magique, Aria. En exploitant le pouvoir de Hadoop et Hive, nous avons plongé dans un immense trésor de données, découvrant les secrets cachés dans les gemmes mystiques qui alimentent la magie de ce royaume enchanté.

Au cours d'une série d'étapes soigneusement élaborées, nous avons exploré les subtilités du jeu de données de gemmes, créé une table Hive robuste pour stocker et interroger les données, et finalement utilisé la clause DISTRIBUTE BY pour optimiser notre analyse. Cette technique puissante nous a permis de partitionner et de distribuer efficacement les données, ouvrant la voie à des requêtes plus rapides et plus ciblées, révélant des insights précieux sur les propriétés et les applications de ces extraordinaires gemmes.

Au cours de tout ce laboratoire, nous avons non seulement acquis une expérience pratique avec Hadoop et Hive, mais avons également été témoins du potentiel transformateur de l'analyse de données massives dans la révélation des mystères du monde magique. En maîtrisant ces outils, nous nous sommes équipés des connaissances et des compétences nécessaires pour entreprendre de nouvelles aventures, où les données sont la clé pour déverrouiller des possibilités infinies et repousser les limites de l'innovation magique.