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.
- 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.
- 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.
- 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)
Étape 1) Créez un nouveau répertoire avec le nom 'FlumeTutorial'
sudo mkdir FlumeTutorial
- Donnez des autorisations de lecture, d'écriture et d'exécution
sudo chmod -R 777 FlumeTutorial
- 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.
É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.
Cliquez sur Suivant
É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
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
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/*"
Étape 3) Compilez le code source à l'aide de la commande-
javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java
É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.
Maintenant, créez JAR 'MaTwitterSourceForFlume.jar' comme-
jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class
Étape 5) Copiez ce pot dans /lib/
sudo cp MyTwitterSourceForFlume.jar <Flume Installation Directory>/lib/
É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
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
Création d'une application Twitter
Étape 1) Créez une application Twitter en vous connectant à https://developer.twitter.com/
Étape 2) Cliquez sur 'Mes applications' (Cette option est abandonnée lorsque 'Œuf' le bouton dans le coin supérieur droit est cliqué)
É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.
É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'
É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'
Étape 7) Actualiser la page.
Étape 8) Cliquez sur « Tester OAuth ». Cela affichera 'OAuth' paramètres de l'application.
Étape 9) modifier 'flume.conf' en utilisant ces Paramètres OAuth. Étapes à modifier 'flume.conf' sont donnés ci-dessous.
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
Étape 2) Aussi, définissez TwitterAgent.sinks.HDFS.hdfs.path comme ci-dessous,
TwitterAgent.sinks.HDFS.hdfs.path = hdfs:// : / /flume/tweets/
À savoir , et , voir valeur du paramètre 'fs.defaultFS' s'installer $HADOOP_HOME/etc/hadoop/core-site.xml
É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"
É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 ~/
b. Recherchez le fichier JAR 'goyave' comme ci-dessous
find . -name "guava*"
Move goyave-10.0.1.jar sur ' /lib'.
sudo mv guava-10.0.1.jar ~/
c. Télécharger goyave-17.0.jar A partir de http://mvnrepository.com/artifact/com.google.guava/guava/17.0
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
Fenêtre d'invite de commande où Flume récupère les Tweets-
À 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/