Vodič za Apache Flume: Što je, Archiprimjer teksture i Hadoopa
Što je Apache Flume u Hadoopu?
Apache Flume je pouzdan i distribuiran sustav za prikupljanje, agregiranje i premještanje velikih količina podataka dnevnika. Ima jednostavnu, ali fleksibilnu arhitekturu temeljenu na protoku podataka. Apache Flume koristi se za prikupljanje podataka zapisnika prisutnih u datotekama zapisnika s web poslužitelja i njihovo agregiranje u HDFS za analizu.
Flume u Hadoopu podržava više izvora kao što su –
- 'tail' (koji prenosi podatke iz lokalne datoteke i upisuje u HDFS putem Flumea, slično Unix naredbi 'tail')
- Dnevnici sustava
- Apache log4j (omogućiti Java aplikacije za pisanje događaja u datoteke u HDFS putem Flumea).
Žlijeb Architektura
A Flume agent je JVM proces koji ima 3 komponente –Izvor kanala, Žlijebni kanal međutim Odvodni sudoper– kroz koje se događaji šire nakon što su pokrenuti na vanjskom izvoru.

- U gornjem dijagramu događaje koje je generirao vanjski izvor (web-poslužitelj) koristi izvor podataka Flume. Vanjski izvor šalje događaje izvoru Flume u formatu koji ciljni izvor prepoznaje.
- Flume Source prima događaj i pohranjuje ga u jedan ili više kanala. Kanal djeluje kao spremište koje čuva događaj sve dok ga ne potroši kanal. Ovaj kanal može koristiti lokalni sustav datoteka za pohranu ovih događaja.
- Flume sink uklanja događaj iz kanala i pohranjuje ga u vanjski repozitorij kao što je npr. HDFS. Može postojati više agenata kanala, u kojem slučaju ponor kanala prosljeđuje događaj izvoru kanala sljedećeg agenta kanala u toku.
Neke važne značajke FLUME-a
- Flume ima fleksibilan dizajn temeljen na protoku podataka. Tolerantan je na greške i robustan je s višestrukim prelaskom i mehanizmima oporavka. Flume Big data nudi različite razine pouzdanosti koje uključuju 'najbolja isporuka' i 'dostava od kraja do kraja'. Najbolja isporuka ne tolerira nikakav kvar Flume čvora dok 'dostava od kraja do kraja' način rada jamči isporuku čak i u slučaju kvarova više čvorova.
- Flume prenosi podatke između izvora i odvoda. Ovo prikupljanje podataka može biti planirano ili vođeno događajem. Flume ima vlastitu mašinu za obradu upita koja olakšava transformaciju svake nove serije podataka prije nego što se premjesti u predviđeni odvodnik.
- Moguć Žlijebni umivaonici uključiti HDFS međutim HBase. Flume Hadoop također se može koristiti za prijenos podataka o događajima uključujući, ali ne ograničavajući se na podatke o mrežnom prometu, podatke generirane putem web stranica društvenih medija i poruke e-pošte.
Postavljanje kanala, biblioteke i izvornog koda
Prije nego počnemo sa stvarnim procesom, provjerite imate li instaliran Hadoop. Promijenite korisnika u 'hduser' (ID koji se koristi tijekom konfiguracije Hadoop-a, možete se prebaciti na ID korisnika koji se koristi tijekom vaše konfiguracije Hadoop-a)
Korak 1) Napravite novi direktorij pod nazivom 'FlumeTutorial'
sudo mkdir FlumeTutorial
- Dajte dopuštenja za čitanje, pisanje i izvršavanje
sudo chmod -R 777 FlumeTutorial
- Kopirajte datoteke MyTwitterSource.java međutim MyTwitterSourceForFlume.java u ovom imeniku.
Preuzmite ulazne datoteke odavde
Provjerite dopuštenja datoteka za sve ove datoteke i ako nedostaju dopuštenja za 'čitanje', dodijelite ista-
Korak 2) Preuzmite 'Apache Flume' s web-mjesta- https://flume.apache.org/download.html
Apache Flume 1.4.0 korišten je u ovom vodiču za Flume.
Sljedeći klik
Korak 3) Kopirajte preuzeti tarball u direktorij po vašem izboru i ekstrahirajte sadržaj pomoću sljedeće naredbe
sudo tar -xvf apache-flume-1.4.0-bin.tar.gz
Ova naredba će stvoriti novi direktorij pod nazivom apache-flume-1.4.0-bin i ekstrahirajte datoteke u njega. Ovaj direktorij će se nazivati u ostatku članka.
Korak 4) Postavljanje knjižnice Flume
kopija 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 do
/lib/
Moguće je da će jedan ili cijeli kopirani JAR morati izvršiti dozvolu. To može uzrokovati problem s kompilacijom koda. Dakle, opozovite dopuštenje za izvršenje na takvom JAR-u.
U mom slučaju, twitter4j-core-4.0.1.jar bio je morati izvršiti dopuštenje. Opozvao sam ga kao ispod-
sudo chmod -x twitter4j-core-4.0.1.jar
Nakon što ova naredba daje dopuštenje za 'čitanje' twitter4j-core-4.0.1.jar svima.
sudo chmod +rrr /usr/local/apache-flume-1.4.0-bin/lib/twitter4j-core-4.0.1.jar
Imajte na umu da sam preuzeo-
– twitter4j-core-4.0.1.jar iz https://mvnrepository.com/artifact/org.twitter4j/twitter4j-core
- Sve plamene JAR-ove, tj. flume-ng-*-1.4.0.jar iz http://mvnrepository.com/artifact/org.apache.flume
Učitajte podatke s Twittera pomoću Flumea
Korak 1) Idite u direktorij koji sadrži datoteke izvornog koda.
Korak 2) Postaviti KLASPAT sadržavati /lib/* međutim ~/FlumeTutorial/flume/mytwittersource/*
export CLASSPATH="/usr/local/apache-flume-1.4.0-bin/lib/*:~/FlumeTutorial/flume/mytwittersource/*"
Korak 3) Prevedi izvorni kod pomoću naredbe-
javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java
Korak 4)Stvorite staklenku
Prvo, stvorite Manifest.txt datoteku pomoću uređivača teksta po vašem izboru i u nju dodajte donji redak-
Main-Class: flume.mytwittersource.MyTwitterSourceForFlume
.. ovdje flume.mytwittersource.MyTwitterSourceForFlume je naziv glavne klase. Imajte na umu da morate pritisnuti tipku enter na kraju ovog retka.
Sada stvorite JAR 'MyTwitterSourceForFlume.jar' kao-
jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class
Korak 5) Kopirajte ovu staklenku u /lib/
sudo cp MyTwitterSourceForFlume.jar <Flume Installation Directory>/lib/
Korak 6) Idite u konfiguracijski direktorij Flumea, /konf
Ako flume.conf ne postoji, kopirajte flume-conf.properties.template i preimenujte ga u flume.conf
sudo cp flume-conf.properties.template flume.conf
If flume-env.sh ne postoji, onda kopirajte flume-env.sh.template i preimenujte ga u flume-env.sh
sudo cp flume-env.sh.template flume-env.sh
Izrada Twitter aplikacije
Korak 1) Napravite Twitter aplikaciju prijavom na https://developer.twitter.com/
Korak 2) Idi na 'Moje aplikacije' (Ova opcija se ispušta kada 'Jaje' klikne se gumb u gornjem desnom kutu)
Korak 3) Napravite novu aplikaciju klikom "Stvori novu aplikaciju"
Korak 4) Ispunite detalje aplikacije navodeći naziv aplikacije, opis i web mjesto. Možete pogledati napomene ispod svakog polja za unos.
Korak 5) Pomičite stranicu prema dolje i označite prihvatite uvjete 'Da, slažem se' i kliknite na gumb'Kreirajte svoju Twitter aplikaciju'
Korak 6) U prozoru novostvorene aplikacije idite na karticu, 'API ključevi' pomaknite se prema dolje na stranici i kliknite gumb 'Stvori moj pristupni token'
Korak 7) Osvježite stranicu.
Korak 8) Kliknite na 'Testiraj OAuth'. Ovo će se prikazati 'OAuth' postavke aplikacije.
Korak 9) izmijeniti 'flume.conf' koristeći ove OAuth postavke. Koraci za izmjenu 'flume.conf' dati su u nastavku.
Moramo kopirati Consumer ključ, Consumer secret, Access token i Access token secret za ažuriranje 'flume.conf'.
Napomena: Ove vrijednosti pripadaju korisniku i stoga su povjerljive, pa se ne smiju dijeliti.
Izmijenite datoteku 'flume.conf'
Korak 1) Otvoren 'flume.conf' u načinu pisanja i postavite vrijednosti za donje parametre-
sudo gedit flume.conf
Kopiraj donji sadržaj-
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
Korak 2) Također, postavite TwitterAgent.sinks.HDFS.hdfs.path kao ispod,
TwitterAgent.sinks.HDFS.hdfs.path = hdfs:// : / /flume/tweetovi/
Znati , međutim , pogledajte vrijednost parametra 'fs.defaultFS' smjestiti se $HADOOP_HOME/etc/hadoop/core-site.xml
Korak 3) Kako biste isprali podatke u HDFS, kao i kada dođu, izbrišite donji unos ako postoji,
TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600
Primjer: Streaming Twitter podataka pomoću Flumea
Korak 1) Otvoren 'flume-env.sh' u načinu pisanja i postavite vrijednosti za donje parametre,
JAVA_HOME=<Installation directory of Java>
FLUME_CLASSPATH="<Flume Installation Directory>/lib/MyTwitterSourceForFlume.jar"
Korak 2) Pokrenite Hadoop
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
Korak 3) Dvije JAR datoteke iz Flume tarballa nisu kompatibilne s Hadoopom 2.2.0. Dakle, morat ćemo slijediti korake u nastavku u ovom primjeru Apache Flumea kako bismo Flume učinili kompatibilnim s Hadoopom 2.2.0.
a. Potez protobuf-java-2.4.1.jar iz ' /lib'.
Idi na ' /lib'
CD /lib
sudo mv protobuf-java-2.4.1.jar ~/
b. Pronađite JAR datoteku 'guava' kao ispod
find . -name "guava*"
Potez guava-10.0.1.jar iz ' /lib'.
sudo mv guava-10.0.1.jar ~/
c. Preuzimanje guava-17.0.jar iz http://mvnrepository.com/artifact/com.google.guava/guava/17.0
Sada kopirajte ovu preuzetu jar datoteku u ' /lib'
Korak 4) Idi na ' /bin' i pokrenite Flume kao-
./flume-ng agent -n MyTwitAgent -c conf -f <Flume Installation Directory>/conf/flume.conf
Prozor naredbenog retka gdje flume dohvaća Tweetove-
Iz poruke naredbenog prozora možemo vidjeti da je izlaz zapisan /korisnik/hduser/flume/tweets/ katalog.
Sada otvorite ovaj direktorij pomoću web preglednika.
Korak 5) Da biste vidjeli rezultat učitavanja podataka, otvorite preglednik http://localhost:50070/ i pregledajte datotečni sustav, zatim idite u direktorij u koji su učitani podaci, tj.
/flume/tweetovi/