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.

  • 🔘 Agentin anatomia: Jokainen Flume-agentti on JVM-prosessi, joka sisältää lähteen, yhden tai useamman kanavan ja nielua.
  • ☑️ Luotettavuus: Parhaan mahdollisen toimituksen tapauksessa solmu ei vikaannu; kokonaisvaltainen toimitus selviää useiden solmujen vikaantumisista.
  • Setup: Mukautetut lähdekoodiluokat kääntyvät JAR-tiedostoksi, joka pudotetaan Flume lib -hakemistoon.
  • 🧪 kokoonpano: Yksi ominaisuustiedosto nimeää lähteen, kanavan ja nielun sekä asettaa HDFS-polun ja vierintärajoitukset.
  • 🛠️ Tuoda markkinoille, käynnistää, laukaista: Aloita prosessi flume-ng agentilla, nimeä agentti ja ohjaa tiedostoon flume.conf.
  • ⚠️ Päivämääräinen esimerkki: Twitter v1.1 -suoratoiston päätepiste suljettiin maaliskuussa 2023, joten käsittele harjoitusta mukautetun lähdekoodin mallina.

Apache Flume -opetusohjelma, joka käsittelee agenttiarkkitehtuuria, konfigurointia ja Hadoop-suoratoistoesimerkkiä

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.

Flume-arkkitehtuurikaavio, joka näyttää agentin, jolla on lähde, kanava ja nielu HDFS:ää syöttäessään

  1. 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.
  2. 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.
  3. 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).

Pääte vaihtaa Linux-käyttäjäksi hduser ennen Flume-asennuksen aloittamista

Vaihe 1) Luo uusi hakemisto nimeltä 'FlumeTutorial'.

sudo mkdir FlumeTutorial
  1. Anna luku-, kirjoitus- ja suoritusoikeudet.
    sudo chmod -R 777 FlumeTutorial
  2. Kopioi tiedostot MyTwitterSource.java ja MyTwitterSourceForFlume.java tähän hakemistoon.

Lataa syöttötiedostot täältä

Tarkista kaikkien näiden tiedostojen käyttöoikeudet alla olevan mukaisesti ja myönnä lukuoikeus, jos sitä ei ole.

Pääte, joka listaa ladatun tiedoston käyttöoikeudet Java lähdetiedostot

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.

Apache Flumen lataussivu, jossa näkyy valittavana oleva binääritiedoston linkki

Seuraavaksi napsauta peiliin.

Apachen peilisivulle päästiin Flume-tarball-linkkiä napsauttamalla

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

Terminaali extracFlume-tarballin luominen komennolla sudo tar -xvf

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

Pääte peruuttaa suoritusluvan twitter4j-ydin-JAR-tiedostossa

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/*"

Pääte vie CLASSPATH-tiedoston, joka osoittaa Flume-kirjastoon ja lähdekoodihakemistoihin

Vaihe 3) Käännä lähdekoodi alla olevalla komennolla.

javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java

Terminaali kääntää nämä kaksi Java lähdetiedostot javacin avulla

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.

Manifest.txt avataan tekstieditorissa Main-Class-merkinnällä

Luo nyt JAR-tiedosto 'MyTwitterSourceForFlume.jar' seuraavasti.

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

Pääte pakkaa käännetyt luokat MyTwitterSourceForFlume.jar-tiedostoon

Vaihe 5) Kopioi tämä JAR-arkki kohteeseen /kirjasto/.

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

Pääte kopioi mukautetun lähdekoodin JAR-tiedoston Flume lib -hakemistoon

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

Pääte kopioi flume-conf.properties.template-tiedoston flume.conf-tiedostoon

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

Pääte kopioi flume-env.sh.template-tiedoston flume-env.sh-tiedostoon

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.

Twitter-kehittäjän kirjautumissivu, jota käytetään sovellusluetteloon pääsemiseksi

Twitter-kehittäjätilin kotisivu näkyy sisäänkirjautumisen jälkeen

Vaihe 2) Siirry kohtaan ”Omat hakemukset” (tämä vaihtoehto avautuu, kun napsautat oikeassa yläkulmassa olevaa ”Muna”-painiketta).

Twitter-kehittäjäportaalin Omat sovellukset -sivu

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.

Twitter-sovelluksen luontilomake, jossa on nimi-, kuvaus- ja verkkosivustokentät

Vaihe 5) Vieritä sivua alaspäin, hyväksy ehdot valitsemalla "Kyllä, hyväksyn" ja napsauta "Luo Twitter-sovelluksesi" -painiketta.

Ehdot-valintaruutu ja Luo sovellus -painike Twitter-lomakkeen alareunassa

Vaihe 6) Siirry juuri luodun sovelluksen ikkunassa 'API-avaimet'-välilehdelle, vieritä sivua alaspäin ja napsauta 'Luo käyttöoikeustunnukseni' -painiketta.

Uuden Twitter-sovelluksen API-avaimet-välilehti ennen käyttöoikeustunnuksen luomista

Käyttöoikeustunnuksen tiedot, jotka näytetään Luo käyttöoikeustunnukseni -painikkeen painamisen jälkeen

Vaihe 7) Päivitä sivu.

Vaihe 8) Napsauta 'Testaa OAuth'. Tämä näyttää sovelluksen OAuth-asetukset.

Testi-OAuth-näyttö, jossa näkyvät sovelluksen OAuth-asetukset

Vaihe 9) Muokkaa tiedostoa 'flume.conf' näillä OAuth-asetuksilla. Ohjeet tiedoston 'flume.conf' muokkaamiseen on annettu alla.

OAuth-asetukset, joissa luetellaan kuluttaja-avaimen, kuluttajan salaisuuden ja käyttöoikeustunnuksen arvot

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

Flume.conf-tiedosto avautuu editorissa MyTwitAgentin lähde-, kanava- ja nieluominaisuuksilla

Vaihe 2) Aseta myös TwitterAgent.sinks.HDFS.hdfs.path alla olevan mukaisesti.

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

HDFS-nielu hdfs.path-ominaisuus on asetettu isäntänimeen, portin numeroon ja HDFS:n kotihakemistoon.

Löytää , ja , katso alla olevasta $HADOOP_HOME/etc/hadoop/core-site.xml-tiedostossa asetetun 'fs.defaultFS'-parametrin arvo.

fs.defaultFS-ominaisuus tiedostossa core-site.xml, joka antaa isäntänimen ja portin

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"

flume-env.sh avataan editorissa, jossa on JAVA_HOME ja FLUME_CLASSPATH asetettu

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 ~/

Pääte siirtää protobuf-java-2.4.1.jar-tiedoston pois Flume-kirjastohakemistosta

b. Etsi JAR-tiedosto 'guava' alla olevan mukaisesti.

find . -name "guava*"

Pääte etsii komentoa, joka paikantaa niputetun guava JAR -tiedoston

Siirrä guava-10.0.1.jar pois kansiosta ' /lib'.

sudo mv guava-10.0.1.jar ~/

Pääte siirtää guava-10.0.1.jar-tiedoston pois Flume-kirjastohakemistosta

c. Lataa guava-17.0.jar-tiedosto osoitteesta Maven-arkisto, nähtävissä alla.

Maven-arkiston sivu guava 17.0:lle, ladattavalle korvaavalle JAR-tiedostolle

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

Pääte käynnistää Flume-agentin nimeltä MyTwitAgent komennolla flume-ng

Komentorivi-ikkuna, josta Flume hakee twiittejä, näyttää tältä.

Komentokehote, jossa näkyy Flume-agentti noutamassa twiittejä ja kirjoittamassa niitä HDFS:ään

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.

HDFS-selain, joka näyttää flume/tweets-hakemiston ladatuine twiittitiedostoineen

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.

UKK

Ei niin kuin kirjoitettu. V1.1-suoratoiston tilat/suodattimen päätepiste poistettiin käytöstä 9. maaliskuuta 2023 ja API v2:n korvaava versio vaatii maksullisen tason. Flume-mekaniikka on edelleen voimassa mukautetun lähdekoodin harjoituksena.

Mallintaa lähtötilanteen normaalin lokimäärän ja viestin muodon ja merkitsee sitten poikkeamat, jotka kiinteät kynnysarvot ylittävät. Ne myös klusteroivat toistuvan pinon tracyhdeksi tapahtumaksi ja laatii todennäköisen syyn, mikä lyhentää triage-prosessia.

Copilot luonnostelee lähde-, kanava- ja nielulohkot nopeasti, mutta se keksii ominaisuuksien nimet ja sekoittaa julkaisuja. Tarkista jokainen avain Flume-käyttöoppaasta omalle versiollesi ennen agentin käynnistämistä.

Flume suoratoistaa tapahtumatietoja, kuten lokeja, jatkuvasti HDFS:ään. Sqoop siirtää jäsenneltyjä taulukoita relaatiotietokantojen ja Hadoopin välillä ajoitetuissa erissä. Ne kattavat tiedonkeruun eri puolia ja sopivat hyvin yhteen.

Muistikanava on nopein, mutta menettää puskuroituja tapahtumia, jos agentti kaatuu. Tiedostokanava kirjoittaa levylle ja selviää uudelleenkäynnistyksestä pienemmällä suorituskyvyllä. Suosi kestävyyttä kaikelle, mitä et voi lähettää uudelleen.

Kafka on nykyään tavanomainen oletusarvo, koska se säilyttää dataa ja palvelee useita kuluttajia. Flume 1.11.0, lokakuusta 2022 lähtien, soveltuu edelleen yksinkertaiseen yksisuuntaiseen lokien keräämiseen HDFS:ään.

Lähes aina JAR-tiedostojen yhteentörmäys: Flume-tarball sisältää omat Guava- ja protobuf-versionsa, jotka ovat ristiriidassa Hadoopin lataamien versioiden kanssa. Vanhemman JAR-tiedoston poistaminen yleensä poistaa ongelman.

Ne päättävät, milloin nielu sulkee tiedoston ja avaa uuden: rollSize tavujen mukaan, rollCount tapahtumien määrän mukaan, rollInterval sekuntien mukaan. Nolla poistaa kyseisen liipaisimen käytöstä.

Tiivistä tämä viesti seuraavasti: