Video: Barbara Block: Tagging tuna in the deep ocean 2024
Alcuni dei dati che finiscono nel file system distribuito Hadoop (HDFS) potrebbero atterrare lì tramite operazioni di caricamento del database o altri tipi di processi batch, ma cosa se si desidera acquisire i dati che fluiscono nei flussi di dati ad alta velocità, come i dati del registro delle applicazioni? Apache Flume è l'attuale modo standard per farlo in modo facile, efficiente e sicuro.
Apache Flume , un altro progetto di livello superiore di Apache Software Foundation, è un sistema distribuito per aggregare e spostare grandi quantità di dati di streaming da fonti diverse in un archivio dati centralizzato.
In altre parole, Flume è progettato per la continua ingestione di dati in HDFS. I dati possono essere qualsiasi tipo di dati, ma Flume è particolarmente adatto alla gestione dei dati di registro, come i dati di registro dai server web. Unità dei dati che i processi Flume sono chiamati eventi ; un esempio di un evento è un record di registro.
Per capire come Flume funziona all'interno di un cluster Hadoop, è necessario sapere che Flume viene eseguito come uno o più agenti e che ogni agente ha tre componenti collegabili: origini, canali e sink:
-
Le fonti recuperano i dati e li inviano ai canali.
-
I canali contengono code di dati e fungono da conduttori tra sorgenti e sink, il che è utile quando la portata del flusso in entrata supera la portata in uscita.
-
I sink elaborano i dati prelevati dai canali e li consegnano a una destinazione, come HDFS.
Un agente deve avere almeno uno di ciascun componente da eseguire e ogni agente è contenuto all'interno della propria istanza di Java Virtual Machine (JVM).
Un evento che viene scritto su un canale da un'origine non viene rimosso da quel canale finché un sink non lo rimuove tramite una transazione. Se si verifica un errore di rete, i canali mantengono in coda gli eventi finché i sink non possono scriverli nel cluster. Un canale in memoria può elaborare rapidamente gli eventi, ma è volatile e non può essere ripristinato, mentre un canale basato su file offre persistenza e può essere ripristinato in caso di errore.
Ogni agente può avere diverse fonti, canali e sink e sebbene una fonte possa scrivere su molti canali, un sink può ricevere dati da un solo canale.
Un agente è solo una JVM che sta eseguendo Flume, e i sink per ciascun nodo agente nel cluster Hadoop inviano dati a nodi di raccolta , che aggregano i dati di molti agenti prima scrivendolo su HDFS, dove può essere analizzato da altri strumenti di Hadoop.
Gli agenti possono essere concatenati insieme in modo che il sink di un agente invii i dati all'origine da un altro agente.Avro, il framework di chiamata e serializzazione remota di Apache, è il solito modo di inviare i dati su una rete con Flume, poiché funge da utile strumento per l'efficiente serializzazione o trasformazione dei dati in un formato binario compatto.
Nel contesto di Flume, la compatibilità è importante: un evento Avro richiede una fonte Avro, ad esempio, e un sink deve fornire eventi appropriati per la destinazione.
Ciò che rende questa grande catena di fonti, canali e sink funziona è la configurazione dell'agente Flume, che è memorizzata in un file di testo locale strutturato come un file di proprietà Java. È possibile configurare più agenti nello stesso file. Guarda un file di esempio, che si chiama flume-agent. conf: è impostato per configurare un agente denominato shaman:
# Identifica i componenti su shaman agent: shaman. fonti = sciamano netcat_s1. sinks = hdfs_w1 shaman. channels = in-mem_c1 # Configura la sorgente: shaman. fonti. netcat_s1. type = shacnet netcat. fonti. netcat_s1. bind = localhost shaman. fonti. netcat_s1. port = 44444 # Descrivi il sink: shaman. lavandini. hdfs_w1. type = hdfs shaman. lavandini. hdfs_w1. HDFS. percorso = hdfs: // sciamano. lavandini. hdfs_w1. HDFS. writeFormat = Text shaman. lavandini. hdfs_w1. HDFS. fileType = DataStream # Configura un canale che memorizza gli eventi in memoria: shaman. canali. in-mem_c1. type = memory shaman. canali. in-mem_c1. capacità = 20000 sciamani. canali. in-mem_c1. transactionCapacity = 100 # Bind l'origine e il sink al canale: shaman. fonti. netcat_s1. channels = in-mem_c1 shaman. lavandini. hdfs_w1. channels = in-mem_c1
Il file di configurazione include proprietà per ogni sorgente, canale e sink nell'agente e specifica come sono connessi. In questo esempio, agent shaman ha una fonte che ascolta i dati (messaggi a netcat) sulla porta 44444, un canale che memorizza i dati degli eventi in memoria e un sink che registra i dati degli eventi nella console.
Questo file di configurazione potrebbe essere stato utilizzato per definire diversi agenti; qui, ne stai configurando solo uno per mantenere le cose semplici.
Per avviare l'agente, utilizzare uno script di shell chiamato flume-ng, che si trova nella directory bin della distribuzione Flume. Dalla riga comandi, immettere il comando agent, specificando il percorso del file di configurazione e il nome dell'agent.
Il seguente comando di esempio avvia l'agente Flume:
agente flume-ng -f / -n shaman
Il registro dell'agente Flume deve contenere voci che verificano che l'origine, il canale e il sink siano stati avviati correttamente.
Per testare ulteriormente la configurazione, è possibile telnet alla porta 44444 da un altro terminale e inviare Flume a un evento immettendo una stringa di testo arbitraria. Se tutto va bene, il terminale Flume originale emetterà l'evento in un messaggio di log che dovresti essere in grado di vedere nel log dell'agente.