Video: HBW154 - Brewfather Walkthrough 2025
Noen av dataene som kommer opp i Hadoop Distributed File System (HDFS), kan lande det via databaselastoperasjoner eller andre typer batchprosesser, men hva hvis du vil fange opp dataene som strømmer i datastrømmer med høy ytelse, for eksempel programloggdata? Apache Flume er gjeldende standard måte å gjøre det enkelt, effektivt og trygt.
Apache Flume , et annet toppnivåprosjekt fra Apache Software Foundation, er et distribuert system for å aggregere og flytte store mengder strømdata fra forskjellige kilder til en sentralisert datalager.
En annen måte, Flume er designet for kontinuerlig inntak av data i HDFS. Dataene kan være noen form for data, men Flume er spesielt godt egnet til å håndtere loggdata, for eksempel loggdata fra webservere. Enheter av dataene som Flume prosesser kalles hendelser ; Et eksempel på en hendelse er en loggoppføring.
For å forstå hvordan Flume fungerer innenfor en Hadoop-klynge, må du vite at Flume kjører som en eller flere agenter, og at hver agent har tre pluggbare komponenter: kilder, kanaler og vasker:
-
Kilder hente data og send den til kanaler.
-
Kanaler holder datakøer og fungerer som ledninger mellom kilder og vasker, noe som er nyttig når innkommende strømningshastighet overstiger utgående strømningshastighet.
-
Vask behandle data som ble tatt fra kanaler og levere det til en destinasjon, for eksempel HDFS.
En agent må ha minst én av hver komponent å kjøre, og hver agent er inneholdt i sin egen forekomst av Java Virtual Machine (JVM).
En hendelse som er skrevet til en kanal av en kilde, fjernes ikke fra denne kanalen før en vaske fjerner den ved en transaksjon. Hvis det oppstår en nettverksfeil, holder kanalene sine hendelser i kø til synker kan skrive dem til klyngen. En minnekanal kan behandle hendelser raskt, men den er flyktig og kan ikke gjenopprettes, mens en filbasert kanal gir utholdenhet og kan gjenopprettes ved feil.
Hver agent kan ha flere kilder, kanaler og vasker, og selv om en kilde kan skrive til mange kanaler, kan en vask ta data fra bare en kanal.
En agent er bare en JVM som kjører Flume, og dunkene for hver agentknutepunkt i Hadoop-klyngen sender data til samlernoder , som samlet dataene fra mange agenter før skriver den til HDFS, der den kan analyseres av andre Hadoop-verktøy.
Agenter kan kobles sammen slik at vasken fra en agent sender data til kilden fra en annen agent.Avro, Apaches eksterne call-and-serialization rammeverk, er den vanlige måten å sende data over et nettverk med Flume, fordi det tjener som et nyttig verktøy for effektiv serialisering eller transformasjon av data til et kompakt binært format.
I sammenheng med Flume er kompatibilitet viktig: En Avro-begivenhet krever for eksempel en Avro-kilde, og en vask må levere hendelser som passer til destinasjonen.
Hva gjør denne flotte kjeden av kilder, kanaler og vasker arbeid er Flume-agentkonfigurasjonen, som er lagret i en lokal tekstfil som er strukturert som en Java-egenskapsfil. Du kan konfigurere flere agenter i samme fil. Se på en prøvefil, som heter flume-agent. conf - det er satt til å konfigurere en agent som heter shaman:
# Identifiser komponentene på agent shaman: shaman. kilder = netcat_s1 shaman. vasker = hdfs_w1 shaman. kanaler = in-mem_c1 # Konfigurer kilden: sjaman. kilder. netcat_s1. type = netcat shaman. kilder. netcat_s1. bind = localhost shaman. kilder. netcat_s1. port = 44444 # Beskriv vasken: sjaman. synker. hdfs_w1. type = hdfs shaman. synker. hdfs_w1. hdfs. sti = hdfs: // shaman. synker. hdfs_w1. hdfs. writeFormat = Tekst shaman. synker. hdfs_w1. hdfs. fileType = DataStream # Konfigurer en kanal som buffer hendelser i minnet: shaman. kanaler. i-mem_c1. type = minne shaman. kanaler. i-mem_c1. kapasitet = 20000 shaman. kanaler. i-mem_c1. transactionCapacity = 100 # Bind kilden og synke til kanalen: shaman. kilder. netcat_s1. kanaler = in-mem_c1 shaman. synker. hdfs_w1. kanaler = in-mem_c1
Konfigurasjonsfilen inneholder egenskaper for hver kilde, kanal og synke i agenten og angir hvordan de er koblet til. I dette eksemplet har agent shaman en kilde som lytter etter data (meldinger til netcat) på port 44444, en kanal som buffer hendelsesdata i minnet, og en vask som logger hendelsesdata til konsollen.
Denne konfigurasjonsfilen kunne ha blitt brukt til å definere flere agenter; Her konfigurerer du bare en for å holde ting enkelt.
For å starte agenten, bruk et skalskript som heter flume-ng, som ligger i bin-katalogen i Flume-distribusjonen. Fra kommandolinjen, utsted agentkommandoen, angi banen til konfigurasjonsfilen og agentnavnet.
Følgende utvalgskommando starter Flume-agenten:
flume-ng-agent -f / -n sjaman
Flume-agentens logg skal ha oppføringer som bekrefter at kilden, kanalen og sinken startet vellykket.
For å teste konfigurasjonen kan du telnet til port 44444 fra en annen terminal og sende Flume en begivenhet ved å skrive inn en vilkårlig tekststreng. Hvis alt går bra, sender den opprinnelige Flume-terminalen hendelsen i en loggmelding som du skal kunne se i agentens logg.
