Tweets et Hadoop: Grooptown nous disent comment ils font

On parle souvent de BIG DATA comme un moyen d’écouter les réseaux sociaux. Grooptown le fait pour ses clients et ils nous parlent de leur expérience. Dans Azure, ils utilisent HDInsight, mais également des VM.

[View:https://www.youtube.com/watch?v=UO08rixhBz0]

Voici les explications plus détaillées de Pierre Lanvin:

Pour compléter les propos de cette vidéo, voici quelques illustrations et approfondissements dans le cas de l’analyse de tweets (batch & temps réel)

Le stockage et l’exploitation des tweets, en bref

L’API Twitter peut être interrogée selon deux méthodes principales :

· L’api REST nous permet de requêter des données sur les objects Twitter tels que les tweets et les utilisateurs sur un mode requête/réponse.

· L’api Streaming, qui permet de recevoir un flux de tweets en temps réel répondant à certains critères comme des mots clés ou des comptes utilisateurs.

Afin de pouvoir exploiter les tweets de façon plus pratique,  et travaillant en java, nous utilisons le client twitter hosebird (https://github.com/twitter/hbc).

On peut alors traiter facilement les tweets :

· En temps réel, en couplant hosebird à twitter4j, la librairie twitter de référence en java (https://twitter4j.org/en/index.html)

· Pour du stockage brut, sans altérer la donnée d’origine, il suffit alors d’écrire les tweets ligne par ligne dans un fichier texte, qui sera facilement exploitable dans HDInsight notamment grâce à la fonction get_json_object de Hive

· Soit pour du stockage optimisé et compressé, en utilisant par exemple le format Apache Avro (https://avro.apache.org), un format largement répandu dans l’écosystème Hadoop, et donc pris en charge nativement par Hive, Pig ou autres. HDInsight 3, via le passage à Hive 0.12, apporte par ailleurs des correctifs et optimisations pour ce format. On peut y coupler une compression snappy, qui offre un excellent compromis entre taille et rapidité.

Afin d’exploiter ces données dans HDInsight, il est possible d’utiliser le service blob storage pour stocker ces fichiers. Là encore, travaillant en java, le sdk azure (https://azure.microsoft.com/en-us/documentation/articles/java-download-windows/) nous facilite grandement la tâche.

HDInsight nous permet d’attaquer les données directement dans le blob storage en lieu et place d’un hdfs habituel pour hadoop. L’avantage est clair du point de vue coût : il est possible d’instancier des clusters à la volée, de les éteindre et de continuer parallèlement à stocker des tweets, sans perdre aucune donnée, ce qui serait impossible avec un cluster hadoop plus traditionnel. Comme le montre le Snippet 1, on peut accéder aux données via les tables externes Hive. Le schema avro est également communiqué afin d’identifier les colonnes. Ce schéma peut bien sûr évoluer avec le temps. Enfin le repair table statuses permet de mettre à jour immédiatement le metastore avec les nouvelles partitions enregistrées.

image

Snippet 1

Hadoop yarn, storm et perspectives

Un autre point mentionné dans la vidéo concerne l’analse en temps réel. Comment exploiter des tweets afin d’en extraire des tendances temps réel ? Les exemples et tutoriaux d’application de Apache Storm (https://storm.incubator.apache.org/) à Twitter ne manquent pas sur internet (mention spéciale à ceux de Michael G. Noll https://www.michael-noll.com/tutorials/)

Avant de parler des nouvelles perspectives avec Hadoop 2, et comme mentionné dans la vidéo, il est tout à fait possible d’instancier des clusters Storm à la volée sur Azure, moyennant un peu de travail préliminaire.

Sans rentrer dans le détail, rappelons que storm fonctionne avec un daemon principal appelé ‘Nimbus’, qui distribue le code sur le cluster et assigne les différentes tâches aux machines, et des daemons ‘Supervisor’, qui effectuent les tâches à proprement parler. Le tout est orchestré par Zookeeper.

image

Figure 1 (cf https://storm.incubator.apache.org/documentation/Tutorial.html )

Pour instancier et eteindre des clusters storm à la volée sur Azure, on peut procéder de la façon suivante :

On crée une VM « nimbus » qui contient le daemon Storm nimbus, et un daemon zookeeper (même si normalement 3 sont conseillés) et on lui affecte une ip fixe (https://windowsitpro.com/windows-azure/set-azure-vm-static-ip-address)

De même on peut créer une VM « supervisor » pré-configurée pour se connecter au nimbus.

On capture alors une image de cette VM, et on peut alors « éteindre » et « rallumer » le cluster grâce à un script comme celui-ci. Le nimbus est simplement commissionné/décommissionné, et les superviseurs créés selon l’image capturée précédemment.

image

Snippet 2 : Instanciation et Shutdown d’un cluster Storm sur Azure

Dans les nouveautés proposées par HDInsight 3, l’arrivée d’Hadoop 2 permet de séparer la partie ressources matérielles d’un cluster de machines hadoop de la notion de jobs MapReduce. On peut alors réaliser des opérations allant de la « simple » éxecution de scripts bash sur toutes les machines à l’éxecution d’applications distribuées complexes dans n’importe quel language. Parmi les possibilités offertes, une a retenu notre attention : il est maintenant possible par exemple d’automatiser l’ensemble d’une installation Storm sur un cluster Yarn comme le montre le projet Yahoo storm-yarn (https://github.com/yahoo/storm-yarn), qui pourrait sans doute avec quelques adaptations s’éxécuter sur Azure même si nous n’avons pas encore pu le mettre en œuvre.

Quelques mots sur Grooptown

Grooptown (www.grooptown.com) a deux activités principales. La première est un service permettant aux nouvelles structures de développer leur première communauté sur Twitter. Nous aidons ainsi ces structures à dépasser leur premier cercle de followers à l’aide d’algorithmes et de techniques de monitoring spécialement adaptées.

Notre deuxième activité est une activité de conseil où nous intervenons comme data scientists avec une expertise toute particulière sur les réseaux sociaux. Nous sommes toujours à la recherche de nouveaux challenges dans le domaine. N’hésitez pas à nous contacter à l’adresse team@grooptown.com pour tout renseignement !