Tutorial Apache Flume: Ce este, ArchiExemplu de tectură și Hadoop
Ce este Apache Flume în Hadoop?
Apache Flume este un sistem fiabil și distribuit pentru colectarea, agregarea și mutarea unor cantități masive de date de jurnal. Are o arhitectură simplă, dar flexibilă, bazată pe fluxuri de date în flux. Apache Flume este folosit pentru a colecta date de jurnal prezente în fișierele jurnal de pe serverele web și pentru a le agrega în HDFS pentru analiză.
Flume în Hadoop acceptă mai multe surse, cum ar fi –
- „tail” (care transmite date dintr-un fișier local și scrie în HDFS prin Flume, similar cu comanda Unix „tail”)
- Jurnalele de sistem
- Apache log4j (permite Java aplicații pentru a scrie evenimente în fișiere în HDFS prin Flume).
uluc Architectură
A Agent de canalizare este FMV proces care are 3 componente -Sursa canalului, Canalul Flume și Chiuveta Flume– prin care evenimentele se propagă după ce au fost inițiate la o sursă externă.

- În diagrama de mai sus, evenimentele generate de sursa externă (WebServer) sunt consumate de Flume Data Source. Sursa externă trimite evenimente către sursa Flume într-un format care este recunoscut de sursa țintă.
- Flume Source primește un eveniment și îl stochează pe unul sau mai multe canale. Canalul acționează ca un magazin care păstrează evenimentul până când este consumat de chiuveta canalului. Acest canal poate folosi un sistem de fișiere local pentru a stoca aceste evenimente.
- Flume sink elimină evenimentul de pe un canal și îl stochează într-un depozit extern, cum ar fi, de exemplu, HDFS. Ar putea exista mai mulți agenți de canal, caz în care chiuveta de canal înaintează evenimentul către sursa canalului următor agent de canal din flux.
Câteva caracteristici importante ale FLUME
- Flume are un design flexibil bazat pe fluxuri de date în flux. Este tolerant la erori și robust, cu mai multe erori și mecanisme de recuperare. Flume Big Data are diferite niveluri de fiabilitate de oferit, inclusiv „livrare cu cel mai bun efort” si un „livrare de la capăt la capăt”. Livrare cu cel mai bun efort nu tolerează nicio defecțiune a nodului Flume, în timp ce „livrare de la capăt la capăt” modul garantează livrarea chiar și în cazul defecțiunilor multiple ale nodurilor.
- Flume transportă date între surse și chiuvete. Această colectare de date poate fi fie programată, fie determinată de evenimente. Flume are propriul motor de procesare a interogărilor, care facilitează transformarea fiecărui lot nou de date înainte de a fi mutat în chiuveta dorită.
- Posibil Flume se scufundă include HDFS și HBase. Flume Hadoop poate fi folosit și pentru a transporta date despre evenimente, inclusiv, dar fără a se limita la, date de trafic din rețea, date generate de site-urile de social media și mesaje de e-mail.
Flume, biblioteca și configurarea codului sursă
Înainte de a începe cu procesul propriu-zis, asigurați-vă că aveți Hadoop instalat. Schimbați utilizatorul în „hduser” (id-ul folosit în timpul configurației Hadoop, puteți comuta la userid-ul folosit în timpul configurației Hadoop)
Pas 1) Creați un director nou cu numele „FlumeTutorial”
sudo mkdir FlumeTutorial
- Oferă permisiuni de citire, scriere și execuție
sudo chmod -R 777 FlumeTutorial
- Copiați fișierele MyTwitterSource.java și MyTwitterSourceForFlume.java în acest director.
Descărcați fișierele de intrare de aici
Verificați permisiunile de fișiere ale tuturor acestor fișiere și dacă permisiunile de „citire” lipsesc, acordați aceleași
Pas 2) Descărcați „Apache Flume” de pe un site- https://flume.apache.org/download.html
Apache Flume 1.4.0 a fost folosit în acest tutorial Flume.
Următorul Faceți clic
Pas 3) Copiați tarball-ul descărcat în directorul la alegere și extrageți conținutul utilizând următoarea comandă
sudo tar -xvf apache-flume-1.4.0-bin.tar.gz
Această comandă va crea un nou director numit apache-flume-1.4.0-bin și extrageți fișiere în el. Acest director va fi denumit in restul articolului.
Pas 4) Configurarea bibliotecii Flume
Copiați 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 la
/lib/
Este posibil ca unul sau toate JAR-urile copiate să fie nevoite să execute permisiunea. Acest lucru poate cauza o problemă cu compilarea codului. Deci, revocați permisiunea de execuție pe un astfel de JAR.
În cazul meu, twitter4j-core-4.0.1.jar a fost trebuind să execute permisiunea. L-am revocat ca mai jos -
sudo chmod -x twitter4j-core-4.0.1.jar
După această comandă, dă permisiunea de „citire”. twitter4j-core-4.0.1.jar pentru toti.
sudo chmod +rrr /usr/local/apache-flume-1.4.0-bin/lib/twitter4j-core-4.0.1.jar
Vă rugăm să rețineți că am descărcat-
– twitter4j-core-4.0.1.jar din https://mvnrepository.com/artifact/org.twitter4j/twitter4j-core
- Toate borcanele cu flacără, adică flume-ng-*-1.4.0.jar din http://mvnrepository.com/artifact/org.apache.flume
Încărcați date de pe Twitter folosind Flume
Pas 1) Accesați directorul care conține fișiere de cod sursă.
Pas 2) set CLASSPATH a contine /lib/* și ~/FlumeTutorial/flume/mytwittersource/*
export CLASSPATH="/usr/local/apache-flume-1.4.0-bin/lib/*:~/FlumeTutorial/flume/mytwittersource/*"
Pas 3) Compilați codul sursă folosind comanda-
javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java
Pas 4)Creați un borcan
Mai întâi, creați Manifest.txt fișier folosind un editor de text la alegere și adăugați linia de mai jos în el-
Main-Class: flume.mytwittersource.MyTwitterSourceForFlume
.. Aici flume.mytwittersource.MyTwitterSourceForFlume este numele clasei principale. Vă rugăm să rețineți că trebuie să apăsați tasta Enter la sfârșitul acestui rând.
Acum, creează JAR 'MyTwitterSourceForFlume.jar' la fel de-
jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class
Pas 5) Copiați acest borcan în /lib/
sudo cp MyTwitterSourceForFlume.jar <Flume Installation Directory>/lib/
Pas 6) Accesați directorul de configurare al Flume, /conf
Dacă flume.conf nu există, atunci copiați flume-conf.properties.template și redenumiți-l în flume.conf
sudo cp flume-conf.properties.template flume.conf
If flume-env.sh nu există, atunci copiați flume-env.sh.template și redenumiți-l în flume-env.sh
sudo cp flume-env.sh.template flume-env.sh
Crearea unei aplicații Twitter
Pas 1) Creați o aplicație Twitter conectându-vă la https://developer.twitter.com/
Pas 2) Accesează „Aplicațiile mele” (Această opțiune este abandonată când 'Ou' se face clic pe butonul din colțul din dreapta sus)
Pas 3) Creați o nouă aplicație făcând clic „Creați o nouă aplicație”
Pas 4) Completați detaliile aplicației specificând numele aplicației, descrierea și site-ul web. Puteți consulta notele date sub fiecare casetă de introducere.
Pas 5) Derulați în jos în pagină și acceptați termenii prin marcare 'Da sunt de acord' și faceți clic pe butonul„Creează-ți aplicația Twitter”
Pas 6) În fereastra unei aplicații nou create, accesați fila, „Chei API” derulați în jos în pagină și faceți clic pe butonul „Creează-mi tokenul de acces”
Pas 7) Reincarca Pagina.
Pas 8) Faceţi clic pe „Testați OAuth”. Aceasta se va afișa „OAuth” setările aplicației.
Pas 9) Modifica „flume.conf” folosindu-le Setări OAuth. Pași de modificat „flume.conf” sunt prezentate mai jos.
Trebuie să copiem cheia consumatorului, secretul consumatorului, simbolul de acces și secretul jetonului de acces pentru a actualiza „flume.conf”.
Notă: Aceste valori aparțin utilizatorului și, prin urmare, sunt confidențiale, deci nu ar trebui să fie partajate.
Modificați fișierul „flume.conf”.
Pas 1) Operatii Deschise „flume.conf” în modul de scriere și setați valori pentru parametrii de mai jos -
sudo gedit flume.conf
Copiați conținutul de mai jos-
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
Pas 2) De asemenea, setați TwitterAgent.sinks.HDFS.hdfs.path ca mai jos,
TwitterAgent.sinks.HDFS.hdfs.path = hdfs:// : / /flume/tweets/
Să știu , și , vezi valoarea parametrului „fs.defaultFS” s-a instalat $HADOOP_HOME/etc/hadoop/core-site.xml
Pas 3) Pentru a șterge datele în HDFS, ca și când apar, ștergeți intrarea de mai jos dacă există,
TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600
Exemplu: transmiterea în flux a datelor Twitter folosind Flume
Pas 1) Operatii Deschise „flume-env.sh” în modul de scriere și setați valori pentru parametrii de mai jos,
JAVA_HOME=<Installation directory of Java>
FLUME_CLASSPATH="<Flume Installation Directory>/lib/MyTwitterSourceForFlume.jar"
Pas 2) Porniți Hadoop
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
Pas 3) Două dintre fișierele JAR din tarball-ul Flume nu sunt compatibile cu Hadoop 2.2.0. Deci, va trebui să urmăm pașii de mai jos din acest exemplu Apache Flume pentru a face Flume compatibil cu Hadoop 2.2.0.
a. Muta protobuf-java-2.4.1.jar din ' /lib'.
Accesează ' /lib'
CD /lib
sudo mv protobuf-java-2.4.1.jar ~/
b. Găsiți fișierul JAR „guava” ca mai jos
find . -name "guava*"
Muta guava-10.0.1.jar din ' /lib'.
sudo mv guava-10.0.1.jar ~/
c. Download guava-17.0.jar din http://mvnrepository.com/artifact/com.google.guava/guava/17.0
Acum, copiați acest fișier jar descărcat în ' /lib'
Pas 4) Accesează ' /cos' și pornește Flume ca...
./flume-ng agent -n MyTwitAgent -c conf -f <Flume Installation Directory>/conf/flume.conf
Fereastra promptului de comandă în care Flume preia Tweeturile-
Din mesajul din fereastra de comandă putem vedea că rezultatul este scris /user/hduser/flume/tweets/ director.
Acum, deschideți acest director folosind un browser web.
Pas 5) Pentru a vedea rezultatul încărcării datelor, folosind un browser deschis http://localhost:50070/ și răsfoiți sistemul de fișiere, apoi mergeți la directorul în care au fost încărcate datele, adică
/flume/tweets/