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.

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

Nastavení kanálu, knihovny a zdrojového kódu

Krok 1) Vytvořte nový adresář s názvem 'FlumeTutorial'

sudo mkdir FlumeTutorial
  1. Udělte oprávnění ke čtení, zápisu a spouštění
    sudo chmod -R 777 FlumeTutorial
  2. 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

Nastavení kanálu, knihovny a zdrojového kódu

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.

Nastavení kanálu, knihovny a zdrojového kódu

Další kliknutí

Nastavení kanálu, knihovny a zdrojového kódu

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

Nastavení kanálu, knihovny a zdrojového kódu

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

Nastavení kanálu, knihovny a zdrojového kódu

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

Načtěte data z Twitteru pomocí Flume

Krok 3) Zkompilujte zdrojový kód pomocí příkazu-

javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java

Načtěte data z Twitteru pomocí Flume

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.

Načtěte data z Twitteru pomocí Flume

Nyní vytvořte JAR 'MyTwitterSourceForFlume.jar' tak jako-

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

Načtěte data z Twitteru pomocí Flume

Krok 5) Zkopírujte tuto nádobu do /lib/

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

Načtěte data z Twitteru pomocí Flume

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

Načtěte data z Twitteru pomocí Flume

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

Načtěte data z Twitteru pomocí Flume

Vytvoření aplikace Twitter

Krok 1) Vytvořte aplikaci Twitter přihlášením do https://developer.twitter.com/

Vytvoření aplikace Twitter

Vytvoření aplikace Twitter

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)

Vytvoření aplikace Twitter

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.

Vytvoření aplikace Twitter

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“

Vytvoření aplikace 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'

Vytvoření aplikace Twitter

Vytvoření aplikace Twitter

Krok 7) Obnovte stránku.

Krok 8) Klikněte na 'Test OAuth'. Toto se zobrazí 'OAuth' nastavení aplikace.

Vytvoření aplikace Twitter

Krok 9) Upravit 'flume.conf' pomocí těchto Nastavení OAuth. Kroky k úpravě 'flume.conf' jsou uvedeny níže.

Vytvoření aplikace Twitter

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

Upravte soubor 'Flume.conf'

Krok 2) Také nastavte TwitterAgent.sinks.HDFS.hdfs.path jak je uvedeno níže,

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

Upravte soubor 'Flume.conf'

Vědět , si , viz hodnota parametru 'fs.defaultFS' stanovené v $HADOOP_HOME/etc/hadoop/core-site.xml

Upravte soubor 'Flume.conf'

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"

Streamování dat Twitteru pomocí Flume

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

Streamování dat Twitteru pomocí Flume

b. Najděte soubor JAR 'guava', jak je uvedeno níže

find . -name "guava*"

Streamování dat Twitteru pomocí Flume

Pohyb guava-10.0.1.jar mimo ' /lib'.

sudo mv guava-10.0.1.jar ~/

Streamování dat Twitteru pomocí Flume

c. Ke stažení guava-17.0.jar od http://mvnrepository.com/artifact/com.google.guava/guava/17.0

Streamování dat Twitteru pomocí Flume

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

Streamování dat Twitteru pomocí Flume

Okno příkazového řádku, kde flume načítá tweety-

Streamování dat Twitteru pomocí Flume

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/

Streamování dat Twitteru pomocí Flume