Video: HBW154 - Brewfather Walkthrough 2024
Några av de data som hamnar i Hadoop Distributed File System (HDFS) kan landa där via databaslastoperationer eller andra typer av batchprocesser, men vad om du vill fånga upp data som strömmar i dataöverföringar med hög genomströmning, till exempel programloggdata? Apache Flume är det nuvarande vanliga sättet att göra det enkelt, effektivt och säkert.
Apache Flume , ett annat toppnivåprojekt från Apache Software Foundation, är ett distribuerat system för att aggregera och flytta stora mängder strömmande data från olika källor till en centraliserad datalagring.
Ett annat sätt är Flume konstruerat för kontinuerlig intag av data i HDFS. Uppgifterna kan vara vilken typ av data som helst, men Flume är särskilt lämpad för hantering av loggdata, till exempel loggdata från webbservrar. Enheter av data som Flume processer kallas händelser ; Ett exempel på en händelse är en loggpost.
För att förstå hur Flume arbetar inom ett Hadoop-kluster måste du veta att Flume kör som en eller flera agenter, och att varje agent har tre pluggbara komponenter: källor, kanaler och diskbänkar:
-
Källor hämta data och skicka den till kanaler.
-
Kanaler hålla dataköer och fungera som ledningar mellan källor och sänkor, vilket är användbart när inkommande flödeshastighet överstiger utgående flödeshastighet.
-
Sink behandla data som togs från kanaler och leverera den till en destination, till exempel HDFS.
En agent måste ha minst en av varje komponent att köra, och varje agent ingår i sin egen instans av Java Virtual Machine (JVM).
En händelse som skrivs till en kanal av en källa tas inte bort från den kanalen tills en diskbänk tar bort den genom en transaktion. Om ett nätverksfel inträffar, behåller kanalerna sina händelser i kö tills sänkorna kan skriva dem till klustret. En minnes-kanal kan behandla händelser snabbt, men den är flyktig och kan inte återställas, medan en filbaserad kanal erbjuder uthållighet och kan återställas vid fel.
Varje agent kan ha flera källor, kanaler och sänkor, och även om en källa kan skriva till många kanaler kan en sink ta data från endast en kanal.
En agent är bara en JVM som kör Flume och sänkorna för varje agenten nod i Hadoop-klustern skickar data till samlarnoder , som sammanställer data från många agenter innan skriver det till HDFS, där det kan analyseras av andra Hadoop-verktyg.
Agenter kan läggas ihop så att diskbänken från en agent skickar data till källan från en annan agent.Avro, Apaches fjärranslutna call-and-serialization framework är det vanliga sättet att skicka data över ett nätverk med Flume, eftersom det fungerar som ett användbart verktyg för effektiv serialisering eller omvandling av data till ett kompakt binärt format.
I samband med Flume är kompatibilitet viktigt: En Avro-händelse kräver exempelvis en Avro-källa och en diskbänk måste leverera händelser som är lämpliga för destinationen.
Vad som gör den här stora kedjan av källor, kanaler och sänkor arbete är Flume Agent-konfigurationen, som lagras i en lokal textfil som är strukturerad som en Java-egenskapsfil. Du kan konfigurera flera agenter i samma fil. Titta på en provfil, som heter Flume-Agent. konfigurerar det att konfigurera en agent som heter shaman:
# Identifiera komponenterna på agent shaman: shaman. källor = netcat_s1 shaman. sänkor = hdfs_w1 shaman. kanaler = in-mem_c1 # Konfigurera källan: shaman. källor. netcat_s1. typ = netcat shaman. källor. netcat_s1. bind = localhost shaman. källor. netcat_s1. port = 44444 # Beskriv diskbänken: shaman. sänkor. hdfs_w1. typ = hdfs shaman. sänkor. hdfs_w1. HDFS. sökväg = hdfs: // shaman. sänkor. hdfs_w1. HDFS. writeFormat = Text shaman. sänkor. hdfs_w1. HDFS. fileType = DataStream # Konfigurera en kanal som buffrar händelser i minnet: shaman. kanaler. i-mem_c1. typ = minne shaman. kanaler. i-mem_c1. kapacitet = 20000 shaman. kanaler. i-mem_c1. transactionCapacity = 100 # Bind källan och sjunka till kanalen: shaman. källor. netcat_s1. kanaler = in-mem_c1 shaman. sänkor. hdfs_w1. kanaler = in-mem_c1
Konfigurationsfilen innehåller egenskaper för varje källa, kanal och synkronisering i agenten och anger hur de är anslutna. I det här exemplet har agent-shaman en källa som lyssnar på data (meddelanden till netcat) på port 44444, en kanal som buffrar händelsedata i minnet och en sink som loggar händelsedata till konsolen.
Den här konfigurationsfilen kunde ha använts för att definiera flera agenter; här konfigurerar du bara en för att hålla sakerna enkla.
För att starta agenten, använd ett skalskript som heter flume-ng, som finns i bin-katalogen i Flume-distributionen. Från kommandoraden, utfärda agenten kommandot, specificera sökvägen till konfigurationsfilen och agenten namn.
Följande provkommando startar Flume-agenten:
flume-ng-agent -f / -n shaman
Flume-agens logg ska ha poster som verifierar att källan, kanalen och sinken startade framgångsrikt.
För att testa konfigurationen kan du telnet till port 44444 från en annan terminal och skicka Flume en händelse genom att skriva in en godtycklig textsträng. Om allt går bra skickar den ursprungliga Flume-terminalen händelsen i ett loggmeddelande som du ska kunna se i agenten logg.