Apache Flume - Guida rapida

Cos'è Flume?

Apache Flume è uno strumento / servizio / meccanismo di importazione dati per la raccolta di aggregazione e trasporto di grandi quantità di dati in streaming come file di registro, eventi (ecc.) Da varie fonti a un archivio dati centralizzato.

Flume è uno strumento altamente affidabile, distribuito e configurabile. È progettato principalmente per copiare i dati di streaming (dati di registro) da vari server Web a HDFS.

Applicazioni di Flume

Supponiamo che un'applicazione web di e-commerce desideri analizzare il comportamento del cliente da una determinata regione. A tal fine, è necessario spostare i dati di registro disponibili in Hadoop per l'analisi. Qui, Apache Flume viene in nostro soccorso.

Flume viene utilizzato per spostare i dati di registro generati dai server delle applicazioni in HDFS a una velocità maggiore.

Vantaggi di Flume

Ecco i vantaggi dell'utilizzo di Flume:

  • Utilizzando Apache Flume possiamo archiviare i dati in uno qualsiasi degli archivi centralizzati (HBase, HDFS).

  • Quando la velocità dei dati in entrata supera la velocità con cui i dati possono essere scritti nella destinazione, Flume funge da mediatore tra i produttori di dati e gli archivi centralizzati e fornisce un flusso costante di dati tra di loro.

  • Flume fornisce la caratteristica di contextual routing.

  • Le transazioni in Flume sono basate sul canale in cui vengono mantenute due transazioni (un mittente e un destinatario) per ogni messaggio. Garantisce una consegna affidabile dei messaggi.

  • Flume è affidabile, a tolleranza di errore, scalabile, gestibile e personalizzabile.

Caratteristiche di Flume

Alcune delle caratteristiche notevoli di Flume sono le seguenti:

  • Flume acquisisce i dati di registro da più server Web in un archivio centralizzato (HDFS, HBase) in modo efficiente.

  • Utilizzando Flume, possiamo ottenere i dati da più server immediatamente in Hadoop.

  • Insieme ai file di registro, Flume viene utilizzato anche per importare enormi volumi di dati sugli eventi prodotti da siti di social networking come Facebook e Twitter e siti di e-commerce come Amazon e Flipkart.

  • Flume supporta un ampio set di sorgenti e tipi di destinazioni.

  • Flume supporta flussi multi-hop, flussi fan-in fan-out, routing contestuale, ecc.

  • Flume può essere scalato orizzontalmente.

Big Data,come sappiamo, è una raccolta di grandi set di dati che non possono essere elaborati utilizzando le tecniche di calcolo tradizionali. I Big Data, se analizzati, danno risultati preziosi.Hadoop è un framework open-source che consente di archiviare ed elaborare Big Data in un ambiente distribuito su cluster di computer utilizzando semplici modelli di programmazione.

Streaming / dati di registro

In generale, la maggior parte dei dati che devono essere analizzati verrà prodotta da varie fonti di dati come server di applicazioni, siti di social networking, server cloud e server aziendali. Questi dati avranno la forma dilog files e events.

Log file - In generale, un file di registro è un file fileche elenca eventi / azioni che si verificano in un sistema operativo. Ad esempio, i server web elencano ogni richiesta fatta al server nei file di registro.

Raccogliendo tali dati di registro, possiamo ottenere informazioni su:

  • le prestazioni dell'applicazione e individuare vari guasti software e hardware.
  • il comportamento degli utenti e ottenere migliori informazioni aziendali.

Il metodo tradizionale per trasferire i dati nel sistema HDFS consiste nell'usare l'estensione putcomando. Vediamo come utilizzare il fileput comando.

HDFS put Command

La sfida principale nella gestione dei dati di registro è lo spostamento di questi registri prodotti da più server nell'ambiente Hadoop.

Hadoop File System Shellfornisce i comandi per inserire dati in Hadoop e leggerli. Puoi inserire dati in Hadoop utilizzando ilput comando come mostrato di seguito.

$ Hadoop fs –put /path of the required file  /path in HDFS where to save the file

Problema con il comando put

Possiamo usare il file putcomando di Hadoop per trasferire i dati da queste origini a HDFS. Ma soffre dei seguenti inconvenienti:

  • Utilizzando put comando, possiamo trasferire only one file at a timementre i generatori di dati generano dati a una velocità molto più elevata. Poiché l'analisi effettuata sui dati più vecchi è meno accurata, è necessario disporre di una soluzione per trasferire i dati in tempo reale.

  • Se usiamo putcomando, i dati devono essere impacchettati e dovrebbero essere pronti per il caricamento. Poiché i server web generano dati continuamente, è un compito molto difficile.

Ciò di cui abbiamo bisogno qui è una soluzione che possa superare gli inconvenienti di put comandare e trasferire i "dati di streaming" dai generatori di dati agli archivi centralizzati (soprattutto HDFS) con minor ritardo.

Problema con HDFS

In HDFS, il file esiste come una voce di directory e la lunghezza del file sarà considerata pari a zero fino alla chiusura. Ad esempio, se una sorgente sta scrivendo dati in HDFS e la rete è stata interrotta durante l'operazione (senza chiudere il file), i dati scritti nel file andranno persi.

Pertanto abbiamo bisogno di un sistema affidabile, configurabile e manutenibile per trasferire i dati di registro in HDFS.

Note- Nel file system POSIX, ogni volta che accediamo a un file (ad esempio eseguendo un'operazione di scrittura), altri programmi possono ancora leggere questo file (almeno la parte salvata del file). Questo perché il file esiste sul disco prima che venga chiuso.

Soluzioni disponibili

Per inviare dati in streaming (file di log, eventi, ecc.) Da varie fonti a HDFS, abbiamo a nostra disposizione i seguenti strumenti:

Scriba di Facebook

Scribe è uno strumento estremamente popolare utilizzato per aggregare e trasmettere i dati di registro. È progettato per scalare a un numero molto elevato di nodi ed essere robusto per i guasti di rete e di nodo.

Apache Kafka

Kafka è stato sviluppato da Apache Software Foundation. È un broker di messaggi open source. Utilizzando Kafka, possiamo gestire feed con velocità effettiva elevata e bassa latenza.

Apache Flume

Apache Flume è uno strumento / servizio / meccanismo di importazione dati per la raccolta di aggregazione e trasporto di grandi quantità di dati in streaming come dati di registro, eventi (ecc.) Da vari webserves a un archivio dati centralizzato.

È uno strumento altamente affidabile, distribuito e configurabile progettato principalmente per trasferire dati in streaming da varie origini a HDFS.

In questo tutorial, discuteremo in dettaglio come utilizzare Flume con alcuni esempi.

La figura seguente mostra l'architettura di base di Flume. Come mostrato nell'illustrazione,data generators (come Facebook, Twitter) generano dati che vengono raccolti dai singoli Flume agentscorrendo su di loro. Successivamente, adata collector (che è anche un agente) raccoglie i dati dagli agenti che vengono aggregati e inseriti in un archivio centralizzato come HDFS o HBase.

Evento Flume

Un event è l'unità di base dei dati trasportati all'interno Flume. Contiene un payload di array di byte che deve essere trasportato dall'origine alla destinazione accompagnato da intestazioni opzionali. Un tipico evento Flume avrebbe la seguente struttura:

Flume Agent

Un agentè un processo daemon indipendente (JVM) in Flume. Riceve i dati (eventi) dai client o da altri agenti e li inoltra alla destinazione successiva (sink o agent). Flume può avere più di un agente. Il diagramma seguente rappresenta un fileFlume Agent

Come mostrato nel diagramma, un Flume Agent contiene tre componenti principali, vale a dire, source, channel, e sink.

fonte

UN source è il componente di un agente che riceve i dati dai generatori di dati e li trasferisce a uno o più canali sotto forma di eventi Flume.

Apache Flume supporta diversi tipi di sorgenti e ogni sorgente riceve eventi da un generatore di dati specificato.

Example - Fonte Avro, fonte Thrift, fonte Twitter 1% ecc.

Canale

UN channelè un archivio temporaneo che riceve gli eventi dall'origine e li bufferizza fino a quando non vengono consumati dai sink. Funge da ponte tra le sorgenti e i lavandini.

Questi canali sono completamente transazionali e possono funzionare con qualsiasi numero di sorgenti e sink.

Example - Canale JDBC, canale del file system, canale di memoria, ecc.

Lavello

UN sinkmemorizza i dati in archivi centralizzati come HBase e HDFS. Consuma i dati (eventi) dai canali e li consegna alla destinazione. La destinazione del lavandino potrebbe essere un altro agente o i negozi centrali.

Example - Dissipatore HDFS

Note- Un agente flume può avere più sorgenti, pozzi e canali. Abbiamo elencato tutte le sorgenti, i sink, i canali supportati nel capitolo Configurazione di Flume di questo tutorial.

Componenti aggiuntivi di Flume Agent

Ciò di cui abbiamo discusso sopra sono i componenti primitivi dell'agente. Oltre a questo, abbiamo alcuni componenti in più che svolgono un ruolo fondamentale nel trasferimento degli eventi dal generatore di dati agli archivi centralizzati.

Intercettori

Gli intercettatori vengono utilizzati per alterare / ispezionare gli eventi dei canali che vengono trasferiti tra la sorgente e il canale.

Selettori di canale

Questi sono usati per determinare quale canale deve essere scelto per trasferire i dati in caso di più canali. Esistono due tipi di selettori di canale:

  • Default channel selectors - Questi sono anche noti come selettori di canale di replica, replicano tutti gli eventi in ogni canale.

  • Multiplexing channel selectors - Questi decidono il canale per inviare un evento in base all'indirizzo nell'intestazione di quell'evento.

Processori Sink

Questi sono usati per richiamare un particolare sink dal gruppo di sink selezionato. Questi vengono utilizzati per creare percorsi di failover per i sink o eventi di bilanciamento del carico su più sink da un canale.

Flume è un framework utilizzato per spostare i dati di registro in HDFS. Generalmente eventi e dati di registro vengono generati dai server di registro e questi server hanno agenti Flume in esecuzione su di essi. Questi agenti ricevono i dati dai generatori di dati.

I dati in questi agenti verranno raccolti da un nodo intermedio noto come Collector. Proprio come gli agenti, a Flume possono esserci più collezionisti.

Infine, i dati di tutti questi raccoglitori verranno aggregati e inviati a un archivio centralizzato come HBase o HDFS. Il diagramma seguente spiega il flusso di dati in Flume.

Flusso multi-hop

All'interno di Flume possono esserci più agenti e prima di raggiungere la destinazione finale, un evento può viaggiare attraverso più di un agente. Questo è noto comemulti-hop flow.

Flusso a ventaglio

Il flusso di dati da una sorgente a più canali è noto come fan-out flow. È di due tipi:

  • Replicating - Il flusso di dati in cui i dati verranno replicati in tutti i canali configurati.

  • Multiplexing - Il flusso di dati in cui i dati verranno inviati a un canale selezionato menzionato nell'intestazione dell'evento.

Flusso fan-in

Il flusso di dati in cui i dati verranno trasferiti da molte origini a un canale è noto come fan-in flow.

Gestione dei guasti

In Flume, per ogni evento, avvengono due transazioni: una al mittente e una al destinatario. Il mittente invia eventi al destinatario. Subito dopo aver ricevuto i dati, il destinatario effettua la propria transazione e invia un segnale di "ricezione" al mittente. Dopo aver ricevuto il segnale, il mittente impegna la sua transazione. (Il mittente non eseguirà il commit della transazione finché non riceve un segnale dal destinatario.)

Abbiamo già discusso dell'architettura di Flume nel capitolo precedente. In questo capitolo, vediamo come scaricare e configurare Apache Flume.

Prima di procedere oltre, è necessario disporre di un ambiente Java nel sistema. Quindi, prima di tutto, assicurati di avere Java installato nel tuo sistema. Per alcuni esempi in questo tutorial, abbiamo utilizzato Hadoop HDFS (come sink). Pertanto, ti consigliamo di installare Hadoop insieme a Java. Per raccogliere maggiori informazioni, segui il link -http://www.tutorialspoint.com/hadoop/hadoop_enviornment_setup.htm

Installazione di Flume

Prima di tutto, scarica l'ultima versione del software Apache Flume dal sito web https://flume.apache.org/.

Passo 1

Apri il sito web. Clicca suldownloadlink sul lato sinistro della home page. Ti porterà alla pagina di download di Apache Flume.

Passo 2

Nella pagina Download, puoi vedere i collegamenti per i file binari e sorgenti di Apache Flume. Fare clic sul collegamento apache-flume-1.6.0-bin.tar.gz

Verrai reindirizzato a un elenco di mirror in cui puoi avviare il download facendo clic su uno di questi mirror. Allo stesso modo, puoi scaricare il codice sorgente di Apache Flume facendo clic su apache-flume-1.6.0-src.tar.gz .

Passaggio 3

Creare una directory con il nome Flume nella stessa directory in cui si trovano le directory di installazione di Hadoop, HBasee altri software sono stati installati (se ne è già stato installato uno) come mostrato di seguito.

$ mkdir Flume

Passaggio 4

Estrarre i file tar scaricati come mostrato di seguito.

$ cd Downloads/ 
$ tar zxvf apache-flume-1.6.0-bin.tar.gz  
$ tar zxvf apache-flume-1.6.0-src.tar.gz

Passaggio 5

Sposta il contenuto di apache-flume-1.6.0-bin.tar file in Flumedirectory creata in precedenza come mostrato di seguito. (Supponiamo di aver creato la directory Flume nell'utente locale denominato Hadoop.)

$ mv apache-flume-1.6.0-bin.tar/* /home/Hadoop/Flume/

Configurazione di Flume

Per configurare Flume, dobbiamo modificare tre file e cioè, flume-env.sh, flumeconf.properties, e bash.rc.

Impostazione del percorso / classpath

Nel .bashrc file, imposta la cartella home, il percorso e il classpath per Flume come mostrato di seguito.

conf Folder

Se apri il file conf cartella di Apache Flume, avrai i seguenti quattro file:

  • flume-conf.properties.template,
  • flume-env.sh.template,
  • flume-env.ps1.template e
  • log4j.properties.

Ora rinomina

  • flume-conf.properties.template file come flume-conf.properties e

  • flume-env.sh.template come flume-env.sh

flume-env.sh

Aperto flume-env.sh file e imposta il file JAVA_Home nella cartella in cui è stato installato Java nel sistema.

Verifica dell'installazione

Verificare l'installazione di Apache Flume sfogliando il file bin cartella e digitando il seguente comando.

$ ./flume-ng

Se hai installato correttamente Flume, riceverai un prompt di aiuto di Flume come mostrato di seguito.

Dopo aver installato Flume, dobbiamo configurarlo utilizzando il file di configurazione che ha un file delle proprietà Java key-value pairs. Abbiamo bisogno di passare valori alle chiavi nel file.

Nel file di configurazione Flume, dobbiamo:

  • Assegna un nome ai componenti dell'agente corrente.
  • Descrivi / Configura l'origine.
  • Descrivi / Configura il lavandino.
  • Descrivi / Configura il canale.
  • Associa la sorgente e il sink al canale.

Di solito possiamo avere più agenti a Flume. Possiamo differenziare ogni agente utilizzando un nome univoco. E usando questo nome, dobbiamo configurare ogni agente.

Denominazione dei componenti

Prima di tutto, è necessario nominare / elencare i componenti come sorgenti, sink e canali dell'agente, come mostrato di seguito.

agent_name.sources = source_name 
agent_name.sinks = sink_name 
agent_name.channels = channel_name

Flume supporta varie sorgenti, sink e canali. Sono elencati nella tabella riportata di seguito.

Fonti Canali Affonda
  • Avro Source
  • Fonte di risparmio
  • Exec Source
  • Fonte JMS
  • Origine directory di spooling
  • Twitter 1% Firehose Fonte
  • Kafka Source
  • NetCat Source
  • Origine generatore di sequenze
  • Fonti Syslog
  • Syslog TCP Source
  • Origine TCP Syslog multiporta
  • Syslog UDP Source
  • Origine HTTP
  • Fonte di stress
  • Fonti legacy
  • Thrift Legacy Source
  • Origine personalizzata
  • Scribe Source
  • Canale di memoria
  • Canale JDBC
  • Canale Kafka
  • Canale file
  • Spillable Memory Channel
  • Pseudo Transaction Channel
  • Lavello HDFS
  • Hive Sink
  • Logger Sink
  • Avro Sink
  • Lavandino dell'usato
  • Lavello IRC
  • File Roll Sink
  • Null Sink
  • HBaseSink
  • AsyncHBaseSink
  • MorphlineSolrSink
  • ElasticSearchSink
  • Kite Dataset Sink
  • Kafka Sink

Puoi usarne uno qualsiasi. Ad esempio, se stai trasferendo i dati di Twitter utilizzando l'origine Twitter tramite un canale di memoria a un sink HDFS e l'ID del nome dell'agenteTwitterAgent, poi

TwitterAgent.sources = Twitter 
TwitterAgent.channels = MemChannel 
TwitterAgent.sinks = HDFS

Dopo aver elencato i componenti dell'agente, è necessario descrivere le sorgenti, i sink e i canali fornendo valori alle loro proprietà.

Descrivere la fonte

Ogni sorgente avrà un elenco separato di proprietà. La proprietà denominata "tipo" è comune a tutte le sorgenti e viene utilizzata per specificare il tipo di sorgente che stiamo utilizzando.

Insieme alla proprietà "tipo", è necessario fornire i valori di tutti i file required proprietà di una particolare sorgente per configurarla, come mostrato di seguito.

agent_name.sources. source_name.type = value 
agent_name.sources. source_name.property2 = value 
agent_name.sources. source_name.property3 = value

Ad esempio, se consideriamo il twitter source, In seguito sono le proprietà a cui bisogna fornire i valori per configurarlo.

TwitterAgent.sources.Twitter.type = Twitter (type name) 
TwitterAgent.sources.Twitter.consumerKey =  
TwitterAgent.sources.Twitter.consumerSecret = 
TwitterAgent.sources.Twitter.accessToken =   
TwitterAgent.sources.Twitter.accessTokenSecret =

Descrivere il lavandino

Proprio come l'origine, ogni sink avrà un elenco separato di proprietà. La proprietà denominata "tipo" è comune a tutti i sink e viene utilizzata per specificare il tipo di sink che stiamo utilizzando. Insieme alla proprietà "tipo", è necessario fornire valori a tutti i filerequired proprietà di un particolare sink per configurarlo, come mostrato di seguito.

agent_name.sinks. sink_name.type = value 
agent_name.sinks. sink_name.property2 = value 
agent_name.sinks. sink_name.property3 = value

Ad esempio, se consideriamo HDFS sink, In seguito sono le proprietà a cui bisogna fornire i valori per configurarlo.

TwitterAgent.sinks.HDFS.type = hdfs (type name)  
TwitterAgent.sinks.HDFS.hdfs.path = HDFS directory’s Path to store the data

Descrivere il canale

Flume fornisce vari canali per trasferire dati tra sorgenti e sink. Pertanto, insieme alle sorgenti e ai canali, è necessario descrivere il canale utilizzato nell'agente.

Per descrivere ogni canale, è necessario impostare le proprietà richieste, come mostrato di seguito.

agent_name.channels.channel_name.type = value 
agent_name.channels.channel_name. property2 = value 
agent_name.channels.channel_name. property3 = value

Ad esempio, se consideriamo memory channel, In seguito sono le proprietà a cui bisogna fornire i valori per configurarlo.

TwitterAgent.channels.MemChannel.type = memory (type name)

Associazione della sorgente e del lavandino al canale

Poiché i canali collegano sorgenti e sink, è necessario associarli entrambi al canale, come mostrato di seguito.

agent_name.sources.source_name.channels = channel_name 
agent_name.sinks.sink_name.channels = channel_name

L'esempio seguente mostra come associare le sorgenti e i sink a un canale. Qui, consideriamotwitter source, memory channel, e HDFS sink.

TwitterAgent.sources.Twitter.channels = MemChannel
TwitterAgent.sinks.HDFS.channels = MemChannel

Avvio di un agente Flume

Dopo la configurazione, dobbiamo avviare l'agente Flume. È fatto come segue:

$ bin/flume-ng agent --conf ./conf/ -f conf/twitter.conf 
Dflume.root.logger=DEBUG,console -n TwitterAgent

dove -

  • agent - Comando per avviare l'agente Flume

  • --conf ,-c<conf> - Usa il file di configurazione nella directory conf

  • -f<file> - Specifica un percorso del file di configurazione, se mancante

  • --name, -n <name> - Nome dell'agente Twitter

  • -D property =value - Imposta un valore della proprietà di sistema Java.

Utilizzando Flume, possiamo recuperare i dati da vari servizi e trasportarli in archivi centralizzati (HDFS e HBase). Questo capitolo spiega come recuperare i dati dal servizio Twitter e archiviarli in HDFS utilizzando Apache Flume.

Come discusso in Flume Architecture, un server web genera dati di log e questi dati vengono raccolti da un agente in Flume. Il canale memorizza questi dati in un sink, che alla fine li invia agli archivi centralizzati.

Nell'esempio fornito in questo capitolo, creeremo un'applicazione e ne ricaveremo i tweet utilizzando il sorgente Twitter sperimentale fornito da Apache Flume. Useremo il canale di memoria per memorizzare questi tweet e il sink HDFS per inserire questi tweet nell'HDFS.

Per recuperare i dati di Twitter, dovremo seguire i passaggi indicati di seguito:

  • Crea un'applicazione Twitter
  • Installa / avvia HDFS
  • Configura Flume

Creazione di un'applicazione Twitter

Per ottenere i tweet da Twitter, è necessario creare un'applicazione Twitter. Segui i passaggi indicati di seguito per creare un'applicazione Twitter.

Passo 1

Per creare un'applicazione Twitter, fare clic sul seguente collegamento https://apps.twitter.com/. Accedi al tuo account Twitter. Avrai una finestra di gestione delle applicazioni Twitter in cui puoi creare, eliminare e gestire le app Twitter.

Passo 2

Clicca sul Create New Apppulsante. Verrai reindirizzato ad una finestra dove otterrai un modulo di domanda in cui dovrai inserire i tuoi dati per creare l'App. Durante l'inserimento dell'indirizzo del sito web, fornire il pattern URL completo, ad esempio,http://example.com.

Passaggio 3

Compila i dettagli, accetta il Developer Agreement al termine, fare clic sul file Create your Twitter application buttonche si trova in fondo alla pagina. Se tutto va bene, verrà creata un'app con i dettagli forniti come mostrato di seguito.

Passaggio 4

Sotto keys and Access Tokens scheda nella parte inferiore della pagina, puoi osservare un pulsante denominato Create my access token. Fare clic su di esso per generare il token di accesso.

Passaggio 5

Infine, fai clic sul file Test OAuthpulsante che si trova nella parte superiore destra della pagina. Questo porterà a una pagina che mostra il tuoConsumer key, Consumer secret, Access token, e Access token secret. Copia questi dettagli. Questi sono utili per configurare l'agente in Flume.

Avvio di HDFS

Dato che stiamo archiviando i dati in HDFS, dobbiamo installare / verificare Hadoop. Avvia Hadoop e crea una cartella al suo interno per archiviare i dati Flume. Seguire i passaggi indicati di seguito prima di configurare Flume.

Passaggio 1: installa / verifica Hadoop

Installa Hadoop . Se Hadoop è già installato nel tuo sistema, verifica l'installazione utilizzando il comando della versione di Hadoop, come mostrato di seguito.

$ hadoop version

Se il tuo sistema contiene Hadoop e se hai impostato la variabile di percorso, otterrai il seguente output:

Hadoop 2.6.0 
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r 
e3496499ecb8d220fba99dc5ed4c99c8f9e33bb1 
Compiled by jenkins on 2014-11-13T21:10Z 
Compiled with protoc 2.5.0 
From source with checksum 18e43357c8f927c0695f1e9522859d6a 
This command was run using /home/Hadoop/hadoop/share/hadoop/common/hadoop-common-2.6.0.jar

Passaggio 2: avvio di Hadoop

Sfoglia il file sbin directory di Hadoop e avvia filato e Hadoop dfs (file system distribuito) come mostrato di seguito.

cd /$Hadoop_Home/sbin/ 
$ start-dfs.sh 
localhost: starting namenode, logging to
   /home/Hadoop/hadoop/logs/hadoop-Hadoop-namenode-localhost.localdomain.out 
localhost: starting datanode, logging to 
   /home/Hadoop/hadoop/logs/hadoop-Hadoop-datanode-localhost.localdomain.out 
Starting secondary namenodes [0.0.0.0] 
starting secondarynamenode, logging to 
   /home/Hadoop/hadoop/logs/hadoop-Hadoop-secondarynamenode-localhost.localdomain.out
  
$ start-yarn.sh 
starting yarn daemons 
starting resourcemanager, logging to 
   /home/Hadoop/hadoop/logs/yarn-Hadoop-resourcemanager-localhost.localdomain.out 
localhost: starting nodemanager, logging to 
   /home/Hadoop/hadoop/logs/yarn-Hadoop-nodemanager-localhost.localdomain.out

Passaggio 3: creare una directory in HDFS

In Hadoop DFS, puoi creare directory utilizzando il comando mkdir. Sfoglialo e crea una directory con il nometwitter_data nel percorso richiesto come mostrato di seguito.

$cd /$Hadoop_Home/bin/ 
$ hdfs dfs -mkdir hdfs://localhost:9000/user/Hadoop/twitter_data

Configurazione di Flume

Dobbiamo configurare l'origine, il canale e il sink utilizzando il file di configurazione in confcartella. L'esempio fornito in questo capitolo utilizza una fonte sperimentale fornita da Apache Flume denominataTwitter 1% Firehose Canale di memoria e sink HDFS.

Twitter 1% Fonte Firehose

Questa fonte è altamente sperimentale. Si collega al Twitter Firehose di esempio dell'1% utilizzando l'API di streaming e scarica continuamente i tweet, li converte in formato Avro e invia eventi Avro a un sink Flume a valle.

Otterremo questa fonte per impostazione predefinita insieme all'installazione di Flume. Iljar i file corrispondenti a questa origine possono essere posizionati nel file lib cartella come mostrato di seguito.

Impostazione del classpath

Impostare il classpath variabile al lib cartella di Flume in Flume-env.sh file come mostrato di seguito.

export CLASSPATH=$CLASSPATH:/FLUME_HOME/lib/*

Questa fonte ha bisogno di dettagli come Consumer key, Consumer secret, Access token, e Access token secretdi un'applicazione Twitter. Durante la configurazione di questa sorgente, è necessario fornire valori alle seguenti proprietà:

  • Channels

  • Source type : org.apache.flume.source.twitter.TwitterSource

  • consumerKey - La chiave utente OAuth

  • consumerSecret - Segreto del consumatore OAuth

  • accessToken - Token di accesso OAuth

  • accessTokenSecret - Token segreto OAuth

  • maxBatchSize- Numero massimo di messaggi Twitter che dovrebbero essere in un batch Twitter. Il valore predefinito è 1000 (opzionale).

  • maxBatchDurationMillis- Numero massimo di millisecondi da attendere prima di chiudere un batch. Il valore predefinito è 1000 (opzionale).

Canale

Stiamo usando il canale di memoria. Per configurare il canale di memoria, è necessario fornire un valore al tipo di canale.

  • type- Contiene il tipo di canale. Nel nostro esempio, il tipo èMemChannel.

  • Capacity- È il numero massimo di eventi memorizzati nel canale. Il suo valore predefinito è 100 (opzionale).

  • TransactionCapacity- È il numero massimo di eventi che il canale accetta o invia. Il suo valore predefinito è 100 (opzionale).

Lavello HDFS

Questo sink scrive i dati nell'HDFS. Per configurare questo sink, è necessario fornire i seguenti dettagli.

  • Channel

  • type - hdfs

  • hdfs.path - il percorso della directory in HDFS in cui devono essere archiviati i dati.

E possiamo fornire alcuni valori opzionali basati sullo scenario. Di seguito sono riportate le proprietà opzionali del sink HDFS che stiamo configurando nella nostra applicazione.

  • fileType - Questo è il formato file richiesto del nostro file HDFS. SequenceFile, DataStream e CompressedStreamsono i tre tipi disponibili con questo flusso. Nel nostro esempio, stiamo usando ilDataStream.

  • writeFormat - Potrebbe essere testo o scrivibile.

  • batchSize- È il numero di eventi scritti in un file prima che venga scaricato nell'HDFS. Il suo valore predefinito è 100.

  • rollsize- È la dimensione del file per attivare un rotolo. Il valore predefinito è 100.

  • rollCount- È il numero di eventi scritti nel file prima che venga eseguito il rollio. Il suo valore predefinito è 10.

Esempio: file di configurazione

Di seguito è riportato un esempio del file di configurazione. Copia questo contenuto e salva con nometwitter.conf nella cartella conf di Flume.

# Naming the components on the current agent. 
TwitterAgent.sources = Twitter 
TwitterAgent.channels = MemChannel 
TwitterAgent.sinks = HDFS
  
# Describing/Configuring the source 
TwitterAgent.sources.Twitter.type = org.apache.flume.source.twitter.TwitterSource
TwitterAgent.sources.Twitter.consumerKey = Your OAuth consumer key
TwitterAgent.sources.Twitter.consumerSecret = Your OAuth consumer secret 
TwitterAgent.sources.Twitter.accessToken = Your OAuth consumer key access token 
TwitterAgent.sources.Twitter.accessTokenSecret = Your OAuth consumer key access token secret 
TwitterAgent.sources.Twitter.keywords = tutorials point,java, bigdata, mapreduce, mahout, hbase, nosql
  
# Describing/Configuring the sink 

TwitterAgent.sinks.HDFS.type = hdfs 
TwitterAgent.sinks.HDFS.hdfs.path = hdfs://localhost:9000/user/Hadoop/twitter_data/
TwitterAgent.sinks.HDFS.hdfs.fileType = DataStream 
TwitterAgent.sinks.HDFS.hdfs.writeFormat = Text 
TwitterAgent.sinks.HDFS.hdfs.batchSize = 1000
TwitterAgent.sinks.HDFS.hdfs.rollSize = 0 
TwitterAgent.sinks.HDFS.hdfs.rollCount = 10000 
 
# Describing/Configuring the channel 
TwitterAgent.channels.MemChannel.type = memory 
TwitterAgent.channels.MemChannel.capacity = 10000 
TwitterAgent.channels.MemChannel.transactionCapacity = 100
  
# Binding the source and sink to the channel 
TwitterAgent.sources.Twitter.channels = MemChannel
TwitterAgent.sinks.HDFS.channel = MemChannel

Esecuzione

Sfoglia la home directory di Flume ed esegui l'applicazione come mostrato di seguito.

$ cd $FLUME_HOME 
$ bin/flume-ng agent --conf ./conf/ -f conf/twitter.conf 
Dflume.root.logger=DEBUG,console -n TwitterAgent

Se tutto va bene, inizierà lo streaming dei tweet in HDFS. Di seguito è riportata l'istantanea della finestra del prompt dei comandi durante il recupero dei tweet.

Verifica di HDFS

È possibile accedere all'interfaccia utente Web di amministrazione di Hadoop utilizzando l'URL fornito di seguito.

http://localhost:50070/

Fare clic sul menu a discesa denominato Utilitiessul lato destro della pagina. Puoi vedere due opzioni come mostrato nell'istantanea riportata di seguito.

Clicca su Browse the file systeme inserisci il percorso della directory HDFS in cui hai archiviato i tweet. Nel nostro esempio, il percorso sarà/user/Hadoop/twitter_data/. Quindi, puoi vedere l'elenco dei file di registro di Twitter archiviati in HDFS come indicato di seguito.

Nel capitolo precedente, abbiamo visto come recuperare i dati dalla sorgente Twitter su HDFS. Questo capitolo spiega come recuperare i dati daSequence generator.

Prerequisiti

Per eseguire l'esempio fornito in questo capitolo, è necessario installare HDFS insieme a Flume. Pertanto, verifica l'installazione di Hadoop e avvia l'HDFS prima di procedere ulteriormente. (Fare riferimento al capitolo precedente per sapere come avviare HDFS).

Configurazione di Flume

Dobbiamo configurare l'origine, il canale e il sink utilizzando il file di configurazione in confcartella. L'esempio fornito in questo capitolo utilizza un filesequence generator source, a memory channel, e un HDFS sink.

Origine generatore di sequenze

È la fonte che genera continuamente gli eventi. Mantiene un contatore che inizia da 0 e aumenta di 1. Viene utilizzato a scopo di test. Durante la configurazione di questa sorgente, è necessario fornire valori alle seguenti proprietà:

  • Channels

  • Source type - seq

Canale

Stiamo usando il memorycanale. Per configurare il canale di memoria, è necessario fornire un valore al tipo di canale. Di seguito è riportato l'elenco delle proprietà che è necessario fornire durante la configurazione del canale di memoria:

  • type- Contiene il tipo di canale. Nel nostro esempio il tipo è MemChannel.

  • Capacity- È il numero massimo di eventi memorizzati nel canale. Il suo valore predefinito è 100. (opzionale)

  • TransactionCapacity- È il numero massimo di eventi che il canale accetta o invia. Il suo valore predefinito è 100. (opzionale).

Lavello HDFS

Questo sink scrive i dati nell'HDFS. Per configurare questo sink, è necessario fornire i seguenti dettagli.

  • Channel

  • type - hdfs

  • hdfs.path - il percorso della directory in HDFS in cui devono essere archiviati i dati.

E possiamo fornire alcuni valori opzionali basati sullo scenario. Di seguito sono riportate le proprietà opzionali del sink HDFS che stiamo configurando nella nostra applicazione.

  • fileType - Questo è il formato file richiesto del nostro file HDFS. SequenceFile, DataStream e CompressedStreamsono i tre tipi disponibili con questo flusso. Nel nostro esempio, stiamo usando ilDataStream.

  • writeFormat - Potrebbe essere testo o scrivibile.

  • batchSize- È il numero di eventi scritti in un file prima che venga scaricato nell'HDFS. Il suo valore predefinito è 100.

  • rollsize- È la dimensione del file per attivare un rotolo. Il valore predefinito è 100.

  • rollCount- È il numero di eventi scritti nel file prima che venga eseguito il rollio. Il suo valore predefinito è 10.

Esempio: file di configurazione

Di seguito è riportato un esempio del file di configurazione. Copia questo contenuto e salva con nomeseq_gen .conf nella cartella conf di Flume.

# Naming the components on the current agent 

SeqGenAgent.sources = SeqSource   
SeqGenAgent.channels = MemChannel 
SeqGenAgent.sinks = HDFS 
 
# Describing/Configuring the source 
SeqGenAgent.sources.SeqSource.type = seq
  
# Describing/Configuring the sink
SeqGenAgent.sinks.HDFS.type = hdfs 
SeqGenAgent.sinks.HDFS.hdfs.path = hdfs://localhost:9000/user/Hadoop/seqgen_data/
SeqGenAgent.sinks.HDFS.hdfs.filePrefix = log 
SeqGenAgent.sinks.HDFS.hdfs.rollInterval = 0
SeqGenAgent.sinks.HDFS.hdfs.rollCount = 10000
SeqGenAgent.sinks.HDFS.hdfs.fileType = DataStream 
 
# Describing/Configuring the channel 
SeqGenAgent.channels.MemChannel.type = memory 
SeqGenAgent.channels.MemChannel.capacity = 1000 
SeqGenAgent.channels.MemChannel.transactionCapacity = 100 
 
# Binding the source and sink to the channel 
SeqGenAgent.sources.SeqSource.channels = MemChannel
SeqGenAgent.sinks.HDFS.channel = MemChannel

Esecuzione

Sfoglia la home directory di Flume ed esegui l'applicazione come mostrato di seguito.

$ cd $FLUME_HOME 
$./bin/flume-ng agent --conf $FLUME_CONF --conf-file $FLUME_CONF/seq_gen.conf 
   --name SeqGenAgent

Se tutto va bene, la sorgente inizia a generare numeri di sequenza che verranno inseriti nell'HDFS sotto forma di file di registro.

Di seguito è riportata un'istantanea della finestra del prompt dei comandi che recupera i dati generati dal generatore di sequenze nell'HDFS.

Verifica dell'HDFS

È possibile accedere all'interfaccia utente Web di amministrazione di Hadoop utilizzando il seguente URL:

http://localhost:50070/

Fare clic sul menu a discesa denominato Utilitiessul lato destro della pagina. Puoi vedere due opzioni come mostrato nel diagramma riportato di seguito.

Clicca su Browse the file system e inserisci il percorso della directory HDFS in cui hai memorizzato i dati generati dal generatore di sequenze.

Nel nostro esempio, il percorso sarà /user/Hadoop/ seqgen_data /. Quindi, è possibile visualizzare l'elenco dei file di registro generati dal generatore di sequenze, archiviati nell'HDFS come indicato di seguito.

Verifica del contenuto del file

Tutti questi file di registro contengono numeri in formato sequenziale. È possibile verificare il contenuto di questi file nel file system utilizzando l'estensionecat comando come mostrato di seguito.

Questo capitolo prende un esempio per spiegare come generare eventi e successivamente registrarli nella console. Per questo, stiamo usando ilNetCat fonte e il logger Lavello.

Prerequisiti

Per eseguire l'esempio fornito in questo capitolo, è necessario installare Flume.

Configurazione di Flume

Dobbiamo configurare l'origine, il canale e il sink utilizzando il file di configurazione in confcartella. L'esempio fornito in questo capitolo utilizza un fileNetCat Source, Memory channele a logger sink.

NetCat Source

Durante la configurazione dell'origine NetCat, dobbiamo specificare una porta durante la configurazione dell'origine. Ora la sorgente (sorgente NetCat) ascolta la porta data e riceve ogni riga che abbiamo inserito in quella porta come un singolo evento e la trasferisce al sink attraverso il canale specificato.

Durante la configurazione di questa sorgente, è necessario fornire valori alle seguenti proprietà:

  • channels

  • Source type - netcat

  • bind - Nome host o indirizzo IP da associare.

  • port - Numero di porta su cui si desidera che la sorgente ascolti.

Canale

Stiamo usando il memorycanale. Per configurare il canale di memoria, è necessario fornire un valore al tipo di canale. Di seguito è riportato l'elenco delle proprietà che è necessario fornire durante la configurazione del canale di memoria:

  • type- Contiene il tipo di canale. Nel nostro esempio, il tipo èMemChannel.

  • Capacity- È il numero massimo di eventi memorizzati nel canale. Il suo valore predefinito è 100. (opzionale)

  • TransactionCapacity- È il numero massimo di eventi che il canale accetta o invia. Il suo valore predefinito è 100. (opzionale).

Logger Sink

Questo sink registra tutti gli eventi ad esso passati. In genere, viene utilizzato per scopi di test o debug. Per configurare questo sink, è necessario fornire i seguenti dettagli.

  • Channel

  • type - logger

File di configurazione di esempio

Di seguito è riportato un esempio del file di configurazione. Copia questo contenuto e salva con nomenetcat.conf nella cartella conf di Flume.

# Naming the components on the current agent
NetcatAgent.sources = Netcat   
NetcatAgent.channels = MemChannel 
NetcatAgent.sinks = LoggerSink  

# Describing/Configuring the source 
NetcatAgent.sources.Netcat.type = netcat 
NetcatAgent.sources.Netcat.bind = localhost
NetcatAgent.sources.Netcat.port = 56565  

# Describing/Configuring the sink 
NetcatAgent.sinks.LoggerSink.type = logger  

# Describing/Configuring the channel 
NetcatAgent.channels.MemChannel.type = memory 
NetcatAgent.channels.MemChannel.capacity = 1000 
NetcatAgent.channels.MemChannel.transactionCapacity = 100 
 
# Bind the source and sink to the channel 
NetcatAgent.sources.Netcat.channels = MemChannel
NetcatAgent.sinks. LoggerSink.channel = MemChannel

Esecuzione

Sfoglia la home directory di Flume ed esegui l'applicazione come mostrato di seguito.

$ cd $FLUME_HOME
$ ./bin/flume-ng agent --conf $FLUME_CONF --conf-file $FLUME_CONF/netcat.conf 
   --name NetcatAgent -Dflume.root.logger=INFO,console

Se tutto va bene, la sorgente inizia ad ascoltare la porta specificata. In questo caso, lo è56565. Di seguito è riportata l'istantanea della finestra del prompt dei comandi di una sorgente NetCat che è stata avviata e in ascolto sulla porta 56565.

Passaggio di dati all'origine

Per passare i dati alla sorgente NetCat, è necessario aprire la porta indicata nel file di configurazione. Aprire un terminale separato e connettersi alla sorgente (56565) utilizzando ilcurlcomando. Quando la connessione ha esito positivo, riceverai un messaggio "connected" come mostrato di seguito.

$ curl telnet://localhost:56565 
connected

Ora puoi inserire i tuoi dati riga per riga (dopo ogni riga, devi premere Invio). La sorgente NetCat riceve ogni riga come un singolo evento e riceverai un messaggio ricevuto "OK".

Ogni volta che hai finito di passare i dati, puoi uscire dalla console premendo (Ctrl+C). Di seguito è riportata l'istantanea della console in cui ci siamo collegati alla sorgente utilizzando ilcurl comando.

Ciascuna riga inserita nella console di cui sopra verrà ricevuta come evento individuale dalla sorgente. Dal momento che abbiamo utilizzato ilLogger sink, questi eventi verranno registrati nella console (console di origine) tramite il canale specificato (canale di memoria in questo caso).

La seguente istantanea mostra la console NetCat in cui vengono registrati gli eventi.