Tutoriel Apache Flume : Qu'est-ce que c'est, ArchiExemple de configuration et Hadoop

Qu’est-ce qu’Apache Flume dans Hadoop ?

Canal Apache est un système fiable et distribué permettant de collecter, d'agréger et de déplacer d'énormes quantités de données de journaux. Il possède une architecture simple mais flexible basée sur des flux de données en streaming. Apache Flume est utilisé pour collecter les données de journal présentes dans les fichiers journaux des serveurs Web et les agréger dans HDFS pour analyse.

Flume dans Hadoop prend en charge plusieurs sources telles que :

  • 'tail' (qui redirige les données d'un fichier local et les écrit dans HDFS via Flume, similaire à la commande Unix 'tail')
  • Journaux système
  • Apachelog4j (activer Java applications pour écrire des événements dans des fichiers dans HDFS via Flume).

Buse Architecture

A Agent de canalisation est une JVM processus qui comporte 3 composants –Source de canal, Canal de canal et Évier de canal– à travers lequel les événements se propagent après avoir été initiés par une source externe.

Buse Architecture
Buse Architecture
  1. Dans le diagramme ci-dessus, les événements générés par une source externe (WebServer) sont consommés par Flume Data Source. La source externe envoie des événements à la source Flume dans un format reconnu par la source cible.
  2. Flume Source reçoit un événement et le stocke dans un ou plusieurs canaux. Le canal agit comme un magasin qui conserve l'événement jusqu'à ce qu'il soit consommé par le puits du canal. Ce canal peut utiliser un système de fichiers local afin de stocker ces événements.
  3. Flume Sink supprime l'événement d'un canal et le stocke dans un référentiel externe comme par exemple HDFS. Il peut y avoir plusieurs agents de canal, auquel cas le puits de canal transmet l'événement à la source de canal de l'agent de canal suivant dans le flux.

Quelques fonctionnalités importantes de FLUME

  • Flume a une conception flexible basée sur des flux de données en streaming. Il est tolérant aux pannes et robuste avec de multiples mécanismes de basculement et de récupération. Flume Big data a différents niveaux de fiabilité à offrir, notamment « livraison dans la mesure du possible » et le « livraison de bout en bout ». Livraison avec le meilleur effort ne tolère aucune défaillance de nœud Flume alors que « livraison de bout en bout » Le mode garantit la livraison même en cas de panne de plusieurs nœuds.
  • Flume transporte les données entre les sources et les puits. Cette collecte de données peut être planifiée ou déclenchée par des événements. Flume dispose de son propre moteur de traitement de requêtes qui facilite la transformation de chaque nouveau lot de données avant qu'il ne soit déplacé vers le récepteur prévu.
  • Possible Éviers à canal comprennent HDFS et HBase. Flume Hadoop peut également être utilisé pour transporter des données d'événements, notamment des données de trafic réseau, des données générées par des sites Web de réseaux sociaux et des messages électroniques.

Configuration du canal, de la bibliothèque et du code source

Avant de commencer le processus proprement dit, assurez-vous que Hadoop est installé. Remplacez l'utilisateur par 'hduser' (identifiant utilisé lors de la configuration Hadoop, vous pouvez passer à l'ID utilisateur utilisé lors de votre configuration Hadoop)

Configuration du canal, de la bibliothèque et du code source

Étape 1) Créez un nouveau répertoire avec le nom 'FlumeTutorial'

sudo mkdir FlumeTutorial
  1. Donnez des autorisations de lecture, d'écriture et d'exécution
    sudo chmod -R 777 FlumeTutorial
  2. Copier des fichiers MaSourceTwitter.java et MaTwitterSourceForFlume.java dans ce répertoire.

Téléchargez les fichiers d'entrée à partir d'ici

Vérifiez les autorisations de fichier de tous ces fichiers et si les autorisations de « lecture » sont manquantes, accordez la même chose.

Configuration du canal, de la bibliothèque et du code source

Étape 2) Téléchargez « Apache Flume » à partir d'un site - https://flume.apache.org/download.html

Apache Flume 1.4.0 a été utilisé dans ce didacticiel Flume.

Configuration du canal, de la bibliothèque et du code source

Cliquez sur Suivant

Configuration du canal, de la bibliothèque et du code source

Étape 3) Copiez l'archive tar téléchargée dans le répertoire de votre choix et extrayez le contenu à l'aide de la commande suivante

sudo tar -xvf apache-flume-1.4.0-bin.tar.gz

Configuration du canal, de la bibliothèque et du code source

Cette commande créera un nouveau répertoire nommé apache-flume-1.4.0-bin et extrayez-y les fichiers. Ce répertoire sera appelé dans le reste de l'article.

Étape 4) Configuration de la bibliothèque Flume

Copier twitter4j-core-4.0.1.jar, flume-ng-configuration-1.4.0.jar, flume-ng-core-1.4.0.jar, flume-ng-sdk-1.4.0.jar à

/lib/

Il est possible que l'un ou la totalité des JAR copiés doive exécuter une autorisation. Cela peut entraîner un problème avec la compilation du code. Alors, révoquez l’autorisation d’exécution sur ce JAR.

Dans mon cas, twitter4j-core-4.0.1.jar était devoir exécuter une autorisation. Je l'ai révoqué comme ci-dessous-

sudo chmod -x twitter4j-core-4.0.1.jar

Configuration du canal, de la bibliothèque et du code source

Après que cette commande donne l'autorisation de « lecture » sur twitter4j-core-4.0.1.jar à tous.

sudo chmod +rrr /usr/local/apache-flume-1.4.0-bin/lib/twitter4j-core-4.0.1.jar

Veuillez noter que j'ai téléchargé-

– twitter4j-core-4.0.1.jar A partir de https://mvnrepository.com/artifact/org.twitter4j/twitter4j-core

- Tous les pots de flammes, c'est-à-dire, flume-ng-*-1.4.0.jar A partir de http://mvnrepository.com/artifact/org.apache.flume

Charger des données depuis Twitter à l'aide de Flume

Étape 1) Accédez au répertoire contenant les fichiers de code source.

Étape 2) Ensemble CHEMIN DE CLASSE contenir /lib/* et ~/FlumeTutorial/flume/mytwittersource/*

export CLASSPATH="/usr/local/apache-flume-1.4.0-bin/lib/*:~/FlumeTutorial/flume/mytwittersource/*"

Charger des données depuis Twitter à l'aide de Flume

Étape 3) Compilez le code source à l'aide de la commande-

javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java

Charger des données depuis Twitter à l'aide de Flume

Étape 4)Créer un pot

Tout d'abord, créez Manifeste.txt fichier en utilisant un éditeur de texte de votre choix et ajoutez-y la ligne ci-dessous-

Main-Class: flume.mytwittersource.MyTwitterSourceForFlume

.. ici flume.mytwittersource.MyTwitterSourceForFlume est le nom de la classe principale. Veuillez noter que vous devez appuyer sur la touche Entrée à la fin de cette ligne.

Charger des données depuis Twitter à l'aide de Flume

Maintenant, créez JAR 'MaTwitterSourceForFlume.jar' comme-

jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class

Charger des données depuis Twitter à l'aide de Flume

Étape 5) Copiez ce pot dans /lib/

sudo cp MyTwitterSourceForFlume.jar <Flume Installation Directory>/lib/

Charger des données depuis Twitter à l'aide de Flume

Étape 6) Allez dans le répertoire de configuration de Flume, /conf

Si flume.conf n'existe pas, copiez flume-conf.properties.template et renommez-le en flume.conf

sudo cp flume-conf.properties.template flume.conf

Charger des données depuis Twitter à l'aide de Flume

If flume-env.sh n'existe pas, alors copiez flume-env.sh.template et renommez-le en flume-env.sh

sudo cp flume-env.sh.template flume-env.sh

Charger des données depuis Twitter à l'aide de Flume

Création d'une application Twitter

Étape 1) Créez une application Twitter en vous connectant à https://developer.twitter.com/

Création d'une application Twitter

Création d'une application Twitter

Étape 2) Cliquez sur 'Mes applications' (Cette option est abandonnée lorsque 'Œuf' le bouton dans le coin supérieur droit est cliqué)

Création d'une application Twitter

Étape 3) Créez une nouvelle application en cliquant sur "Créer une nouvelle application"

Étape 4) Remplissez les détails de l'application en spécifiant le nom de l'application, la description et le site Web. Vous pouvez vous référer aux notes données sous chaque zone de saisie.

Création d'une application Twitter

Étape 5) Faites défiler la page et acceptez les conditions en marquant 'Oui je suis d'accord' et cliquez sur le bouton'Créez votre application Twitter'

Création d'une application Twitter

Étape 6) Sur la fenêtre d'une application nouvellement créée, allez dans l'onglet, « Clés API » faites défiler la page et cliquez sur le bouton 'Créer mon jeton d'accès'

Création d'une application Twitter

Création d'une application Twitter

Étape 7) Actualiser la page.

Étape 8) Cliquez sur « Tester OAuth ». Cela affichera 'OAuth' paramètres de l'application.

Création d'une application Twitter

Étape 9) modifier 'flume.conf' en utilisant ces Paramètres OAuth. Étapes à modifier 'flume.conf' sont donnés ci-dessous.

Création d'une application Twitter

Nous devons copier la clé du consommateur, le secret du consommateur, le jeton d'accès et le secret du jeton d'accès pour mettre à jour 'flume.conf'.

Remarque : Ces valeurs appartiennent à l'utilisateur et sont donc confidentielles et ne doivent donc pas être partagées.

Modifier le fichier 'flume.conf'

Étape 1) Open 'flume.conf' en mode écriture et définir les valeurs pour les paramètres ci-dessous-

sudo gedit flume.conf

Copiez le contenu ci-dessous-

MyTwitAgent.sources = Twitter
MyTwitAgent.channels = MemChannel
MyTwitAgent.sinks = HDFS
MyTwitAgent.sources.Twitter.type = flume.mytwittersource.MyTwitterSourceForFlume
MyTwitAgent.sources.Twitter.channels = MemChannel 
MyTwitAgent.sources.Twitter.consumerKey = <Copy consumer key value from Twitter App>
MyTwitAgent.sources.Twitter.consumerSecret = <Copy consumer secret value from Twitter App>
MyTwitAgent.sources.Twitter.accessToken = <Copy access token value from Twitter App>
MyTwitAgent.sources.Twitter.accessTokenSecret = <Copy access token secret value from Twitter App>
MyTwitAgent.sources.Twitter.keywords = guru99
MyTwitAgent.sinks.HDFS.channel = MemChannel
MyTwitAgent.sinks.HDFS.type = hdfs
MyTwitAgent.sinks.HDFS.hdfs.path = hdfs://localhost:54310/user/hduser/flume/tweets/
MyTwitAgent.sinks.HDFS.hdfs.fileType = DataStream
MyTwitAgent.sinks.HDFS.hdfs.writeFormat = Text
MyTwitAgent.sinks.HDFS.hdfs.batchSize = 1000
MyTwitAgent.sinks.HDFS.hdfs.rollSize = 0
MyTwitAgent.sinks.HDFS.hdfs.rollCount = 10000
MyTwitAgent.channels.MemChannel.type = memory
MyTwitAgent.channels.MemChannel.capacity = 10000
MyTwitAgent.channels.MemChannel.transactionCapacity = 1000

Modifier le fichier 'Flume.conf'

Étape 2) Aussi, définissez TwitterAgent.sinks.HDFS.hdfs.path comme ci-dessous,

TwitterAgent.sinks.HDFS.hdfs.path = hdfs:// : / /flume/tweets/

Modifier le fichier 'Flume.conf'

À savoir , et , voir valeur du paramètre 'fs.defaultFS' s'installer $HADOOP_HOME/etc/hadoop/core-site.xml

Modifier le fichier 'Flume.conf'

Étape 3) Afin de vider les données vers HDFS, le cas échéant, supprimez l'entrée ci-dessous si elle existe,

TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600

Exemple : diffusion de données Twitter à l'aide de Flume

Étape 1) Open 'flume-env.sh' en mode écriture et définir les valeurs pour les paramètres ci-dessous,

JAVA_HOME=<Installation directory of Java>
FLUME_CLASSPATH="<Flume Installation Directory>/lib/MyTwitterSourceForFlume.jar"

Streaming de données Twitter à l'aide de Flume

Étape 2) Démarrer Hadoop

$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh

Étape 3) Deux des fichiers JAR de l'archive tar Flume ne sont pas compatibles avec Hadoop 2.2.0. Nous devrons donc suivre les étapes ci-dessous dans cet exemple Apache Flume pour rendre Flume compatible avec Hadoop 2.2.0.

a. Move protobuf-java-2.4.1.jar sur ' /lib'.

Cliquez sur ' /lib'

CD /lib

sudo mv protobuf-java-2.4.1.jar ~/

Streaming de données Twitter à l'aide de Flume

b. Recherchez le fichier JAR 'goyave' comme ci-dessous

find . -name "guava*"

Streaming de données Twitter à l'aide de Flume

Move goyave-10.0.1.jar sur ' /lib'.

sudo mv guava-10.0.1.jar ~/

Streaming de données Twitter à l'aide de Flume

c. Télécharger goyave-17.0.jar A partir de http://mvnrepository.com/artifact/com.google.guava/guava/17.0

Streaming de données Twitter à l'aide de Flume

Maintenant, copiez ce fichier jar téléchargé dans ' /lib'

Étape 4) Cliquez sur ' /poubelle' et démarrez Flume comme-

./flume-ng agent -n MyTwitAgent -c conf -f <Flume Installation Directory>/conf/flume.conf

Streaming de données Twitter à l'aide de Flume

Fenêtre d'invite de commande où Flume récupère les Tweets-

Streaming de données Twitter à l'aide de Flume

À partir du message de la fenêtre de commande, nous pouvons voir que la sortie est écrite dans /user/hduser/flume/tweets/ répertoire.

Maintenant, ouvrez ce répertoire à l'aide d'un navigateur Web.

Étape 5) Pour voir le résultat du chargement des données, à l'aide d'un navigateur ouvert http://localhost:50070/ et parcourez le système de fichiers, puis accédez au répertoire où les données ont été chargées, c'est-à-dire-

/flume/tweets/

Streaming de données Twitter à l'aide de Flume