Apache Flumen opetusohjelma: Mikä on, Architecture & Hadoop-esimerkki
Mikä on Apache Flume Hadoopissa?
Apache Flume on luotettava ja hajautettu järjestelmä valtavien lokitietojen keräämiseen, kokoamiseen ja siirtämiseen. Sillä on yksinkertainen mutta joustava arkkitehtuuri, joka perustuu suoratoistotietovirtoihin. Apache Flumea käytetään keräämään lokitiedostoissa olevia lokitietoja verkkopalvelimista ja yhdistämään ne HDFS:ään analysointia varten.
Flume in Hadoop tukee useita lähteitä, kuten -
- 'tail' (joka siirtää tiedot paikallisesta tiedostosta ja kirjoittaa HDFS:ään Flumen kautta, samalla tavalla kuin Unix-komento 'tail')
- Järjestelmälokit
- Apache log4j (ota käyttöön Java sovellukset tapahtumien kirjoittamiseen HDFS-tiedostoihin Flumen kautta).
Flume Archirakenne
A Flume agentti on JVM prosessi, jossa on 3 osaa -Flume lähde, Flume kanava ja Flume pesuallas– joiden kautta tapahtumat etenevät sen jälkeen, kun ne on aloitettu ulkoisesta lähteestä.
- Yllä olevassa kaaviossa Flume Data Source kuluttaa ulkoisen lähteen (WebServer) luomat tapahtumat. Ulkoinen lähde lähettää tapahtumat Flume-lähteeseen muodossa, jonka kohdelähde tunnistaa.
- Flume Source vastaanottaa tapahtuman ja tallentaa sen yhteen tai useampaan kanavaan. Kanava toimii varastona, joka pitää tapahtuman, kunnes savun nielu kuluttaa sen. Tämä kanava voi käyttää paikallista tiedostojärjestelmää näiden tapahtumien tallentamiseen.
- Flume sink poistaa tapahtuman kanavalta ja tallentaa sen ulkoiseen arkistoon, kuten esim. HDFS. Savun tekijöitä voi olla useita, jolloin savun nielu välittää tapahtuman virtauksen seuraavan savuaineen lähteelle.
Joitakin FLUME:n tärkeitä ominaisuuksia
- Flumella on joustava rakenne, joka perustuu suoratoistotietovirtoihin. Se on vikasietoinen ja vankka, ja siinä on useita vikasieto- ja palautusmekanismeja. Flume Big datalla on tarjolla erilaisia luotettavuustasoja, mukaan lukien "paras toimitus" ja "päästä päähän toimitus". Paras vaivannäkö ei siedä mitään Flume-solmun vikaa, kun taas "päästä päähän toimitus" tila takaa toimituksen jopa useiden solmujen vikojen sattuessa.
- Flume kuljettaa tietoja lähteiden ja nielujen välillä. Tämä tiedonkeruu voi olla joko ajoitettua tai tapahtumalähtöistä. Flumella on oma kyselynkäsittelymoottori, jonka avulla on helppo muuttaa jokainen uusi tietoerä ennen kuin se siirretään aiottuun nieluon.
- mahdollinen Flume uppoaa sisältää HDFS ja HBase. Flume Hadoopia voidaan käyttää myös tapahtumatietojen siirtämiseen, mukaan lukien mutta ei rajoittuen verkkoliikennetiedot, sosiaalisen median verkkosivustojen luomat tiedot ja sähköpostiviestit.
Flumen, kirjaston ja lähdekoodin asetukset
Ennen kuin aloitamme varsinaisen prosessin, varmista, että Hadoop on asennettu. Vaihda käyttäjäksi "hduser" (tunnusta käytetään Hadoop-määrityksen aikana, voit vaihtaa Hadoop-määrityksen aikana käytettyyn käyttäjätunnukseen)
Vaihe 1) Luo uusi hakemisto nimellä "FlumeTutorial"
sudo mkdir FlumeTutorial
- Anna luku-, kirjoitus- ja suoritusoikeudet
sudo chmod -R 777 FlumeTutorial
- Kopioi tiedostot MyTwitterSource.java ja MyTwitterSourceForFlume.java tässä hakemistossa.
Tarkista kaikkien näiden tiedostojen tiedostooikeudet ja jos lukuoikeudet puuttuvat, myönnä samat
Vaihe 2) Lataa "Apache Flume" sivustolta- https://flume.apache.org/download.html
Tässä Flume-opetusohjelmassa on käytetty Apache Flume 1.4.0:aa.
Seuraava Napsauta
Vaihe 3) Kopioi ladattu tarball valitsemaasi hakemistoon ja pura sisältö seuraavalla komennolla
sudo tar -xvf apache-flume-1.4.0-bin.tar.gz
Tämä komento luo uuden hakemiston nimeltä apache-flume-1.4.0-bin ja pura tiedostot siihen. Tätä hakemistoa kutsutaan nimellä artikkelin loppuosassa.
Vaihe 4) Flume-kirjaston asetukset
kopio 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 että
/lib/
On mahdollista, että jompikumpi tai kaikki kopioidut JAR-tiedostot tarvitsevat suoritusluvan. Tämä voi aiheuttaa ongelmia koodin kääntämisessä. Joten peruuta suorituslupa sellaiselle JAR:lle.
Minun tapauksessani, twitter4j-core-4.0.1.jar oli pakko suorittaa lupa. Peruin sen alla olevan mukaisesti
sudo chmod -x twitter4j-core-4.0.1.jar
Tämän komennon jälkeen annetaan lukuoikeus päälle twitter4j-core-4.0.1.jar kaikille.
sudo chmod +rrr /usr/local/apache-flume-1.4.0-bin/lib/twitter4j-core-4.0.1.jar
Huomaa, että olen ladannut -
– twitter4j-core-4.0.1.jar alkaen https://mvnrepository.com/artifact/org.twitter4j/twitter4j-core
- Kaikki liekkipurkit eli flume-ng-*-1.4.0.jar alkaen http://mvnrepository.com/artifact/org.apache.flume
Lataa tiedot Twitteristä Flumen avulla
Vaihe 1) Siirry hakemistoon, joka sisältää lähdekooditiedostoja.
Vaihe 2) Asettaa CLASSPATH sisältää /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 komennolla-
javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java
Vaihe 4)Luo purkki
Ensin luo Manifest.txt tiedosto valitsemallasi tekstieditorilla ja lisää siihen alla oleva rivi -
Main-Class: flume.mytwittersource.MyTwitterSourceForFlume
.. täällä flume.mytwittersource.MyTwitterSourceForFlume on pääluokan nimi. Huomaa, että sinun on painettava Enter-näppäintä tämän rivin lopussa.
Luo nyt JAR 'MyTwitterSourceForFlume.jar' kuten-
jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class
Vaihe 5) Kopioi tämä purkki kohteeseen /lib/
sudo cp MyTwitterSourceForFlume.jar <Flume Installation Directory>/lib/
Vaihe 6) Siirry Flumen asetushakemistoon, /conf
Jos flume.conf-tiedostoa ei ole olemassa, kopioi flume-conf.properties.template ja nimeä se uudelleen muotoon flume.conf
sudo cp flume-conf.properties.template flume.conf
If flume-env.sh ei ole olemassa, kopioi flume-env.sh.template ja nimeä se uudelleen flume-env.sh
sudo cp flume-env.sh.template flume-env.sh
Twitter-sovelluksen luominen
Vaihe 1) Luo Twitter-sovellus kirjautumalla sisään https://developer.twitter.com/
Vaihe 2) Mene "Omat sovellukseni" (Tämä vaihtoehto pudotetaan alas, kun 'Kananmuna' napsautetaan oikeassa yläkulmassa olevaa painiketta)
Vaihe 3) Luo uusi sovellus napsauttamalla "Luo uusi sovellus"
Vaihe 4) Täytä hakemuksen tiedot määrittämällä hakemuksen nimi, kuvaus ja verkkosivusto. Voit viitata kunkin syöttöruudun alla oleviin huomautuksiin.
Vaihe 5) Vieritä sivua alas ja hyväksy ehdot merkitsemällä 'Kyllä olen samaa mieltä' ja napsauta painiketta"Luo Twitter-sovellus"
Vaihe 6) Siirry juuri luodun sovelluksen ikkunassa välilehdelle, "API-avaimet" vieritä sivua alas ja napsauta painiketta "Luo käyttöoikeustunnus"
Vaihe 7) Päivitä sivu.
Vaihe 8) Valitse "Testaa OAuth". Tämä tulee näkyviin "OAuth" sovelluksen asetuksista.
Vaihe 9) Muuttaa "flume.conf" käyttämällä näitä OAuth-asetukset. Vaiheet muokkaamiseen "flume.conf" on annettu alla.
Meidän on kopioitava kuluttaja-avain, kuluttajasalaisuus, pääsytunnus ja pääsytunnuksen salaisuus päivittääksemme 'flume.conf'.
Huomautus: Nämä arvot kuuluvat käyttäjälle ja ovat siksi luottamuksellisia, joten niitä ei pidä jakaa.
Muokkaa 'flume.conf'-tiedostoa
Vaihe 1) avoin "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) Myös asettaa TwitterAgent.sinks.HDFS.hdfs.path kuten alla,
TwitterAgent.sinks.HDFS.hdfs.path = hdfs:// : / /flume/tweetit/
Tietää , ja , katso parametrin arvo 'fs.defaultFS' asetettu sisään $HADOOP_HOME/etc/hadoop/core-site.xml
Vaihe 3) Jos haluat huuhdella tiedot HDFS:ään, poista alla oleva merkintä, jos se on olemassa,
TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600
Esimerkki: Twitter-tietojen suoratoisto Flumella
Vaihe 1) avoin "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 meidän on noudatettava alla olevia ohjeita tässä Apache Flume -esimerkissä, jotta Flume on yhteensopiva Hadoop 2.2.0:n kanssa.
a. Liikkua protobuf-java-2.4.1.jar ulos ' /lib'.
Mene ' /lib'
CD /lib
sudo mv protobuf-java-2.4.1.jar ~/
b. Etsi JAR-tiedosto 'guava' kuten alla
find . -name "guava*"
Liikkua guava-10.0.1.purkki ulos ' /lib'.
sudo mv guava-10.0.1.jar ~/
c. Lataa guava-17.0.purkki alkaen http://mvnrepository.com/artifact/com.google.guava/guava/17.0
Kopioi nyt tämä ladattu jar-tiedosto kohteeseen ' /lib'
Vaihe 4) Mene ' /bin' ja käynnistä Flume nimellä-
./flume-ng agent -n MyTwitAgent -c conf -f <Flume Installation Directory>/conf/flume.conf
Komentorivi-ikkuna, josta flume hakee twiittejä-
Komentoikkunan viestistä näemme, että tulos on kirjoitettu /user/hduser/flume/tweets/ hakemistoon.
Avaa nyt tämä hakemisto verkkoselaimella.
Vaihe 5) Jos haluat nähdä tietojen lataamisen tuloksen, avaa selain http://localhost:50070/ ja selaa tiedostojärjestelmää ja mene sitten hakemistoon, johon tiedot on ladattu, eli
/flume/tweets/