
Architecture Big Data dans le Cloud
Définition d'une architecture Big Data par AWS
Contexte
L'objectif ici est d'étudier la faisabilité de développer une application mobile qui permettrait aux utilisateurs de prendre une photo d'un fruit et d'obtenir des informations sur ce fruit. Le développement de l’application s’accompagne de la nécessité de construire une première version d’une architecture Big Data.
Les étapes sont :
Extraction de fonctionnalités à partir d'images
Développement d'un modèle
Bâtiment d'architecture Big Data
Données
Les données sont disponibles ici : https://www.kaggle.com/datasets/moltean/fruits
Les données sont divisées par catégories, 120 types de fruits et légumes. Avec 492 images par dossier, entre 1 et 4 dossiers par catégorie, et environ 5 Ko par image, il y a plus de 300 Mo de données à stocker.
Plusieurs options de stockage étaient disponibles. J'ai sélectionné AWS S3, solution peu coûteuse avec des temps de transfert attractifs, et une bonne offre gratuite (5 Go pour 12 mois).
Environnement

J'utilise Apache Spark, un moteur d'analyse unifié et ultra-rapide pour le traitement de données à grande échelle. Comme Hadoop auparavant, il permet d'exécuter efficacement des calculs nécessitant un accès rapide et itératif à une grande quantité de données, des analyses à grande échelle à l'aide de machines Cluster.
Comme je code avec Python, j'ai mis en place un environnement Pyspark :
Java 8
Hadoop 3.3
Étincelle 3.3.1
Extraction de caractéristiques
Afin de développer un Modèle de Classification d'Images, il faut d'abord pouvoir extraire des caractéristiques de ces images, c'est-à -dire prendre une image et restituer les points clés de cette image sous forme de variables/vecteurs, l'« empreinte numérique ». » de l’image, invariante quelles que soient les transformations.
Pour cette tâche, j'ai utilisé VGG16. VGG16 est un réseau neuronal convolutif pré-entraîné. Il prend une image en entrée et restitue automatiquement les caractéristiques de cette image, par extraction et priorisation automatiques desdites caractéristiques. Il existe plusieurs utilisations possibles de VGG16 (Classifier, Standalone Feature Extractor…), et plusieurs stratégies d'apprentissage par transfert (mise au point totale, mise au point partielle…).
Ma version de VGG16 est un extracteur de fonctionnalités entièrement pré-entraîné, dans lequel je supprime uniquement les dernières couches de classification sans recycler le modèle.
Réduction des fonctionnalités avec ACP
Avec plus de 1000 variables, une réduction était donc nécessaire.

Les deux premières composantes permettent d'expliquer 45 % de la variance. En utilisant également les composants 3 et 4, on atteint près de 60 %.
Au final, j'ai obtenu 4 fonctionnalités après ACP.
Architecture Big Data
Accès longue distance
API pour Hadoop/Apache Spark pour lire et écrire directement des objets Amazon S3.
Plusieurs options :
Boto3Â : permet aux scripts python (uniquement) d'interagir avec les ressources AWS
S3Â : permet aux scripts d'interagir avec les ressources AWS
J'ai choisi S3a, plus rapide et plus polyvalent.
Output
Apache Parquet est un format de stockage de données offrant de nombreux avantages pour les projets de grande envergure.
Avec Apache Parquet, les données sont présentées en colonnes. Les avantages sont :
Lecture des valeurs d'attribut plus rapidement
Lecture d'un sous-ensemble d'attributs également plus rapide
Structures de données complexes représentées plus efficacement
Cluster de calcul
Afin d'accéder aux images stockées dans S3, et d'appliquer toutes les étapes, j'ai choisi EC2 (Elactic Compute Cloud), un service AWS de mise à disposition de serveurs.
Pour ce projet, les options sont :
AMI (Amazon Machine Image) : Amazon Linux
Type d'instance : t2.medium avec 4G RAM
Stockage : 8 G