Výukový program Apache Flume: Co je, ArchiPříklad tecture & Hadoop
Co je Apache Flume v Hadoopu?
Apache Flume je spolehlivý a distribuovaný systém pro shromažďování, agregaci a přesun masivního množství logových dat. Má jednoduchou, ale flexibilní architekturu založenou na streamování datových toků. Apache Flume se používá ke shromažďování dat protokolu přítomných v souborech protokolu z webových serverů a jejich agregaci do HDFS pro analýzu.
Flume v Hadoop podporuje více zdrojů jako –
- 'tail' (který přenáší data z místního souboru a zapisuje do HDFS přes Flume, podobně jako unixový příkaz 'tail')
- Protokoly systému
- Apache log4j (umožnit Java aplikace pro zápis událostí do souborů v HDFS přes Flume).
Tok Architecture
A Flume agent je JVM proces, který má 3 složky –Zdroj žlabu, Kanál žlabu si Žlabový dřez– skrze které se události šíří poté, co byly zahájeny z externího zdroje.

- Ve výše uvedeném diagramu jsou události generované externím zdrojem (WebServer) spotřebovávány Flume Data Source. Externí zdroj odesílá události do zdroje Flume ve formátu, který je rozpoznán cílovým zdrojem.
- Flume Source přijme událost a uloží ji do jednoho nebo více kanálů. Kanál funguje jako úložiště, které uchovává událost, dokud není spotřebována jímkou žlabu. Tento kanál může k ukládání těchto událostí používat místní souborový systém.
- Flume sink odstraní událost z kanálu a uloží ji do externího úložiště, jako je např. HDFS. Může existovat více žlabových činidel, v takovém případě žlabová jímka předává událost ke zdroji žlabu dalšího žlabového činidla v proudu.
Některé důležité funkce FLUME
- Flume má flexibilní design založený na streamovaných datových tocích. Je odolný proti chybám a robustní s vícenásobnými mechanismy selhání a obnovy. Flume Big data nabízí různé úrovně spolehlivosti, včetně „doručení s maximální snahou“ a "doručování od začátku do konce". Doručení s maximální snahou netoleruje žádné selhání uzlu Flume, zatímco "doručování od začátku do konce" režim zaručuje doručení i v případě vícenásobného selhání uzlů.
- Flume přenáší data mezi zdroji a jímkami. Toto shromažďování dat může být naplánováno nebo řízeno událostmi. Flume má svůj vlastní engine pro zpracování dotazů, který usnadňuje transformaci každé nové dávky dat před jejím přesunem do zamýšlené jímky.
- Možný Žlabové dřezy obsahovat HDFS si HBase. Flume Hadoop lze také použít k přenosu dat událostí, včetně, ale bez omezení na data o síťovém provozu, dat generovaných weby sociálních médií a e-mailových zpráv.
Nastavení kanálu, knihovny a zdrojového kódu
Než začneme se skutečným procesem, ujistěte se, že máte nainstalovaný Hadoop. Změnit uživatele na 'hduser' (ID používané při konfiguraci Hadoop, můžete přepnout na uživatelské ID používané během konfigurace Hadoop)
Krok 1) Vytvořte nový adresář s názvem 'FlumeTutorial'
sudo mkdir FlumeTutorial
- Udělte oprávnění ke čtení, zápisu a spouštění
sudo chmod -R 777 FlumeTutorial
- Kopírování souborů MyTwitterSource.java si MyTwitterSourceForFlume.java v tomto adresáři.
Stáhněte si vstupní soubory odtud
Zkontrolujte oprávnění k souborům všech těchto souborů a pokud chybí oprávnění ke čtení, udělte je
Krok 2) Stáhněte si „Apache Flume“ z webu- https://flume.apache.org/download.html
V tomto tutoriálu Flume byl použit Apache Flume 1.4.0.
Další kliknutí
Krok 3) Zkopírujte stažený tarball do vámi zvoleného adresáře a extrahujte obsah pomocí následujícího příkazu
sudo tar -xvf apache-flume-1.4.0-bin.tar.gz
Tento příkaz vytvoří nový adresář s názvem apache-flume-1.4.0-bin a extrahovat do něj soubory. Tento adresář bude označován jako ve zbytku článku.
Krok 4) Nastavení knihovny žlabů
Zkopírujte 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 na
/lib/
Je možné, že jeden nebo všechny zkopírované JAR budou muset provést povolení. To může způsobit problém s kompilací kódu. Takže zrušte oprávnění ke spuštění na takovém JAR.
V mém případě, twitter4j-core-4.0.1.jar byl muset vykonat povolení. Odvolal jsem to, jak je uvedeno níže-
sudo chmod -x twitter4j-core-4.0.1.jar
Poté, co tento příkaz udělí oprávnění ke čtení twitter4j-core-4.0.1.jar všem.
sudo chmod +rrr /usr/local/apache-flume-1.4.0-bin/lib/twitter4j-core-4.0.1.jar
Vezměte prosím na vědomí, že jsem si stáhl -
– twitter4j-core-4.0.1.jar od https://mvnrepository.com/artifact/org.twitter4j/twitter4j-core
- Všechny plamenové JAR, tj. flume-ng-*-1.4.0.jar od http://mvnrepository.com/artifact/org.apache.flume
Načtěte data z Twitteru pomocí Flume
Krok 1) Přejděte do adresáře, který obsahuje soubory zdrojového kódu.
Krok 2) sada CLASSPATH obsahovat /lib/* si ~/FlumeTutorial/flume/mytwittersource/*
export CLASSPATH="/usr/local/apache-flume-1.4.0-bin/lib/*:~/FlumeTutorial/flume/mytwittersource/*"
Krok 3) Zkompilujte zdrojový kód pomocí příkazu-
javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java
Krok 4)Vytvořte sklenici
Nejprve vytvořte Manifest.txt soubor pomocí textového editoru dle vašeho výběru a přidejte do něj níže uvedený řádek-
Main-Class: flume.mytwittersource.MyTwitterSourceForFlume
.. tady flume.mytwittersource.MyTwitterSourceForFlume je název hlavní třídy. Upozorňujeme, že na konci tohoto řádku musíte stisknout klávesu Enter.
Nyní vytvořte JAR 'MyTwitterSourceForFlume.jar' tak jako-
jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class
Krok 5) Zkopírujte tuto nádobu do /lib/
sudo cp MyTwitterSourceForFlume.jar <Flume Installation Directory>/lib/
Krok 6) Přejděte do konfiguračního adresáře Flume, /conf
Pokud flume.conf neexistuje, zkopírujte flume-conf.properties.template a přejmenujte jej na flume.conf
sudo cp flume-conf.properties.template flume.conf
If flume-env.sh neexistuje, pak zkopírujte flume-env.sh.template a přejmenovat na flume-env.sh
sudo cp flume-env.sh.template flume-env.sh
Vytvoření aplikace Twitter
Krok 1) Vytvořte aplikaci Twitter přihlášením do https://developer.twitter.com/
Krok 2) Jít do 'Moje aplikace' (Tato možnost se vypne, když 'Vejce' klikněte na tlačítko v pravém horním rohu)
Krok 3) Novou aplikaci vytvoříte kliknutím "Vytvořit novou aplikaci"
Krok 4) Vyplňte podrobnosti aplikace zadáním názvu aplikace, popisu a webové stránky. Můžete se podívat na poznámky uvedené pod každým vstupním polem.
Krok 5) Přejděte na stránce dolů a přijměte podmínky označením 'Ano, souhlasím s tím' a klikněte na tlačítko„Vytvořte si aplikaci Twitter“
Krok 6) V okně nově vytvořené aplikace přejděte na kartu, "Klíče API" přejděte na stránku dolů a klikněte na tlačítko 'Vytvořit můj přístupový token'
Krok 7) Obnovte stránku.
Krok 8) Klikněte na 'Test OAuth'. Toto se zobrazí 'OAuth' nastavení aplikace.
Krok 9) Upravit 'flume.conf' pomocí těchto Nastavení OAuth. Kroky k úpravě 'flume.conf' jsou uvedeny níže.
Potřebujeme zkopírovat spotřebitelský klíč, zákaznický tajný klíč, přístupový token a přístupový klíčový klíč do aktualizace 'flume.conf'.
Poznámka: Tyto hodnoty patří uživateli, a proto jsou důvěrné, takže by neměly být sdíleny.
Upravte soubor 'flume.conf'
Krok 1) Otevřená 'flume.conf' v režimu zápisu a nastavte hodnoty pro níže uvedené parametry-
sudo gedit flume.conf
Zkopírujte obsah níže -
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
Krok 2) Také nastavte TwitterAgent.sinks.HDFS.hdfs.path jak je uvedeno níže,
TwitterAgent.sinks.HDFS.hdfs.path = hdfs:// : / /flume/tweets/
Vědět , si , viz hodnota parametru 'fs.defaultFS' stanovené v $HADOOP_HOME/etc/hadoop/core-site.xml
Krok 3) Chcete-li vyprázdnit data do HDFS, jakmile přijdou, odstraňte níže uvedený záznam, pokud existuje,
TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600
Příklad: Streamování dat Twitteru pomocí Flume
Krok 1) Otevřená 'flume-env.sh' v režimu zápisu a nastavit hodnoty pro níže uvedené parametry,
JAVA_HOME=<Installation directory of Java>
FLUME_CLASSPATH="<Flume Installation Directory>/lib/MyTwitterSourceForFlume.jar"
Krok 2) Spusťte Hadoop
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
Krok 3) Dva ze souborů JAR z tarballu Flume nejsou kompatibilní s Hadoopem 2.2.0. Takže budeme muset postupovat podle níže uvedených kroků v tomto příkladu Apache Flume, aby byl Flume kompatibilní s Hadoop 2.2.0.
a. Pohyb protobuf-java-2.4.1.jar mimo ' /lib'.
Jít do ' /lib'
CD /lib
sudo mv protobuf-java-2.4.1.jar ~/
b. Najděte soubor JAR 'guava', jak je uvedeno níže
find . -name "guava*"
Pohyb guava-10.0.1.jar mimo ' /lib'.
sudo mv guava-10.0.1.jar ~/
c. Ke stažení guava-17.0.jar od http://mvnrepository.com/artifact/com.google.guava/guava/17.0
Nyní zkopírujte tento stažený soubor jar do ' /lib'
Krok 4) Jít do ' /zásobník' a spusťte Flume jako-
./flume-ng agent -n MyTwitAgent -c conf -f <Flume Installation Directory>/conf/flume.conf
Okno příkazového řádku, kde flume načítá tweety-
Ze zprávy příkazového okna vidíme, že se výstup zapisuje /user/hduser/flume/tweets/ adresáře.
Nyní otevřete tento adresář pomocí webového prohlížeče.
Krok 5) Chcete-li zobrazit výsledek načítání dat, použijte otevřený prohlížeč http://localhost:50070/ a procházejte souborový systém, poté přejděte do adresáře, do kterého byla načtena data, tj.
/flume/tweets/