Apache Flumen opetusohjelma: Mikä on, Architecture & Hadoop-esimerkki
⚡ Älykäs yhteenveto
Apache Flume on hajautettu palvelu suurten lokitietomäärien keräämiseen, yhdistämiseen ja siirtämiseen HDFS:ään. Se on rakennettu agenttien ympärille, jotka ketjuttavat lähteen, kanavan ja nielun yhteen.
Mikä on Apache Flume Hadoopissa?
Apache Flume on luotettava ja hajautettu järjestelmä suurten lokitietomäärien keräämiseen, yhdistämiseen ja siirtämiseen. Sillä on yksinkertainen mutta joustava arkkitehtuuri, joka perustuu suoratoistettaviin tietovirtoihin. Apache Flumea käytetään lokitiedostoissa olevien lokitietojen keräämiseen web-palvelimilta ja niiden yhdistämiseen HDFS analysointia varten.
Flume Hadoopissa tukee useita lähteitä, mukaan lukien:
- 'tail' (joka siirtää tiedot paikallisesta tiedostosta ja kirjoittaa ne HDFS:ään Flumen kautta, samalla tavalla kuin Unix-komento 'tail')
- Järjestelmälokit
- Apache log4j (mikä mahdollistaa Java sovellukset tapahtumien kirjoittamiseen HDFS-tiedostoihin Flumen kautta).
Nykyinen julkaisu on Flume 1.11.0, julkaistu 25. lokakuuta 2022 ja saatavilla osoitteesta Apache Flumen lataussivuTämä läpikäyntiohje on kirjoitettu versiota 1.4.0 vasten, joten useissa alla olevissa vaiheissa on huomautus, jos nykyinen versio toimii eri tavalla.
Flume Archirakenne
Flume-agentti on JVM prosessi, jossa on kolme komponenttia – virran lähde, virran kanava ja virran nielu – joiden kautta tapahtumat etenevät ulkoisesta lähteestä käynnistyttyään. Alla oleva kaavio näyttää, miten ne liittyvät toisiinsa.
- Ulkoisen lähteen (verkkopalvelimen) luomat tapahtumat käsitellään Flume-lähteessä. Ulkoinen lähde lähettää tapahtumia Flume-lähteelle kohdelähteen tunnistamassa muodossa.
- Flume-lähde vastaanottaa tapahtuman ja tallentaa sen yhteen tai useampaan kanavaan. Kanava toimii tallennusvälineenä, joka säilyttää tapahtuman, kunnes Flume-nielu käsittelee sen. Tämä kanava voi käyttää paikallista tiedostojärjestelmää näiden tapahtumien tallentamiseen.
- Flume-nielu poistaa tapahtuman kanavalta ja tallentaa sen ulkoiseen tietovarastoon, kuten HDFS:ään. Flume-agentteja voi olla useita, jolloin Flume-nielu välittää tapahtuman seuraavan agentin Flume-lähteelle virrassa.
Joitakin Flumen tärkeitä ominaisuuksia
- Flume on joustava, suoratoistettavien tietovirtojen pohjalta rakennettu. Se on vikasietoinen ja luotettava, ja siinä on useita vikasieto- ja palautusmekanismeja. Flume tarjoaa erilaisia luotettavuustasoja, mukaan lukien "paras toimitus" ja "päästä päähän toimitus". Paras vaivannäkö ei siedä Flume-solmun vikaantumista, kun taas päästä päähän -toimitus takaa toimituksen myös useiden solmujen vikaantuessa.
- Flume siirtää dataa lähteiden ja nielujen välillä. Tämä datankeruu voi olla joko ajoitettua tai tapahtumapohjaista. Flumessa on oma kyselyiden käsittelymoottori, jonka avulla jokainen uusi dataerä on helppo muuntaa ennen kuin se siirretään aiottuun nieluun.
- mahdollinen Flume uppoaa sisältävät HDFS:n ja HBaseFlume voi myös siirtää tapahtumatietoja, kuten verkkoliikennetietoja, sosiaalisen median verkkosivustojen ja sähköpostiviestien luomaa dataa.
Flumen, kirjaston ja lähdekoodin asetukset
Ennen kuin aloitamme varsinaisen prosessin, varmista, että sinulla on Hadoop asennettuna; jos ei, käy läpi seuraavat vaiheet: Kuinka asentaa Hadoop ensin. Vaihda käyttäjätunnukseksi 'hduser' (Hadoopin määrityksen aikana käytetty tunnus; voit vaihtaa omassa Hadoop-määrityksessäsi käytettyyn käyttäjätunnukseen).
Vaihe 1) Luo uusi hakemisto nimeltä 'FlumeTutorial'.
sudo mkdir FlumeTutorial
- Anna luku-, kirjoitus- ja suoritusoikeudet.
sudo chmod -R 777 FlumeTutorial
- Kopioi tiedostot MyTwitterSource.java ja MyTwitterSourceForFlume.java tähän hakemistoon.
Tarkista kaikkien näiden tiedostojen käyttöoikeudet alla olevan mukaisesti ja myönnä lukuoikeus, jos sitä ei ole.
Vaihe 2) Lataa 'Apache Flume' osoitteesta https://flume.apache.org/download.html.
Tässä Flume-opetusohjelmassa on käytetty Apache Flume 1.4.0:aa.
Seuraavaksi napsauta peiliin.
Vaihe 3) Kopioi ladattu tarball-tiedosto haluamaasi hakemistoon ja esim.tract sisältö seuraavalla komennolla.
sudo tar -xvf apache-flume-1.4.0-bin.tar.gz
Tämä luo uuden hakemiston nimeltä apache-flume-1.4.0-bin ja esim.trackopioi tiedostot siihen. Hakemistoa kutsutaan nimellä artikkelin loppuosassa.
Vaihe 4) Flume-kirjaston asennus. Kopioi tiedostot twitter4j-core-4.0.1.jar, flume-ng-configuration-1.4.0.jar, flume-ng-core-1.4.0.jar ja flume-ng-sdk-1.4.0.jar tiedostoon
/lib/
Joko kummallakin tai kaikilla kopioiduilla JAR-tiedostoilla on suoritusoikeus, mikä voi aiheuttaa ongelmia koodin kääntämisessä, joten peruuta se. Minun tapauksessani twitter4j-core-4.0.1.jar-tiedostolla oli suoritusoikeus. Peruutin sen alla kuvatulla tavalla.
sudo chmod -x twitter4j-core-4.0.1.jar
Tämän jälkeen alla oleva komento antaa kaikille lukuoikeuden tiedostoon twitter4j-core-4.0.1.jar.
sudo chmod +rrr /usr/local/apache-flume-1.4.0-bin/lib/twitter4j-core-4.0.1.jar
Huomaa, että latasin twitter4j-core-4.0.1.jar-tiedoston osoitteesta Maven-arkistoja kaikki Flume JAR -tiedostot, eli flume-ng-*-1.4.0.jar, osoitteesta org.apache.flume-esineet.
Lataa tiedot Twitteristä Flumen avulla
Vaihe 1) Siirry hakemistoon, joka sisältää lähdekooditiedostot.
Vaihe 2) Aseta CLASSPATH sisältämään /lib/* ja ~/FlumeTutorial/flume/mytwittersource/*.
export CLASSPATH="/usr/local/apache-flume-1.4.0-bin/lib/*:~/FlumeTutorial/flume/mytwittersource/*"
Vaihe 3) Käännä lähdekoodi alla olevalla komennolla.
javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java
Vaihe 4) Luo JAR-tiedosto. Luo ensin Manifest.txt-tiedosto valitsemallasi tekstieditorilla ja lisää siihen alla oleva rivi.
Main-Class: flume.mytwittersource.MyTwitterSourceForFlume
Tässä flume.mytwittersource.MyTwitterSourceForFlume on pääluokan nimi. Huomaa, että sinun on painettava Enter-näppäintä tämän rivin lopussa, kuten alla on esitetty.
Luo nyt JAR-tiedosto 'MyTwitterSourceForFlume.jar' seuraavasti.
jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class
Vaihe 5) Kopioi tämä JAR-arkki kohteeseen /kirjasto/.
sudo cp MyTwitterSourceForFlume.jar <Flume Installation Directory>/lib/
Vaihe 6) Siirry Flumen määrityshakemistoon, /conf.
Jos tiedostoa flume.conf ei ole olemassa, kopioi tiedosto flume-conf.properties.template ja nimeä se uudelleen tiedostoksi flume.conf.
sudo cp flume-conf.properties.template flume.conf
Jos flume-env.sh-tiedostoa ei ole, kopioi flume-env.sh.template ja nimeä se uudelleen tiedostoksi flume-env.sh.
sudo cp flume-env.sh.template flume-env.sh
Twitter-sovelluksen luominen
Lue tämä ensin. V1.1-suoratoisto statuses/filter twitter4j 4.0.1:n tarvitsema päätepiste poistettiin käytöstä 9. maaliskuuta 2023, ja sen korvannut API v2 -suodatettu virta on nyt osoitteessa kehittäjä.x.com, sijaitsee maksullisen tason takana. Käsittele alla olevia näyttöjä mukautetun lähdekoodin mallina ja osoita sitten sama agentti tiedostoon, suoritukseen tai Kafka-lähdekoodiin.
Vaihe 1) Luo Twitter-sovellus kirjautumalla kehittäjäportaaliin.
Vaihe 2) Siirry kohtaan ”Omat hakemukset” (tämä vaihtoehto avautuu, kun napsautat oikeassa yläkulmassa olevaa ”Muna”-painiketta).
Vaihe 3) Luo uusi sovellus napsauttamalla 'Luo uusi sovellus'.
Vaihe 4) Täytä sovelluksen tiedot antamalla sovelluksen nimi, kuvaus ja verkkosivusto. Voit katsoa kunkin syöttöruudun alla olevia huomautuksia.
Vaihe 5) Vieritä sivua alaspäin, hyväksy ehdot valitsemalla "Kyllä, hyväksyn" ja napsauta "Luo Twitter-sovelluksesi" -painiketta.
Vaihe 6) Siirry juuri luodun sovelluksen ikkunassa 'API-avaimet'-välilehdelle, vieritä sivua alaspäin ja napsauta 'Luo käyttöoikeustunnukseni' -painiketta.
Vaihe 7) Päivitä sivu.
Vaihe 8) Napsauta 'Testaa OAuth'. Tämä näyttää sovelluksen OAuth-asetukset.
Vaihe 9) Muokkaa tiedostoa 'flume.conf' näillä OAuth-asetuksilla. Ohjeet tiedoston 'flume.conf' muokkaamiseen on annettu alla.
Meidän on kopioitava kuluttaja-avain, kuluttajan salaisuus, käyttöoikeustunnus ja käyttöoikeustunnuksen salaisuus päivittääksemme 'flume.conf'-tiedoston.
Huomautus: Nämä arvot kuuluvat käyttäjälle ja ovat siksi luottamuksellisia, joten niitä ei tule jakaa.
Muokkaa 'flume.conf'-tiedostoa
Vaihe 1) Avaa 'flume.conf' kirjoitustilassa ja aseta arvot alla oleville parametreille.
sudo gedit flume.conf
Kopioi alla oleva sisältö.
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
Vaihe 2) Aseta myös TwitterAgent.sinks.HDFS.hdfs.path alla olevan mukaisesti.
TwitterAgent.sinks.HDFS.hdfs.path = hdfs:// : / /flume/tweetit/
Löytää , ja , katso alla olevasta $HADOOP_HOME/etc/hadoop/core-site.xml-tiedostossa asetetun 'fs.defaultFS'-parametrin arvo.
Vaihe 3) Jotta tiedot voidaan siirtää HDFS:ään sitä mukaa, kun niitä tulee, poista alla oleva merkintä, jos se on olemassa.
TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600
Esimerkki: Twitter-tietojen suoratoisto Flumella
Vaihe 1) Avaa 'flume-env.sh' kirjoitustilassa ja aseta arvot alla oleville parametreille.
JAVA_HOME=<Installation directory of Java>
FLUME_CLASSPATH="<Flume Installation Directory>/lib/MyTwitterSourceForFlume.jar"
Vaihe 2) Käynnistä Hadoop.
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
Vaihe 3) Kaksi Flume-tarballin JAR-tiedostoista ei ole yhteensopivia Hadoop 2.2.0:n kanssa, joten tässä Apache Flume -esimerkissä noudatamme alla olevia ohjeita tehdäksemme Flumesta yhteensopivan Hadoop 2.2.0:n kanssa. Tämä JAR-vaihto on 1.4.0-aikakauden korjaus; Flume 1.11.0 toimittaa jo nykyiset protobuf- ja Guava-koontiversiot, joten moderni tarball yleensä ei tarvitse niitä lainkaan.
a. Siirrä protobuf-java-2.4.1.jar pois hakemistosta ' /lib'. Siirry ensin kyseiseen hakemistoon.
CD /lib
sudo mv protobuf-java-2.4.1.jar ~/
b. Etsi JAR-tiedosto 'guava' alla olevan mukaisesti.
find . -name "guava*"
Siirrä guava-10.0.1.jar pois kansiosta ' /lib'.
sudo mv guava-10.0.1.jar ~/
c. Lataa guava-17.0.jar-tiedosto osoitteesta Maven-arkisto, nähtävissä alla.
Kopioi nyt tämä ladattu JAR-tiedosto kansioon ' /lib'.
Vaihe 4) Siirry kohtaan ' /bin' ja käynnistä Flume seuraavasti.
./flume-ng agent -n MyTwitAgent -c conf -f <Flume Installation Directory>/conf/flume.conf
Komentorivi-ikkuna, josta Flume hakee twiittejä, näyttää tältä.
Komentoikkunan viestistä näemme, että tuloste kirjoitetaan hakemistoon /user/hduser/flume/tweets/. Avaa nyt tämä hakemisto verkkoselaimella.
Vaihe 5) Nähdäksesi datan latauksen tuloksen, avaa http://localhost:50070/ selaimessa, selaa tiedostojärjestelmää ja siirry sitten hakemistoon, johon data on ladattu, eli
/flume/tweets/
Portti 50070 on NameNoden verkkokäyttöliittymä Hadoop 2:ssa; Hadoop 3 siirsi saman sivun porttiin 9870.
Flume on puolet nielemisestä: Sqoop tuo taulukoita erissä, Flume suoratoistaa tapahtumia ja sitten Sika or Hive muotoile tiedostot ja oozie aikatauluttaa ketjun. Katso myös big data -analytiikkatyökalut, MapReduce-liitokset ja -laskurit ja Talend.


































