Apache Flume - Récupération des données Twitter

En utilisant Flume, nous pouvons récupérer les données de divers services et les transporter vers des magasins centralisés (HDFS et HBase). Ce chapitre explique comment récupérer des données depuis le service Twitter et les stocker dans HDFS à l'aide d'Apache Flume.

Comme indiqué dans Flume Architecture, un serveur Web génère des données de journal et ces données sont collectées par un agent dans Flume. Le canal met ces données en mémoire tampon dans un puits, qui les pousse finalement vers des magasins centralisés.

Dans l'exemple fourni dans ce chapitre, nous allons créer une application et en récupérer les tweets en utilisant la source twitter expérimentale fournie par Apache Flume. Nous utiliserons le canal mémoire pour tamponner ces tweets et le récepteur HDFS pour pousser ces tweets dans le HDFS.

Pour récupérer les données Twitter, nous devrons suivre les étapes ci-dessous -

  • Créer une application Twitter
  • Installer / démarrer HDFS
  • Configurer Flume

Créer une application Twitter

Afin d'obtenir les tweets de Twitter, il est nécessaire de créer une application Twitter. Suivez les étapes ci-dessous pour créer une application Twitter.

Étape 1

Pour créer une application Twitter, cliquez sur le lien suivant https://apps.twitter.com/. Connectez-vous à votre compte Twitter. Vous aurez une fenêtre de gestion des applications Twitter dans laquelle vous pourrez créer, supprimer et gérer des applications Twitter.

Étape 2

Clique sur le Create New Appbouton. Vous serez redirigé vers une fenêtre où vous obtiendrez un formulaire de candidature dans lequel vous devrez remplir vos coordonnées afin de créer l'application. Lors du remplissage de l'adresse du site Web, indiquez le modèle d'URL complet, par exemple,http://example.com.

Étape 3

Remplissez les détails, acceptez le Developer Agreement une fois terminé, cliquez sur le Create your Twitter application buttonqui se trouve au bas de la page. Si tout se passe bien, une application sera créée avec les détails indiqués ci-dessous.

Étape 4

En dessous de keys and Access Tokens onglet en bas de page, vous pouvez observer un bouton nommé Create my access token. Cliquez dessus pour générer le jeton d'accès.

Étape 5

Enfin, cliquez sur le Test OAuthbouton qui se trouve en haut à droite de la page. Cela mènera à une page qui affiche votreConsumer key, Consumer secret, Access token, et Access token secret. Copiez ces détails. Celles-ci sont utiles pour configurer l'agent dans Flume.

Démarrage de HDFS

Puisque nous stockons les données dans HDFS, nous devons installer / vérifier Hadoop. Démarrez Hadoop et créez-y un dossier pour stocker les données Flume. Suivez les étapes ci-dessous avant de configurer Flume.

Étape 1: installer / vérifier Hadoop

Installez Hadoop . Si Hadoop est déjà installé sur votre système, vérifiez l'installation à l'aide de la commande de version Hadoop, comme indiqué ci-dessous.

$ hadoop version

Si votre système contient Hadoop, et si vous avez défini la variable de chemin, vous obtiendrez la sortie suivante -

Hadoop 2.6.0 
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r 
e3496499ecb8d220fba99dc5ed4c99c8f9e33bb1 
Compiled by jenkins on 2014-11-13T21:10Z 
Compiled with protoc 2.5.0 
From source with checksum 18e43357c8f927c0695f1e9522859d6a 
This command was run using /home/Hadoop/hadoop/share/hadoop/common/hadoop-common-2.6.0.jar

Étape 2: Démarrer Hadoop

Parcourez le sbin répertoire de Hadoop et démarrez yarn et Hadoop dfs (système de fichiers distribué) comme indiqué ci-dessous.

cd /$Hadoop_Home/sbin/ 
$ start-dfs.sh 
localhost: starting namenode, logging to
   /home/Hadoop/hadoop/logs/hadoop-Hadoop-namenode-localhost.localdomain.out 
localhost: starting datanode, logging to 
   /home/Hadoop/hadoop/logs/hadoop-Hadoop-datanode-localhost.localdomain.out 
Starting secondary namenodes [0.0.0.0] 
starting secondarynamenode, logging to 
   /home/Hadoop/hadoop/logs/hadoop-Hadoop-secondarynamenode-localhost.localdomain.out
  
$ start-yarn.sh 
starting yarn daemons 
starting resourcemanager, logging to 
   /home/Hadoop/hadoop/logs/yarn-Hadoop-resourcemanager-localhost.localdomain.out 
localhost: starting nodemanager, logging to 
   /home/Hadoop/hadoop/logs/yarn-Hadoop-nodemanager-localhost.localdomain.out

Étape 3: créer un répertoire dans HDFS

Dans Hadoop DFS, vous pouvez créer des répertoires à l'aide de la commande mkdir. Parcourez-le et créez un répertoire avec le nomtwitter_data dans le chemin requis comme indiqué ci-dessous.

$cd /$Hadoop_Home/bin/ 
$ hdfs dfs -mkdir hdfs://localhost:9000/user/Hadoop/twitter_data

Configurer Flume

Nous devons configurer la source, le canal et le puits en utilisant le fichier de configuration dans le confdossier. L'exemple donné dans ce chapitre utilise une source expérimentale fournie par Apache Flume nomméeTwitter 1% Firehose Canal mémoire et puits HDFS.

Twitter 1% Source Firehose

Cette source est hautement expérimentale. Il se connecte à l'échantillon de 1% Twitter Firehose à l'aide de l'API de streaming et télécharge en permanence les tweets, les convertit au format Avro et envoie les événements Avro à un récepteur Flume en aval.

Nous obtiendrons cette source par défaut avec l'installation de Flume. lejar les fichiers correspondant à cette source peuvent être localisés dans le lib dossier comme indiqué ci-dessous.

Définition du chemin de classe

Met le classpath variable à la lib dossier de Flume dans Flume-env.sh fichier comme indiqué ci-dessous.

export CLASSPATH=$CLASSPATH:/FLUME_HOME/lib/*

Cette source a besoin des détails tels que Consumer key, Consumer secret, Access token, et Access token secretd'une application Twitter. Lors de la configuration de cette source, vous devez fournir des valeurs aux propriétés suivantes -

  • Channels

  • Source type : org.apache.flume.source.twitter.TwitterSource

  • consumerKey - La clé consommateur OAuth

  • consumerSecret - Secret du consommateur OAuth

  • accessToken - Jeton d'accès OAuth

  • accessTokenSecret - Secret du jeton OAuth

  • maxBatchSize- Nombre maximum de messages Twitter qui devraient être dans un lot Twitter. La valeur par défaut est 1 000 (facultatif).

  • maxBatchDurationMillis- Nombre maximum de millisecondes à attendre avant de fermer un lot. La valeur par défaut est 1 000 (facultatif).

Canal

Nous utilisons le canal mémoire. Pour configurer le canal mémoire, vous devez fournir une valeur au type du canal.

  • type- Il contient le type de chaîne. Dans notre exemple, le type estMemChannel.

  • Capacity- C'est le nombre maximum d'événements stockés dans le canal. Sa valeur par défaut est 100 (facultatif).

  • TransactionCapacity- C'est le nombre maximum d'événements que le canal accepte ou envoie. Sa valeur par défaut est 100 (facultatif).

Évier HDFS

Ce récepteur écrit des données dans le HDFS. Pour configurer ce récepteur, vous devez fournir les détails suivants.

  • Channel

  • type - hdfs

  • hdfs.path - le chemin du répertoire dans HDFS où les données doivent être stockées.

Et nous pouvons fournir des valeurs facultatives basées sur le scénario. Vous trouverez ci-dessous les propriétés facultatives du récepteur HDFS que nous configurons dans notre application.

  • fileType - C'est le format de fichier requis de notre fichier HDFS. SequenceFile, DataStream et CompressedStreamsont les trois types disponibles avec ce flux. Dans notre exemple, nous utilisons leDataStream.

  • writeFormat - Peut être texte ou inscriptible.

  • batchSize- Il s'agit du nombre d'événements écrits dans un fichier avant qu'il ne soit vidé dans le HDFS. Sa valeur par défaut est 100.

  • rollsize- C'est la taille du fichier pour déclencher un roulement. Sa valeur par défaut est 100.

  • rollCount- C'est le nombre d'événements écrits dans le fichier avant qu'il ne soit lancé. Sa valeur par défaut est 10.

Exemple - Fichier de configuration

Ci-dessous est un exemple du fichier de configuration. Copiez ce contenu et enregistrez-le soustwitter.conf dans le dossier conf de Flume.

# Naming the components on the current agent. 
TwitterAgent.sources = Twitter 
TwitterAgent.channels = MemChannel 
TwitterAgent.sinks = HDFS
  
# Describing/Configuring the source 
TwitterAgent.sources.Twitter.type = org.apache.flume.source.twitter.TwitterSource
TwitterAgent.sources.Twitter.consumerKey = Your OAuth consumer key
TwitterAgent.sources.Twitter.consumerSecret = Your OAuth consumer secret 
TwitterAgent.sources.Twitter.accessToken = Your OAuth consumer key access token 
TwitterAgent.sources.Twitter.accessTokenSecret = Your OAuth consumer key access token secret 
TwitterAgent.sources.Twitter.keywords = tutorials point,java, bigdata, mapreduce, mahout, hbase, nosql
  
# Describing/Configuring the sink 

TwitterAgent.sinks.HDFS.type = hdfs 
TwitterAgent.sinks.HDFS.hdfs.path = hdfs://localhost:9000/user/Hadoop/twitter_data/
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 = 10000 
 
# Describing/Configuring the channel 
TwitterAgent.channels.MemChannel.type = memory 
TwitterAgent.channels.MemChannel.capacity = 10000 
TwitterAgent.channels.MemChannel.transactionCapacity = 100
  
# Binding the source and sink to the channel 
TwitterAgent.sources.Twitter.channels = MemChannel
TwitterAgent.sinks.HDFS.channel = MemChannel

Exécution

Parcourez le répertoire de base de Flume et exécutez l'application comme indiqué ci-dessous.

$ cd $FLUME_HOME 
$ bin/flume-ng agent --conf ./conf/ -f conf/twitter.conf 
Dflume.root.logger=DEBUG,console -n TwitterAgent

Si tout se passe bien, la diffusion des tweets dans HDFS commencera. Ci-dessous, un instantané de la fenêtre d'invite de commande lors de la récupération des tweets.

Vérification de HDFS

Vous pouvez accéder à l'interface Web d'administration Hadoop à l'aide de l'URL ci-dessous.

http://localhost:50070/

Cliquez sur le menu déroulant nommé Utilitiessur le côté droit de la page. Vous pouvez voir deux options comme indiqué dans l'instantané ci-dessous.

Cliquer sur Browse the file systemet entrez le chemin du répertoire HDFS dans lequel vous avez stocké les tweets. Dans notre exemple, le chemin sera/user/Hadoop/twitter_data/. Ensuite, vous pouvez voir la liste des fichiers journaux Twitter stockés dans HDFS comme indiqué ci-dessous.