ANALYSE DE DONNÉES DE TWITTER AVEC APACHE HADOOP
Déclaration du problème: Les plates-formes de médias sociaux telles que Twitter offrent un accès facile au grand public pour exprimer ses opinions. Les opinions positives ou négatives sur une entreprise ou sur ses produits et services peuvent se déplacer très rapidement sur les réseaux sociaux et avoir un impact significatif sur la valeur de la marque et la part de marché de cette entreprise. Par conséquent, les entreprises ont besoin de méthodes et d’outils efficaces pour surveiller les messages sur Twitter, en temps réel, liés à l’entreprise.
Motivations:
L’objectif principal est d’analyser les données en continu de Twitter via des retweets sur les produits et services d’une entreprise et de comprendre de quoi les gens parlent, afin de réagir rapidement à la publicité négative et de tirer parti des médias sociaux pour la publicité et la construction de la marque. .
Objectifs:
L’objectif principal est de mettre en place un système efficace d’extraction, de chargement et d’analyse des données en streaming Twitter en temps réel et d’analyser les messages afin de comprendre l’opinion publique sur les produits et services des entreprises.
Solutions proposées:
Nous allons répondre aux questions ci-dessus en utilisant des requêtes SQL: Nous voulons déterminer quels utilisateurs sont responsables du plus grand nombre de retweets pour rechercher les utilisateurs influents, par ordre décroissant du nombre le plus élevé de retweet.
Nous allons utiliser les fuseaux horaires pour avoir une idée de l’endroit où se trouvent les utilisateurs dans le monde.
Nous pouvons également formuler des requêtes plus complexes pour répondre à des questions telles que «Quels étaient les hashtags les plus courants?».
Nous utilisons Apache Flume, Apache HDFS, Apache Oozie et Apache Hive pour concevoir un pipeline de données de bout en bout qui nous permettra d’analyser les données Twitter.
Étape 1: Mon environnement de travail
1.1 Cloudera Manager et CDH4.4
La version 6.2 (finale) de Red Hat CentOS (64 bits) dans Cloudera quickstart VM 4.4.0 avec Hadoop 2.0.0-cdh4.4.0 .check it this here:
cloudera_quickstart
Nous avons besoin des composants principaux suivants: cluster à nœud unique Hadoop 2.0.0, Flume, Oozie et Hive.
1.2 Installer MySQL
MySQL est la base de données recommandée pour la base de données Oozie et le métastore Hive.
Cliquez ici: MySQL-linux-installation-native.html pour la documentation d’installation.
Commande pour exécuter l’installation de MySQL:
Démarrer notre démon MySQL:
Étape 2: Configuration du canal Apache:
2.1 Créer un jeton d’accès Twitter:
Créer un compte twitter: Aller à https://dev.twitter.com et à mes applications, créez ensuite un compte Twitter comme indiqué ci-dessous.
2.2 Créer mon application comme indiqué ci-dessous dans les captures d’écran.
2.3 Détails sur ma candidature
2.4 Bouton Créer mon jeton d’accès dans la section «Clés et jetons d’accès»
Mon jeton d’accès a été généré dans un certain temps que j’aurais besoin d’utiliser dans le fichier flume.conf pour la configuration du canal dans les prochaines étapes..
Étape 3: Configuration de l’agent de canal:
3.1 Construire ou télécharger la source personnalisée Flume
Allez sur ce lien et téléchargez le code à partir d’ici (https://github.com/cloudera/cdh-twitter-example).
Dans notre cas, nous utilisons le fichier jar partagé avec twitter-project, puis nous l’avons téléchargé dans le répertoire / home / cloudera / Downloads:
3.2 Ajouter le fichier JAR au classpath de Flume
Avec le flume-sources-jar partagé dans le dossier twitter-project.
[php]sudo cp flume-sources-1.0-SNAPSHOT.jar /usr/lib/flume-ng/lib/ sudo chmod +r /usr/lib/flume-ng/lib/flume-sources-1.0-SNAPSHOT.jar[/php]
3.3 Créez un répertoire HDFS “/user /cloudera /twitter/” où vous obtiendrez les entrées Twitter.
[php]hdfs dfs -mkdir /user/cloudera/twitter/[/php]
3.4 Editez flume conf “flume-sources / flume.conf” pour changer les clés Twitter, les jetons et le chemin d’accès hdfs.
Utiliser les jetons d’accès Twitter du compte Twitter. Changer le chemin HDFS en
[php]“/user/cloudera/twitter/%Y/%m/%d/%H/”[/php]
[php]pwd cat /home/cloudera/Downloads/flume-sources/flume.conf[/php]
# Sous licence Apache Software Foundation (ASF) TwitterAgent.sources = Twitter TwitterAgent.channels = MemChannel TwitterAgent.sinks = HDFS TwitterAgent.sources.Twitter.type = com.cloudera.flume.source.TwitterSource TwitterAgent.sources.Twitter.channels = MemChannel TwitterAgent.sources.Twitter.consumerKey = M 0 zPfqY 7 IgI 8 oKRnZn 0 o 6 U 6 Me TwitterAgent.sources.Twitter.consumerSecret = ARwzrT 4 kFe 22 S 3 OUPQZuXaHNYGlkyyLdMvMJDwJwXyb 3 gJQToi TwitterAgent.sources.Twitter.accessToken = 2898574486 -20 SikvAYDykhFFEepxTVyM 5 yIAERWXq 5 KQJDXgO TwitterAgent.sources.Twitter.accessTokenSecret = hvnVYZn 07 GT 5 DnVjJqC 3 YTG 6 Mwwv 0 wgEALoAuldaaKLrx TwitterAgent.sources.Twitter.keywords = hadoop, big data, analytics, bigdata, cloudera, data science, data scientiest, business intelligence, mapreduce, data warehouse, data warehousing, mahout, hbase, nosql, newsql, businessintelligence, cloudcomputing TwitterAgent.sinks.HDFS.channel = MemChannel TwitterAgent.sinks.HDFS.type = hdfs TwitterAgent.sinks.HDFS.hdfs.path = /user/cloudera/twitter/%Y/%m/%d/%H/ TwitterAgent.sinks.HDFS.hdfs.fileType = DataStream TwitterAgent.sinks.HDFS.hdfs.writeFormat = Text TwitterAgent.sinks.HDFS.hdfs.batchSize = 1000 TwitterAgent.sinks.HDFS.hdfs.rollSize = 0 TwitterAgent.sinks.HDFS.hdfs.rollCount = 0 TwitterAgent.channels.MemChannel.type = memory TwitterAgent.channels.MemChannel.capacity = 100000 TwitterAgent.channels.MemChannel.transactionCapacity = 10000 |
Étape 4: Configuration d’Apache Hive:
4.1 Construire ou télécharger le serde JSON
Une version prédéfinie du service JSON SerDe est disponible à l'adresse suivante: http: //files.cloudera.com/samples/hive-serdes-1.0-SNAPSHOT.jar.
Le répertoire hive-serdes contient un projet Maven avec un JSON SerDe qui permet à Hive d’interroger des données JSON brutes.
Pour construire le JAR hive-serdes à partir de la racine du référentiel git:[php]cd hive-serde
mvn package
cd ../..[/php]
Cela générera un fichier appelé hive-serdes-1.0-SNAPSHOT.jar dans le répertoire cible.
4.2 Créer la hiérarchie du répertoire Hive
[php]sudo -u hdfs hadoop fs -mkdir /user/hive/warehouse sudo -u hdfs hadoop fs -chown -R hive:hive /user/hive sudo -u hdfs hadoop fs -chmod 750 /user/hive sudo -u hdfs hadoop fs -chmod 770 /user/hive/warehouse hdfs dfs –ls -R 770 /user/hive[/php]
Vous voudrez également ajouter l’utilisateur que vous envisagez d’exécuter des scripts Hive au groupe hive Unix:
[php]sudo usermod -a -G hive[/php]
4.3 Configurer le métastore Hive
4.3.1 Une fois l’installation terminée et le démarrage du démon mysql, vérifiez son statut.
Le métastore Hive doit être configuré pour utiliser MySQL. Suivez ces instructions pour installer mysql puis pour configurer le metastore.
4.3.2 Configurer le service et le connecteur MySQL
Assurez-vous d’installer le pilote JDBC MySQL dans / var/lib/hive/lib.
[cloudera @ localhost network-scripts] $ sudo yum installez mysql-connector-java fedora.mirrors.pair.com * extras: centos.eecs.wsu.edu * rpmforge: apt.sw.be * updates: centos.sonn.com base | 3.7 kB cloudera-cdh 4 | 951 B cloudera-gplextras | 951 B 00: 00 cloudera-impala| 951 B 00: 00 cloudera-manager| 951 B 00: 00 cloudera-search| 951 B 00: 00 epel| 4.4 kB 00: 00 epel/primary_db 84% [===========epel/primary_db 88% [===========epel/primary_db 92% [===========epel/primary_db | 6.6 MB 00: 11 extras | 3.4 kB 00: 00 rpmforge| 1.9 kB 00: 00 updates| 3.4 kB 00: 00 updates/primary_db | 3.3 MB 00: 08 vmware-tools | 951 B 00: 00 Package 1: mysql-connector-java -5.1 . 17 -6 .el 6 .noarch déjà installé et dernière version Rien à faireNothing to do |
4.3.3 Créer la base de données et l’utilisateur
[php]mysql -u root –p Entrer le mot de passe: mysql> CREATE DATABASE metastore; mysql> USE metastore; mysql> SOURCE /usr/lib/hive/scripts/metastore/upgrade/mysql/hive- schema-0.10.0.mysql.sql;[/php]
4.3.4 Configurer le service Metastore pour qu’il communique avec la base de données MySQL
Le fichier hive-site.xml se trouve sur /etc/hive/conf
Étape 5: Créez la table tweets_partenced:
5.1 Exécutez la commande suivante pour construire la bibliothèque SerDe.
[php]cd hive-serdes mvn clean install –DskipTests[/php]
Pour notre cas, vous utilisez le pot qui est partagé sous twitter-project.
5.2 Démarrez ruche en utilisant la commande ruche.
5.3 Ajoutez maintenant jar en utilisant la commande add jar comme indiqué ci-dessous.
Hive> add jar /home/cloudera/Downloads/hive-serdes/hive-serdes-1.0-SNAPSHOT.jar;
5.4 Créez une table externe dans la ruche comme indiqué ci-dessous.
Voir ci-dessous la capture d’écran pour tweets_partenced:
ruche> décrire étendu tweets_partional;
|
Étape 6: Configuration du flux de travail Apache Oozie:
6.1 Configurer Oozie pour utiliser MySQL
Si vous utilisez Cloudera Manager, nous avons reconfiguré Oozie pour utiliser MySQL via la page de configuration du service de l’onglet Bases de données. Nous redémarrons le service Oozie après reconfiguration. Nous avons installé le pilote JDBC MySQL dans / usr / lib / oozie / libext.
Voir ci-dessous la capture d’écran de la console Web Oozie:
6.2 Créez un répertoire lib et copiez-y tous les fichiers JAR externes nécessaires.
Les fichiers JAR externes sont fournis à Oozie via un répertoire lib dans le répertoire de flux de travail. Le flux de travail nécessitera une copie du pilote JDBC MySQL et du fichier JAR hive-serdes.
6.3 Copier le fichier hive-site.xml dans le répertoire oozie
Pour exécuter l’action Hive, Oozie a besoin d’une copie du fichier hive-site.xml.
[php]sudo cp /etc/hive/conf/hive-site.xml /home/cloudera/oozie sudo chown oozie:oozie /home/cloudera/oozie/hive-site.xml[/php]
6.4 Copier le répertoire oozie sur HDFS
6.5 Installer l’Oozie ShareLib dans HDFS
[php]sudo -u hdfs hadoop fs -mkdir /user/oozie/share/lib sudo -u hdfs hadoop fs –chown oozie:oozie /user/oozie/share/lib[/php]
Pour pouvoir utiliser l’action Hive, vous devez installer Oozie ShareLib. Les instructions d’installation peuvent être trouvées ici:http://www.cloudera.com/content/cloudera-content/cloudera-docs/CDH4/4.2.1/CDH4-Installation-Guide/cdh4ig_topic_17_6.html.
Étape 7: démarrage du pipeline de données:
7.1 Démarrer l’agent Flume
Créez la hiérarchie de répertoires HDFS pour le récepteur Flume. Assurez-vous qu’il sera accessible à l’utilisateur exécutant le flux de travail Oozie.
[php]hdfs dfs –mkdir /user/cloudera/twitter cd Download/flume-sources flume-ng agent -n TwitterAgent -c conf -f flume.conf[/php]
Voir ci-dessous la capture d’écran de l’agent Flume:
La capture d’écran a été tronquée par moi-même.
7.2 Dans quelque temps, le fichier commencera à arriver dans HDFS. Vérifiez en utilisant la commande ci-dessous.
[php]hdfs dfs -ls /user/cloudera/twitter[/php]
Voir tous les résultats sur ce fichier joint appelé
7.3 Ajuster l’heure de début du flux de travail du coordinateur Oozie dans job.properties
Vous devrez modifier le fichier job.properties et modifier les paramètres jobStart, jobEnd et initialDataset. Les heures de début et de fin sont exprimées en UTC, car la version de Oozie fournie dans CDH4 ne prend pas encore en charge les fuseaux horaires personnalisés pour les flux de travail. Le jeu de données initial doit être défini sur quelque chose d’avant l’heure de début réelle de votre travail dans votre fuseau horaire local. De plus, le paramètre tzOffset doit être défini sur la différence entre le fuseau horaire et le fuseau horaire du serveur. Par défaut, il est défini sur -8, ce qui est correct pour l’heure du Pacifique.
[php]hdfs dfs -cat oozie/job.properties[/php]
# Sous licence Apache Software Foundation (ASF) tzOffset= -8 oozie.use.system.libpath=true oozie.coord.application.path=${nameNode}/user/${user.name}/oozie/coord-app.xml |
Voir tous les résultats sur ce fichier joint appelé
7.4 Démarrer le flux de travail du coordinateur Oozie
Sur ce cas, nous avons utilisé Oozie, le 2015/06/16 après avoir démarré l’agent Start de Flume:
Capture d’écran pour démarrer le coordinateur oozie:
[php]oozie job -oozie http://localhost:11000/oozie -config oozie/job.properties –run[/php]
Une fois cette commande exécutée, le coordinateur créait et exécutait des instances du flux de travail toutes les heures. Les données devenaient automatiquement interrogeables via Hive au fur et à mesure de la création des partitions.
Ci-dessous les informations sur l’identifiant du travail:
Capture d’écran de la console Web Oozie indiquant l’état des tâches:
Capture d’écran pour Job DAG:
Capture d’écran du navigateur de fichiers:
Étape 8: Pour rechercher des célébrités ou des personnes influentes en interrogeant des données semi-structurées avec Apache Hive:
8.1 Charger les données de streaming Twitter depuis hdfs vers la table hive en utilisant la commande load:
Chargez les données de streaming Twitter de hdfs vers la table hive que j’ai obtenue en mai 2015 (voir l’étape 7) en utilisant le script shell ci-dessous pour générer toutes les commandes de chargement:
[php]if [ -f /home/cloudera/load.hive ] ; then echo >/home/cloudera/load.hive fi for dt in $(hdfs dfs -ls /user/cloudera/twitter/2015/05/|awk '{print $8}'|awk -F "/" '{print $7}') do for dthour in $(hdfs dfs -ls /user/cloudera/twitter/2015/05/$dt|awk -F "/" '{print $8}') do echo "LOAD DATA INPATH '/user/cloudera/twitter/2015/05/$dt/$dthour/' OVERWRITE INTO TABLE tweets_partioned PARTITION (year=2015, month=05, dt=$dt, dthour=$dthour);" >> /home/cloudera/load.hive done done[/php]
Ensuite, nous avons obtenu le fichier load.hive avec le contenu des commandes à charger, exemple:
Les lignes suivantes ont été tronquées. Voir tous les résultats sur le fichier
Ensuite, nous avons exécuté la commande ci-dessous pour charger des données sur la table ruche tweets_partenced:
[php]hive -i load.hive[/php]
Nombre de lignes sur la table: 116785
8.2 Utiliser Hive pour trouver des utilisateurs influents:
La requête ci-dessous trouvera les noms d’utilisateur et le nombre de retweets qu’ils ont générés sur tous les tweets pour lesquels nous disposons de données:
[php]select t.retweeted_screen_name, sum(retweets) as total_retweets, count(*) as tweet_count from ( select retweeted_status.user.screen_name as retweeted_screen_name, retweeted_status.text, max(retweeted_status.retweet_count) as retweets from tweets_partioned group by retweeted_status.user.screen_name, retweeted_status.text) t group by t.retweeted_screen_name order by total_retweets DESC, tweet_count ASC limit 15;[/php]
Résulte en:
Pour les quelques jours de données, j’ai constaté qu’il s’agissait des utilisateurs les plus retweetés du secteur:
[php]retweeted_screen_name total_retweets tweet_count SoftLayer 8448 8 tableau 2905 31 DEVOPS_BORAT 2858 2 KirkDBorne 2737 170 keen_io 1925 8 hortonworks 1360 25 googleanalytics 1242 19 mhoye 1225 1 garybernhardt 1083 3 analyticbridge 1045 132 charlesmilander 890 3 BetaList 784 1 BigDataBlogs 662 159 sadserver 643 1 VadymMelnyk 642 2 [/php]
Ci-dessous la capture d’écran: Nous pouvons voir à partir de ces résultats quels tweets sont entendus par le plus large public possible, et également savoir si ces personnes communiquent régulièrement ou non. Ces informations peuvent être utilisées pour cibler plus précisément nos messages afin de les amener à parler de ces produits, ce qui, à son tour, fera parler d’autres personnes.
8.3 Répartition géographique des utilisateurs:
Quels sont les fuseaux horaires les plus actifs par jour? :
[php]SELECT user.time_zone, SUBSTR (created_at, 0, 3), COUNT (*) AS total_count FROM tweets_partioned WHERE user.time_zone IS NOT NULL GROUP BY user.time_zone, SUBSTR (created_at, 0, 3) ORDER BY total_count DESC LIMIT 15;[/php]
Résulte en:
[php]user.time_zone created_at total_count Eastern Time (US and Canada) Mon 2856 Eastern Time (US and Canada) Sun 2170 Eastern Time (US and Canada) Wed 2157 Pacific Time (US and Canada) Mon 1894 Eastern Time (US and) Sat 1728 Pacific Time (US and Canada) Wed 1576 Central Time (US and Canada) Mon 1498 London Mon 1463 London Sun 1395 Eastern Time (US and Canada) Tue 1330 Pacific Time (US and Canada) Sun 1265 Pacific Time (US and Canada) Sat 1174 Amsterdam Mon 1087 London Sat 1069 Amsterdam Sun 1028[/php]
Ci-dessous la capture d’écran:
Fait intéressant, de plus en plus d’utilisateurs tweetent sur les produits sélectionnés sur la côte est, puis sur la côte ouest ou dans le Pacifique. L’Europe semble aussi assez intéressée par les infrastructures de données volumineuses
8.4 “Quels étaient les hashtags les plus courants? “:
Des questions plus complexes à poser, telles que «Quels étaient les hashtags les plus courants? “:
[php]SELECT LOWER(hashtags.text),COUNT(*) AS total_count FROM tweets_partioned LATERAL VIEW EXPLODE(entities.hashtags) t1 AS hashtags GROUP BY LOWER(hashtags.text) ORDER BY total_count DESC LIMIT 15;[/php]
Résulte en:
[php]hashtags.text total_count bigdata 42019 analytics 12344 iot 11455 healthcare 5692 wearables 5430 nanotechnology 5243 datascience 4353 job 3162 jobs 2931 cloud 2871 Hadoop 2753 data 2740 cloudcomputing 2330 tech 2102 machinelearning 2053[/php]
Voir ci-dessous la capture d’écran:
Le premier terme qui apparaît est le big data, ce qui signifie que plusieurs personnes recherchent cet élément, suivi de iot, puis d’analyse et ainsi de suite.
Conclusion:
Dans ce rapport, nous avons vu comment nous pouvons utiliser certaines des composantes de Cloudera CDH et les combiner pour créer une infrastructure de données offrant aux entreprises ou aux organisations un accès facile au grand public pour lui permettre d’exprimer leurs opinions sur leurs produits. Cette même infrastructure pourrait être utilisée pour diverses applications conçues pour consulter les données Twitter, telles que l’identification de comptes de spam ou l’identification de groupes de mots-clés.
Toutefois, les entreprises ou les organisations peuvent utiliser ces informations comme mécanisme de retour d’information pour leurs produits. Ils peuvent étendre ce produit à l’avenir en tant que tâche d’analyse des sentiments pour connaître en temps réel le retour d’information de leurs produits. L’analyse automatique des sentiments réduit l’intervention humaine et, par conséquent, la complexité et le coût de l’ensemble du processus.