Video: How to Fix Oracle VM Virtual Box Error "Failed to open a session for the virtual machine ..." 2025
Nogle af de data, der ender i Hadoop Distributed File System (HDFS), kan lande der via databasebelastningsoperationer eller andre typer batchprocesser, men hvad hvis du vil fange de data, der flyder i high-throughput datastrømme, såsom applikationslog data? Apache Flume er den nuværende standard måde at gøre det nemt, effektivt og sikkert.
Apache Flume , et andet top-level-projekt fra Apache Software Foundation, er et distribueret system til aggregering og flytning af store mængder streamingdata fra forskellige kilder til en centraliseret datalager.
En anden måde, Flume er designet til kontinuerlig indtagelse af data i HDFS. Dataene kan være alle slags data, men Flume er særligt velegnet til håndtering af logdata, som f.eks. Logdata fra webservere. Enheder af de data, som Flume-processer kaldes, kaldes begivenheder ; et eksempel på en begivenhed er en logpost.
For at forstå, hvordan Flume arbejder inden for en Hadoop-klynge, skal du vide, at Flume kører som en eller flere agenter, og at hver agent har tre pluggbare komponenter: kilder, kanaler og dræn:
-
Kilder hent data og send det til kanaler.
-
Kanaler holder datakøer og fungerer som ledninger mellem kilder og dræn, hvilket er nyttigt, når den indgående strømningshastighed overstiger den udgående strømningshastighed.
-
Vask behandle data, der blev taget fra kanaler og levere det til en destination, som f.eks. HDFS.
En agent skal have mindst en af hver komponent til at køre, og hver agent er indeholdt i sin egen forekomst af Java Virtual Machine (JVM).
En begivenhed, der er skrevet til en kanal af en kilde, fjernes ikke fra den pågældende kanal, før en sink fjerner den via en transaktion. Hvis der opstår en netværksfejl, holder kanalerne deres begivenheder i kø, indtil drænene kan skrive dem til klyngen. En hukommelseskanal kan behandle hændelser hurtigt, men den er flygtig og kan ikke genoprettes, mens en filbaseret kanal tilbyder vedholdenhed og kan gendannes i tilfælde af fejl.
Hver agent kan have flere kilder, kanaler og dræn, og selvom en kilde kan skrive til mange kanaler, kan en sink tage data fra kun en kanal.
En agent er kun en JVM, der kører Flume, og drænene til hver agentknude i Hadoop-klyngen sender data til collector nodes , som samler data fra mange agenter før skrive det til HDFS, hvor det kan analyseres af andre Hadoop værktøjer.
Agenter kan kædes sammen, så sinken fra en agent sender data til kilden fra en anden agent.Avro, Apaches eksterne call-and-serialization framework, er den sædvanlige måde at sende data på tværs af et netværk med Flume, fordi det tjener som et nyttigt værktøj til effektiv serialisering eller transformation af data til et kompakt binært format.
I forbindelse med Flume er kompatibilitet vigtig: En Avro-begivenhed kræver f.eks. En Avro-kilde, og en vask skal levere arrangementer, der passer til destinationen.
Hvad gør denne store kæde af kilder, kanaler og dræn arbejder er Flume Agent-konfigurationen, som er gemt i en lokal tekstfil, der er struktureret som en Java-egenskabsfil. Du kan konfigurere flere agenter i samme fil. Se på en prøvefil, der hedder flume-agent. conf - det er indstillet til at konfigurere en agent med navnet shaman:
# Identificer komponenterne på agent shaman: shaman. kilder = netcat_s1 shaman. dræn = hdfs_w1 shaman. kanaler = in-mem_c1 # Konfigurer kilden: shaman. kilder. netcat_s1. type = netcat shaman. kilder. netcat_s1. bind = localhost shaman. kilder. netcat_s1. port = 44444 # Beskriv vasken: shaman. dræn. hdfs_w1. type = hdfs shaman. dræn. hdfs_w1. HDFS. sti = hdfs: // shaman. dræn. hdfs_w1. HDFS. writeFormat = Tekst shaman. dræn. hdfs_w1. HDFS. fileType = DataStream # Konfigurer en kanal, der bufferer hændelser i hukommelsen: shaman. kanaler. i-mem_c1. type = memory shaman. kanaler. i-mem_c1. kapacitet = 20000 shaman. kanaler. i-mem_c1. transactionCapacity = 100 # Bind kilden og sink til kanalen: shaman. kilder. netcat_s1. kanaler = in-mem_c1 shaman. dræn. hdfs_w1. kanaler = in-mem_c1
Konfigurationsfilen indeholder egenskaber for hver kilde, kanal og synke i agenten og angiver, hvordan de er tilsluttet. I dette eksempel har agent shaman en kilde, der lytter til data (meddelelser til netcat) på port 44444, en kanal, der buffer hændelsesdata i hukommelsen og en vask, der logger hændelsesdata til konsollen.
Denne konfigurationsfil kunne have været brugt til at definere flere agenter; Her konfigurerer du kun en til at holde tingene simple.
For at starte agenten skal du bruge et shell-script kaldet flume-ng, som er placeret i bin-mappen i Flume-distributionen. Fra kommandolinjen skal du udstede agentkommandoen, angive stien til konfigurationsfilen og agentnavnet.
Følgende prøvekommando starter Flume-agenten:
flume-ng-agent -f / -n shaman
Flume-agentens log skal have indgange, der verificerer, at kilden, kanalen og sinken startede med succes.
For at teste konfigurationen kan du telnet til port 44444 fra en anden terminal og sende Flume en begivenhed ved at indtaste en vilkårlig tekststreng. Hvis alt går godt, sender den originale Flume-terminal hændelsen i en logbesked, som du skal kunne se i agentens log.