EA2013 Social data engineering

Présentation

 * Enseignants : Georges-Pierre Bonneau, Didier Donsez (EA2013)
 * Auteur : Walid bibi 
 * Télécharger : [[Media:EA_2013_social_data_engineering.pdf]]

Abstract
Social networks have a more and more large part in our daily life.Users in the millions and shared datas on these networks are evaluated in petabytes. this is called big data. Big data represent large volumes of unstructured data. You have to arrange them in order to exploit them. For that, there are powerful tools as Hadoop used by facebook, linkedIn, amazon...

Résumé
Les réseaux sociaux occupent un.e part de plus en plus importante dans notre vie quotidienne. Les utilisateurs se comptent en millions et les données partagées sur ces réseaux sont évaluées en pétaoctets. C'est ce qu'on appelle les big data. les big data représentent de gros volumes de données non structurées. Il faut donc trier ces données afin de les exploiter. Pour cela il existe des outils puissants comme Hadoop utilisés par facebook, linkedin, amazon etc etc...

Contexte
Aujourd'hui l'utilisation des réseaux sociaux prend une part de plus en plus important dans notre vie quotidienne. Par exemple, on compte plus de 800 millions utilisateurs sur facebook, 200 millions de connectés sur twitter et environ 490 millions de visiteurs chaque mois. Quotidiennement, ces abonnés sont très actifs sur les réseaux sociaux : par jour, on dénombre 50 millions de tweets, 60 millions d'actualités facebook et 1 milliard de mise à jour de profils facebook. Toutes ces données partagées sont évaluées en pétaoctets : c'est ce que l'on appelle les Big Data.

Big Data
Les données des médias sociaux participent au phénomène dit des «Big Data» qui englobe également la croissance des données traditionnelles et des documents bureautiques, emails, images et autres fichiers numériques. Contrairement aux données relationnelles des applications d’entreprise classiques (ERP, CRM, applications analytiques), la plupart des données des médias sociaux ne sont pas structurées. Les pétaoctets d’information participant au Big Data ont donné naissance à des infrastructures matérielles et logicielles spécialement conçues pour traiter ces volumes extrêmes. C’est le cas de la plate-forme open source Hadoop et des applications de datawarehousing.

Hadoop
Hadoop est un framework open source écrit en Java et géré par la fondation Apache. Il a été conçu pour réaliser des traitements de volumes de données en masse. Il est utilisé par des entreprises ayant de très fortes volumétries de données à traiter. Parmi elles, on trouve notamment des géants du web comme Twitter, LinkedIn, ou encore eBay et Amazon. Hadoop fonctionne sur le principe des grilles de calcul consistant à répartir l'exécution d'un traitement intensif de données sur plusieurs noeuds ou grappes de serveurs. Il repose sur le système de fichiers HDFS (Hadoop Distributed File System) et MapReduce pour distribuer et gérer les calculs.

Dans Hadoop, le nœud maître est appelé le JobTracker et les nœuds esclaves sont appelés TaskTracker. Chaque nœud esclave va contenir les blocs de données en les répliquant. Le nœud maître connaît les emplacements des différentes répliques. Le nœud maître secondaire sert à effectuer des sauvegardes régulières du nœud maître afin de pouvoir le réutiliser en cas de problème.

Hadoop exécute une tâche de type MapReduce en commençant par diviser les données en entrée en bloc de données de même taille. Ensuite, chaque bloc est planifié pour être exécuté par un TaskTracker. Le processus d’assignement des tâches est implémenté comme un protocole de type « battement de cœur ». Cela signifie que le TaskTracker notifie le JobTracker que sa tâche est terminée afin que celui-ci lui assigne une nouvelle tâche à exécuter. Lorsque la fonction map est achevée, le système va regrouper toutes les paires intermédiaires et lancer une série de réductions pour produire le résultat final

Hadoop Distributed file system
Le HDFS est un système de fichiers distribué, extensible et portable développé par Hadoop à partir du GoogleFS. Écrit en Java, il a été conçu pour stocker de très gros volumes de données sur un grand nombre de machines équipées de disques durs banalisés. Il permet l'abstraction de l'architecture physique de stockage, afin de manipuler un système de fichiers distribué comme s'il s'agissait d'un disque dur unique.

Une architecture de machines HDFS (aussi appelée cluster HDFS) repose sur deux types de composants majeurs :

NameNode (nœud de nom) : ce composant gère l'espace de noms, l'arborescence du système de fichiers et les métadonnées des fichiers et des répertoires. Il centralise la localisation des blocs de données répartis dans le cluster. Il est unique mais dispose d'une instance secondaire qui gère l'historique des modifications dans le système de fichiers (rôle de backup). Ce NameNode secondaire permet la continuité du fonctionnement du cluster Hadoop en cas de panne du NameNode d'origine.

DataNode (nœud de données) : ce composant stocke et restitue les blocs de données. Lors du processus de lecture d'un fichier, le NameNode est interrogé pour localiser l'ensemble des blocs de données. Pour chacun d'entre-eux, le NameNode renvoie l'adresse du DataNode le plus accessible, c'est-à-dire le DataNode qui dispose de la plus grande bande passante. Les DataNodes communiquent de manière périodique au NameNode la liste des blocs de données qu'ils hébergent. Si certains de ces blocs ne sont pas assez répliqués dans le cluster, l'écriture de ces blocs s'effectue en cascade par copie sur d'autres DataNodes.

Chaque DataNode sert de bloc de données sur le réseau en utilisant un protocole spécifique au HDFS. Le système de fichiers utilise la couche TCP/IP pour la communication. Les clients utilisent le Remote Procedure Call pour communiquer entre eux. Le HDFS stocke les fichiers de grande taille sur plusieurs machines. Il réalise la fiabilité en répliquant les données sur plusieurs hôtes et par conséquent ne nécessite pas de stockage RAID sur les hôtes. Avec la valeur par défaut de réplication, les données sont stockées sur trois nœuds : deux sur le même support et l'autre sur un support différent. Les DataNodes peuvent communiquer entre-eux afin de rééquilibrer les données et de garder un niveau de réplication des données élevé.

Le HDFS n'est pas entièrement conforme aux spécifications POSIX, en effet les exigences relatives à un système de fichiers POSIX diffèrent des objectifs cibles pour une application Hadoop. Le compromis de ne pas avoir un système de fichiers totalement compatible POSIX permet d'accroître les performances du débit de données.

Le HDFS a récemment amélioré ses capacités de haute disponibilité, ce qui permet désormais au serveur de métadonnées principal d’être basculé manuellement sur une sauvegarde en cas d'échec (le basculement automatique est en cours d'élaboration). Les NameNodes étant le point unique pour le stockage et la gestion des métadonnées, ils peuvent être un goulot d'étranglement pour soutenir un grand nombre de fichiers, notamment lorsque ceux-ci sont de petite taille. En acceptant des espaces de noms multiples desservis par des NameNodes séparés, le HDFS limite ce problème.



Algorithme Map Reduce
Un cluster MapReduce utilise une architecture de type Maître-esclave où un nœud maître dirige tous les nœuds esclaves.

MapReduce possède quelques caractéristiques :


 * Le modèle de programmation du MapReduce est simple mais très expressif. Il possède deux fonction, map et reduce, qui peuvent être utilisées pour de nombreux types de traitement des données, les fouilles de données, les graphes… Il est indépendant du système de stockage et peut manipuler de nombreux types de variable.
 * Le système découpe automatiquement les données en entrée en bloc de données de même taille. Puis, il planifie l’exécution des tâches sur les nœuds disponibles.
 * La parallélisation est invisible à l'utilisateur afin de lui permettre de se concentrer sur le traitement des données.

Une fois qu'un nœud a terminé une tâche, on lui assigne un nouveau bloc de données. Grâce à cela, un nœud rapide fera beaucoup plus de calculs qu'un nœud plus lent. Le nombre de tâches Map ne dépend pas du nombre de nœuds, mais du nombre de blocs de données en entrée. Chaque bloc se fait assigner une seule tâche Map. De plus, toutes les tâches Map n'ont pas besoin d'être exécutées en même temps en parallèle, les tâches Reduce suivent la même logique.

Par exemple, si des données en entrée sont divisées en 400 blocs et qu'il y a 40 nœuds dans le cluster, le nombre de tâches Map sera de 400. Il faudra alors 10 vagues de Map pour réaliser le mapping des données.