Apache Flume - Guía rápida

¿Qué es Flume?

Apache Flume es una herramienta / servicio / mecanismo de ingesta de datos para recopilar, agregar y transportar grandes cantidades de datos de transmisión, como archivos de registro, eventos (etc.) de varias fuentes a un almacén de datos centralizado.

Flume es una herramienta altamente confiable, distribuida y configurable. Está diseñado principalmente para copiar datos de transmisión (datos de registro) de varios servidores web a HDFS.

Aplicaciones de Flume

Suponga que una aplicación web de comercio electrónico desea analizar el comportamiento del cliente de una región en particular. Para hacerlo, necesitarían mover los datos de registro disponibles a Hadoop para su análisis. Aquí, Apache Flume viene a nuestro rescate.

Flume se utiliza para mover los datos de registro generados por los servidores de aplicaciones a HDFS a mayor velocidad.

Ventajas de Flume

Estas son las ventajas de usar Flume:

  • Usando Apache Flume podemos almacenar los datos en cualquiera de las tiendas centralizadas (HBase, HDFS).

  • Cuando la tasa de datos entrantes excede la tasa a la que se pueden escribir datos en el destino, Flume actúa como mediador entre los productores de datos y los almacenes centralizados y proporciona un flujo constante de datos entre ellos.

  • Flume proporciona la característica de contextual routing.

  • Las transacciones en Flume están basadas en canales donde se mantienen dos transacciones (un remitente y un receptor) para cada mensaje. Garantiza la entrega de mensajes confiable.

  • Flume es confiable, tolerante a fallas, escalable, manejable y personalizable.

Características de Flume

Algunas de las características notables de Flume son las siguientes:

  • Flume ingiere datos de registro de varios servidores web en una tienda centralizada (HDFS, HBase) de manera eficiente.

  • Con Flume, podemos obtener los datos de varios servidores inmediatamente en Hadoop.

  • Junto con los archivos de registro, Flume también se utiliza para importar grandes volúmenes de datos de eventos producidos por sitios de redes sociales como Facebook y Twitter, y sitios web de comercio electrónico como Amazon y Flipkart.

  • Flume admite un gran conjunto de tipos de fuentes y destinos.

  • Flume admite flujos de múltiples saltos, flujos de entrada y salida, enrutamiento contextual, etc.

  • El canal se puede escalar horizontalmente.

Big Data,como sabemos, es una colección de grandes conjuntos de datos que no se pueden procesar mediante técnicas informáticas tradicionales. Big Data, cuando se analiza, da resultados valiosos.Hadoop es un marco de código abierto que permite almacenar y procesar Big Data en un entorno distribuido a través de grupos de computadoras utilizando modelos de programación simples.

Transmisión / registro de datos

Generalmente, la mayoría de los datos que se van a analizar serán producidos por varias fuentes de datos como servidores de aplicaciones, sitios de redes sociales, servidores en la nube y servidores empresariales. Estos datos estarán en forma delog files y events.

Log file - En general, un archivo de registro es un fileque enumera eventos / acciones que ocurren en un sistema operativo. Por ejemplo, los servidores web enumeran todas las solicitudes realizadas al servidor en los archivos de registro.

Al recolectar dichos datos de registro, podemos obtener información sobre:

  • el rendimiento de la aplicación y localizar varios fallos de software y hardware.
  • el comportamiento del usuario y obtener mejores conocimientos empresariales.

El método tradicional de transferir datos al sistema HDFS es utilizar el putmando. Veamos cómo usar elput mando.

Comando put HDFS

El principal desafío en el manejo de los datos de registro es mover estos registros producidos por múltiples servidores al entorno de Hadoop.

Hadoop File System Shellproporciona comandos para insertar datos en Hadoop y leerlos. Puede insertar datos en Hadoop usando elput comando como se muestra a continuación.

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

Problema con el comando put

Podemos usar el putcomando de Hadoop para transferir datos de estas fuentes a HDFS. Pero adolece de los siguientes inconvenientes:

  • Utilizando put comando, podemos transferir only one file at a timemientras que los generadores de datos generan datos a una velocidad mucho mayor. Dado que el análisis realizado en datos más antiguos es menos preciso, necesitamos tener una solución para transferir datos en tiempo real.

  • Si usamos putcomando, los datos deben ser empaquetados y deben estar listos para la carga. Dado que los servidores web generan datos de forma continua, es una tarea muy difícil.

Lo que necesitamos aquí es una solución que pueda superar los inconvenientes de put Ordene y transfiera la "transmisión de datos" de los generadores de datos a las tiendas centralizadas (especialmente HDFS) con menos demora.

Problema con HDFS

En HDFS, el archivo existe como una entrada de directorio y la longitud del archivo se considerará cero hasta que se cierre. Por ejemplo, si una fuente está escribiendo datos en HDFS y la red se interrumpió en medio de la operación (sin cerrar el archivo), los datos escritos en el archivo se perderán.

Por lo tanto, necesitamos un sistema confiable, configurable y fácil de mantener para transferir los datos de registro a HDFS.

Note- En el sistema de archivos POSIX, siempre que accedemos a un archivo (por ejemplo, realizando una operación de escritura), otros programas aún pueden leer este archivo (al menos la parte guardada del archivo). Esto se debe a que el archivo existe en el disco antes de que se cierre.

Soluciones Disponibles

Para enviar datos de transmisión (archivos de registro, eventos, etc.) desde varias fuentes a HDFS, tenemos las siguientes herramientas disponibles a nuestra disposición:

Escriba de Facebook

Scribe es una herramienta inmensamente popular que se utiliza para agregar y transmitir datos de registro. Está diseñado para escalar a una gran cantidad de nodos y ser resistente a fallas de red y nodos.

Apache Kafka

Kafka ha sido desarrollado por Apache Software Foundation. Es un corredor de mensajes de código abierto. Con Kafka, podemos manejar feeds con alto rendimiento y baja latencia.

Apache Flume

Apache Flume es una herramienta / servicio / mecanismo de ingestión de datos para recopilar, agregar y transportar grandes cantidades de datos de transmisión, como datos de registro, eventos (etc.) desde varios servidores web a un almacén de datos centralizado.

Es una herramienta altamente confiable, distribuida y configurable que está diseñada principalmente para transferir datos de transmisión desde varias fuentes a HDFS.

En este tutorial, discutiremos en detalle cómo usar Flume con algunos ejemplos.

La siguiente ilustración muestra la arquitectura básica de Flume. Como se muestra en la ilustración,data generators (como Facebook, Twitter) generan datos que son recopilados por Flume individual agentscorriendo sobre ellos. A partir de entonces, undata collector (que también es un agente) recopila los datos de los agentes que se agregan y se envían a una tienda centralizada como HDFS o HBase.

Evento de canal

Un event es la unidad básica de los datos transportados dentro Flume. Contiene una carga útil de una matriz de bytes que se transportará desde el origen hasta el destino acompañada de encabezados opcionales. Un evento típico de Flume tendría la siguiente estructura:

Agente de canal

Un agentes un proceso daemon independiente (JVM) en Flume. Recibe los datos (eventos) de clientes u otros agentes y los reenvía a su próximo destino (receptor o agente). Flume puede tener más de un agente. El siguiente diagrama representa unFlume Agent

Como se muestra en el diagrama, un agente de canal contiene tres componentes principales, a saber, source, channely sink.

Fuente

UN source es el componente de un agente que recibe datos de los generadores de datos y los transfiere a uno o más canales en forma de eventos Flume.

Apache Flume admite varios tipos de fuentes y cada fuente recibe eventos de un generador de datos específico.

Example - Fuente de Avro, fuente de ahorro, fuente de twitter 1%, etc.

Canal

UN channeles un almacén transitorio que recibe los eventos de la fuente y los almacena en búfer hasta que son consumidos por los sumideros. Actúa como puente entre las fuentes y los sumideros.

Estos canales son completamente transaccionales y pueden funcionar con cualquier número de fuentes y receptores.

Example - Canal JDBC, canal del sistema de archivos, canal de memoria, etc.

Lavabo

UN sinkalmacena los datos en tiendas centralizadas como HBase y HDFS. Consume los datos (eventos) de los canales y los entrega al destino. El destino del fregadero puede ser otro agente o las tiendas centrales.

Example - Fregadero HDFS

Note- Un agente de canal puede tener múltiples fuentes, sumideros y canales. Hemos enumerado todas las fuentes, receptores y canales compatibles en el capítulo de configuración de Flume de este tutorial.

Componentes adicionales del agente de canal

Lo que hemos discutido anteriormente son los componentes primitivos del agente. Además de esto, tenemos algunos componentes más que juegan un papel vital en la transferencia de eventos desde el generador de datos a las tiendas centralizadas.

Interceptores

Los interceptores se utilizan para alterar / inspeccionar eventos de canal que se transfieren entre la fuente y el canal.

Selectores de canales

Estos se utilizan para determinar qué canal se optará para transferir los datos en el caso de varios canales. Hay dos tipos de selectores de canales:

  • Default channel selectors - Estos también se conocen como selectores de canal de replicación, replican todos los eventos en cada canal.

  • Multiplexing channel selectors - Estos deciden el canal para enviar un evento en función de la dirección en el encabezado de ese evento.

Procesadores de fregadero

Se utilizan para invocar un sumidero particular del grupo de sumideros seleccionado. Se utilizan para crear rutas de conmutación por error para sus receptores o eventos de equilibrio de carga en varios receptores de un canal.

Flume es un marco que se utiliza para mover datos de registro a HDFS. Generalmente los eventos y los datos de registro son generados por los servidores de registro y estos servidores tienen agentes Flume ejecutándose en ellos. Estos agentes reciben los datos de los generadores de datos.

Los datos de estos agentes serán recopilados por un nodo intermedio conocido como Collector. Al igual que los agentes, puede haber varios recolectores en Flume.

Finalmente, los datos de todos estos recopiladores se agregarán y se enviarán a una tienda centralizada como HBase o HDFS. El siguiente diagrama explica el flujo de datos en Flume.

Flujo de varios saltos

Dentro de Flume, puede haber varios agentes y antes de llegar al destino final, un evento puede viajar a través de más de un agente. Esto se conoce comomulti-hop flow.

Flujo de distribución

El flujo de datos de una fuente a varios canales se conoce como fan-out flow. Es de dos tipos:

  • Replicating - El flujo de datos donde se replicarán los datos en todos los canales configurados.

  • Multiplexing - El flujo de datos donde se enviarán los datos a un canal seleccionado que se menciona en el encabezado del evento.

Flujo de ventilador

El flujo de datos en el que los datos se transferirán de muchas fuentes a un canal se conoce como fan-in flow.

Manejo de fallas

En Flume, para cada evento, se realizan dos transacciones: una en el remitente y otra en el receptor. El remitente envía eventos al receptor. Poco después de recibir los datos, el receptor realiza su propia transacción y envía una señal "recibida" al remitente. Después de recibir la señal, el remitente confirma su transacción. (El remitente no confirmará su transacción hasta que reciba una señal del receptor).

Ya discutimos la arquitectura de Flume en el capítulo anterior. En este capítulo, veamos cómo descargar y configurar Apache Flume.

Antes de continuar, debe tener un entorno Java en su sistema. Entonces, antes que nada, asegúrese de tener Java instalado en su sistema. Para algunos ejemplos en este tutorial, hemos utilizado Hadoop HDFS (como receptor). Por lo tanto, le recomendamos que instale Hadoop junto con Java. Para recopilar más información, siga el enlace -http://www.tutorialspoint.com/hadoop/hadoop_enviornment_setup.htm

Instalación de Flume

En primer lugar, descargue la última versión del software Apache Flume del sitio web https://flume.apache.org/.

Paso 1

Abra el sitio web. Clickea en eldownloadenlace en el lado izquierdo de la página de inicio. Lo llevará a la página de descarga de Apache Flume.

Paso 2

En la página de descargas, puede ver los enlaces para archivos binarios y fuente de Apache Flume. Haga clic en el enlace apache-flume-1.6.0-bin.tar.gz

Se le redirigirá a una lista de espejos donde podrá iniciar la descarga haciendo clic en cualquiera de estos espejos. De la misma manera, puede descargar el código fuente de Apache Flume haciendo clic en apache-flume-1.6.0-src.tar.gz .

Paso 3

Cree un directorio con el nombre Flume en el mismo directorio donde los directorios de instalación de Hadoop, HBase, y se instaló otro software (si ya ha instalado alguno) como se muestra a continuación.

$ mkdir Flume

Etapa 4

Extraiga los archivos tar descargados como se muestra a continuación.

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

Paso 5

Mover el contenido de apache-flume-1.6.0-bin.tar archivo al Flumedirectorio creado anteriormente como se muestra a continuación. (Suponga que hemos creado el directorio Flume en el usuario local llamado Hadoop).

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

Configuración de Flume

Para configurar Flume, tenemos que modificar tres archivos a saber, flume-env.sh, flumeconf.properties, y bash.rc.

Establecer la ruta / ruta de clases

En el .bashrc , configure la carpeta de inicio, la ruta y la ruta de clases para Flume como se muestra a continuación.

conf Carpeta

Si abre el conf carpeta de Apache Flume, tendrá los siguientes cuatro archivos:

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

Ahora cambie el nombre

  • flume-conf.properties.template archivar como flume-conf.properties y

  • flume-env.sh.template como flume-env.sh

flume-env.sh

Abierto flume-env.sh archivo y configure el JAVA_Home a la carpeta donde se instaló Java en su sistema.

Verificación de la instalación

Verifique la instalación de Apache Flume navegando por el bin carpeta y escribiendo el siguiente comando.

$ ./flume-ng

Si ha instalado correctamente Flume, recibirá un mensaje de ayuda de Flume como se muestra a continuación.

Después de instalar Flume, necesitamos configurarlo usando el archivo de configuración que es un archivo de propiedades de Java que tiene key-value pairs. Necesitamos pasar valores a las claves en el archivo.

En el archivo de configuración de Flume, necesitamos:

  • Nombra los componentes del agente actual.
  • Describe / configura la fuente.
  • Describe / configura el fregadero.
  • Describe / configura el canal.
  • Ate la fuente y el sumidero al canal.

Por lo general, podemos tener varios agentes en Flume. Podemos diferenciar a cada agente usando un nombre único. Y usando este nombre, tenemos que configurar cada agente.

Nombrar los componentes

En primer lugar, debe nombrar / enumerar los componentes, como fuentes, receptores y canales del agente, como se muestra a continuación.

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

Flume admite varias fuentes, sumideros y canales. Se enumeran en la tabla siguiente.

Fuentes Canales Fregaderos
  • Fuente Avro
  • Fuente de ahorro
  • Fuente ejecutiva
  • Fuente JMS
  • Origen del directorio en cola
  • Fuente de Twitter 1% firehose
  • Fuente Kafka
  • Fuente NetCat
  • Fuente del generador de secuencia
  • Fuentes de Syslog
  • Fuente TCP de Syslog
  • Fuente TCP multipuerto Syslog
  • Fuente de Syslog UDP
  • Fuente HTTP
  • Fuente de estrés
  • Fuentes heredadas
  • Thrift Legacy Source
  • Fuente personalizada
  • Escriba fuente
  • Canal de memoria
  • Canal JDBC
  • Canal de Kafka
  • Canal de archivos
  • Canal de memoria derramable
  • Canal de pseudo transacción
  • Fregadero HDFS
  • Fregadero de colmena
  • Fregadero del registrador
  • Fregadero Avro
  • Fregadero de segunda mano
  • Fregadero IRC
  • Fregadero de rollo de archivo
  • Fregadero nulo
  • HBaseSink
  • AsyncHBaseSink
  • MorphlineSolrSink
  • ElasticSearchSink
  • Fregadero Kite Dataset
  • Fregadero Kafka

Puedes usar cualquiera de ellos. Por ejemplo, si está transfiriendo datos de Twitter utilizando una fuente de Twitter a través de un canal de memoria a un receptor HDFS, y la identificación del nombre del agenteTwitterAgent, luego

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

Después de enumerar los componentes del agente, debe describir la (s) fuente (s), sumidero (s) y canal (s) proporcionando valores a sus propiedades.

Describiendo la fuente

Cada fuente tendrá una lista separada de propiedades. La propiedad denominada "tipo" es común a todas las fuentes y se utiliza para especificar el tipo de fuente que estamos utilizando.

Junto con la propiedad "tipo", es necesario proporcionar los valores de todos los required propiedades de una fuente en particular para configurarla, como se muestra a continuación.

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

Por ejemplo, si consideramos el twitter source, a continuación se muestran las propiedades a las que debemos proporcionar valores para configurarlo.

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

Describiendo el fregadero

Al igual que la fuente, cada sumidero tendrá una lista separada de propiedades. La propiedad denominada "tipo" es común a todos los sumideros y se utiliza para especificar el tipo de sumidero que estamos usando. Junto con la propiedad "tipo", es necesario proporcionar valores a todos losrequired propiedades de un sumidero en particular para configurarlo, como se muestra a continuación.

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

Por ejemplo, si consideramos HDFS sink, a continuación se muestran las propiedades a las que debemos proporcionar valores para configurarlo.

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

Describiendo el canal

Flume proporciona varios canales para transferir datos entre fuentes y receptores. Por lo tanto, junto con las fuentes y los canales, es necesario describir el canal utilizado en el agente.

Para describir cada canal, debe establecer las propiedades necesarias, como se muestra a continuación.

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

Por ejemplo, si consideramos memory channel, a continuación se muestran las propiedades a las que debemos proporcionar valores para configurarlo.

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

Uniendo la fuente y el sumidero al canal

Dado que los canales conectan las fuentes y los receptores, es necesario unir ambos al canal, como se muestra a continuación.

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

El siguiente ejemplo muestra cómo vincular las fuentes y los receptores a un canal. Aquí, consideramostwitter source, memory channel, y HDFS sink.

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

Inicio de un agente de canal

Después de la configuración, tenemos que iniciar el agente Flume. Se hace de la siguiente manera:

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

donde -

  • agent - Comando para iniciar el agente Flume

  • --conf ,-c<conf> - Usar archivo de configuración en el directorio conf

  • -f<file> - Especifica una ruta de archivo de configuración, si falta

  • --name, -n <name> - Nombre del agente de twitter

  • -D property =value - Establece un valor de propiedad del sistema Java.

Con Flume, podemos obtener datos de varios servicios y transportarlos a tiendas centralizadas (HDFS y HBase). Este capítulo explica cómo obtener datos del servicio de Twitter y almacenarlos en HDFS usando Apache Flume.

Como se explica en Flume Architecture, un servidor web genera datos de registro y estos datos los recopila un agente en Flume. El canal almacena estos datos en un sumidero, que finalmente los envía a las tiendas centralizadas.

En el ejemplo proporcionado en este capítulo, crearemos una aplicación y obtendremos los tweets utilizando la fuente experimental de Twitter proporcionada por Apache Flume. Usaremos el canal de memoria para almacenar estos tweets en búfer y el receptor HDFS para enviar estos tweets al HDFS.

Para obtener datos de Twitter, tendremos que seguir los pasos que se detallan a continuación:

  • Crea una aplicación de twitter
  • Instalar / iniciar HDFS
  • Configurar Flume

Crear una aplicación de Twitter

Para obtener los tweets de Twitter, es necesario crear una aplicación de Twitter. Siga los pasos que se indican a continuación para crear una aplicación de Twitter.

Paso 1

Para crear una aplicación de Twitter, haga clic en el siguiente enlace https://apps.twitter.com/. Inicie sesión en su cuenta de Twitter. Tendrá una ventana de administración de aplicaciones de Twitter donde puede crear, eliminar y administrar aplicaciones de Twitter.

Paso 2

Clickea en el Create New Appbotón. Será redirigido a una ventana donde obtendrá un formulario de solicitud en el que debe completar sus datos para crear la aplicación. Mientras completa la dirección del sitio web, proporcione el patrón de URL completo, por ejemplo,http://example.com.

Paso 3

Complete los datos, acepte el Developer Agreement cuando termine, haga clic en el Create your Twitter application buttonque está en la parte inferior de la página. Si todo va bien, se creará una aplicación con los detalles proporcionados como se muestra a continuación.

Etapa 4

Debajo keys and Access Tokens pestaña en la parte inferior de la página, puede observar un botón llamado Create my access token. Haga clic en él para generar el token de acceso.

Paso 5

Finalmente, haga clic en el Test OAuthbotón que se encuentra en la parte superior derecha de la página. Esto conducirá a una página que muestra suConsumer key, Consumer secret, Access token, y Access token secret. Copie estos detalles. Son útiles para configurar el agente en Flume.

Iniciando HDFS

Dado que estamos almacenando los datos en HDFS, necesitamos instalar / verificar Hadoop. Inicie Hadoop y cree una carpeta en él para almacenar los datos de Flume. Siga los pasos que se indican a continuación antes de configurar Flume.

Paso 1: instalar / verificar Hadoop

Instale Hadoop . Si Hadoop ya está instalado en su sistema, verifique la instalación usando el comando de la versión de Hadoop, como se muestra a continuación.

$ hadoop version

Si su sistema contiene Hadoop, y si ha establecido la variable de ruta, obtendrá el siguiente resultado:

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

Paso 2: iniciar Hadoop

Navegar por el sbin directorio de Hadoop e iniciar yarn y Hadoop dfs (sistema de archivos distribuido) como se muestra a continuación.

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

Paso 3: cree un directorio en HDFS

En Hadoop DFS, puede crear directorios usando el comando mkdir. Navegue a través de él y cree un directorio con el nombretwitter_data en la ruta requerida como se muestra a continuación.

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

Configuración de Flume

Tenemos que configurar la fuente, el canal y el receptor usando el archivo de configuración en el confcarpeta. El ejemplo dado en este capítulo utiliza una fuente experimental proporcionada por Apache Flume llamadaTwitter 1% Firehose Canal de memoria y disipador HDFS.

Fuente de Twitter 1% Firehose

Esta fuente es muy experimental. Se conecta al 1% de muestra de Twitter Firehose mediante API de transmisión continua y descarga tweets, los convierte al formato Avro y envía eventos Avro a un receptor Flume descendente.

Obtendremos esta fuente por defecto junto con la instalación de Flume. losjar Los archivos correspondientes a esta fuente se pueden ubicar en el lib carpeta como se muestra a continuación.

Establecer la ruta de clases

Selecciona el classpath variable a la lib carpeta de Flume en Flume-env.sh archivo como se muestra a continuación.

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

Esta fuente necesita los detalles como Consumer key, Consumer secret, Access token, y Access token secretde una aplicación de Twitter. Al configurar esta fuente, debe proporcionar valores a las siguientes propiedades:

  • Channels

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

  • consumerKey - La clave de consumidor de OAuth

  • consumerSecret - Secreto de consumidor de OAuth

  • accessToken - Token de acceso OAuth

  • accessTokenSecret - Secreto de token de OAuth

  • maxBatchSize- Número máximo de mensajes de Twitter que deben estar en un lote de Twitter. El valor predeterminado es 1000 (opcional).

  • maxBatchDurationMillis- Número máximo de milisegundos a esperar antes de cerrar un lote. El valor predeterminado es 1000 (opcional).

Canal

Estamos usando el canal de memoria. Para configurar el canal de memoria, debe proporcionar valor al tipo de canal.

  • type- Contiene el tipo de canal. En nuestro ejemplo, el tipo esMemChannel.

  • Capacity- Es el número máximo de eventos almacenados en el canal. Su valor predeterminado es 100 (opcional).

  • TransactionCapacity- Es el número máximo de eventos que el canal acepta o envía. Su valor predeterminado es 100 (opcional).

Fregadero HDFS

Este receptor escribe datos en HDFS. Para configurar este receptor, debe proporcionar los siguientes detalles.

  • Channel

  • type - hdfs

  • hdfs.path - la ruta del directorio en HDFS donde se almacenarán los datos.

Y podemos proporcionar algunos valores opcionales basados ​​en el escenario. A continuación se muestran las propiedades opcionales del receptor HDFS que estamos configurando en nuestra aplicación.

  • fileType - Este es el formato de archivo requerido de nuestro archivo HDFS. SequenceFile, DataStream y CompressedStreamson los tres tipos disponibles con esta secuencia. En nuestro ejemplo, estamos usando elDataStream.

  • writeFormat - Puede ser texto o escribible.

  • batchSize- Es el número de eventos escritos en un archivo antes de que se vacíe en el HDFS. Su valor predeterminado es 100.

  • rollsize- Es el tamaño del archivo para activar un rollo. Su valor predeterminado es 100.

  • rollCount- Es el número de eventos escritos en el archivo antes de que se transfiera. Su valor predeterminado es 10.

Ejemplo: archivo de configuración

A continuación se muestra un ejemplo del archivo de configuración. Copie este contenido y guárdelo comotwitter.conf en la carpeta conf de 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

Ejecución

Navegue por el directorio de inicio de Flume y ejecute la aplicación como se muestra a continuación.

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

Si todo va bien, comenzará la transmisión de tweets a HDFS. A continuación se muestra la instantánea de la ventana del símbolo del sistema mientras se obtienen tweets.

Verificación de HDFS

Puede acceder a la interfaz de usuario web de administración de Hadoop utilizando la URL que se proporciona a continuación.

http://localhost:50070/

Haga clic en el menú desplegable llamado Utilitiesen el lado derecho de la página. Puede ver dos opciones como se muestra en la instantánea que se muestra a continuación.

Haga clic en Browse the file systeme ingrese la ruta del directorio HDFS donde ha almacenado los tweets. En nuestro ejemplo, el camino será/user/Hadoop/twitter_data/. Luego, puede ver la lista de archivos de registro de Twitter almacenados en HDFS como se indica a continuación.

En el capítulo anterior, hemos visto cómo obtener datos de la fuente de Twitter a HDFS. Este capítulo explica cómo obtener datos deSequence generator.

Prerrequisitos

Para ejecutar el ejemplo proporcionado en este capítulo, debe instalar HDFS junto con Flume. Por lo tanto, verifique la instalación de Hadoop e inicie HDFS antes de continuar. (Consulte el capítulo anterior para saber cómo iniciar HDFS).

Configuración de Flume

Tenemos que configurar la fuente, el canal y el receptor usando el archivo de configuración en el confcarpeta. El ejemplo dado en este capítulo utiliza unsequence generator source, un memory channel, y un HDFS sink.

Fuente del generador de secuencia

Es la fuente que genera los eventos de forma continua. Mantiene un contador que comienza desde 0 y se incrementa en 1. Se utiliza con fines de prueba. Al configurar esta fuente, debe proporcionar valores a las siguientes propiedades:

  • Channels

  • Source type - seq

Canal

Estamos usando el memorycanal. Para configurar el canal de memoria, debe proporcionar un valor al tipo de canal. A continuación se muestra la lista de propiedades que debe proporcionar al configurar el canal de memoria:

  • type- Contiene el tipo de canal. En nuestro ejemplo, el tipo es MemChannel.

  • Capacity- Es el número máximo de eventos almacenados en el canal. Su valor predeterminado es 100. (opcional)

  • TransactionCapacity- Es el número máximo de eventos que el canal acepta o envía. Su valor predeterminado es 100 (opcional).

Fregadero HDFS

Este receptor escribe datos en HDFS. Para configurar este receptor, debe proporcionar los siguientes detalles.

  • Channel

  • type - hdfs

  • hdfs.path - la ruta del directorio en HDFS donde se almacenarán los datos.

Y podemos proporcionar algunos valores opcionales basados ​​en el escenario. A continuación se muestran las propiedades opcionales del receptor HDFS que estamos configurando en nuestra aplicación.

  • fileType - Este es el formato de archivo requerido de nuestro archivo HDFS. SequenceFile, DataStream y CompressedStreamson los tres tipos disponibles con esta secuencia. En nuestro ejemplo, estamos usando elDataStream.

  • writeFormat - Puede ser texto o escribible.

  • batchSize- Es el número de eventos escritos en un archivo antes de que se vacíe en el HDFS. Su valor predeterminado es 100.

  • rollsize- Es el tamaño del archivo para activar un rollo. Su valor predeterminado es 100.

  • rollCount- Es el número de eventos escritos en el archivo antes de que se transfiera. Su valor predeterminado es 10.

Ejemplo: archivo de configuración

A continuación se muestra un ejemplo del archivo de configuración. Copie este contenido y guárdelo comoseq_gen .conf en la carpeta conf de 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

Ejecución

Navegue por el directorio de inicio de Flume y ejecute la aplicación como se muestra a continuación.

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

Si todo va bien, la fuente comienza a generar números de secuencia que se enviarán al HDFS en forma de archivos de registro.

A continuación se muestra una instantánea de la ventana del símbolo del sistema que recupera los datos generados por el generador de secuencias en el HDFS.

Verificando el HDFS

Puede acceder a la interfaz de usuario web de administración de Hadoop utilizando la siguiente URL:

http://localhost:50070/

Haga clic en el menú desplegable llamado Utilitiesen el lado derecho de la página. Puede ver dos opciones como se muestra en el diagrama que se muestra a continuación.

Haga clic en Browse the file system e ingrese la ruta del directorio HDFS donde ha almacenado los datos generados por el generador de secuencias.

En nuestro ejemplo, el camino será /user/Hadoop/ seqgen_data /. Luego, puede ver la lista de archivos de registro generados por el generador de secuencias, almacenados en el HDFS como se indica a continuación.

Verificación del contenido del archivo

Todos estos archivos de registro contienen números en formato secuencial. Puede verificar el contenido de estos archivos en el sistema de archivos utilizando elcat comando como se muestra a continuación.

Este capítulo toma un ejemplo para explicar cómo puede generar eventos y luego registrarlos en la consola. Para esto, estamos usando elNetCat fuente y la logger lavabo.

Prerrequisitos

Para ejecutar el ejemplo proporcionado en este capítulo, debe instalar Flume.

Configuración de Flume

Tenemos que configurar la fuente, el canal y el receptor usando el archivo de configuración en el confcarpeta. El ejemplo dado en este capítulo utiliza unNetCat Source, Memory channely un logger sink.

Fuente NetCat

Al configurar la fuente de NetCat, tenemos que especificar un puerto mientras configuramos la fuente. Ahora la fuente (fuente NetCat) escucha el puerto dado y recibe cada línea que ingresamos en ese puerto como un evento individual y la transfiere al receptor a través del canal especificado.

Al configurar esta fuente, debe proporcionar valores a las siguientes propiedades:

  • channels

  • Source type - netcat

  • bind - Nombre de host o dirección IP para enlazar.

  • port - Número de puerto que queremos que escuche la fuente.

Canal

Estamos usando el memorycanal. Para configurar el canal de memoria, debe proporcionar un valor al tipo de canal. A continuación se muestra la lista de propiedades que debe proporcionar al configurar el canal de memoria:

  • type- Contiene el tipo de canal. En nuestro ejemplo, el tipo esMemChannel.

  • Capacity- Es el número máximo de eventos almacenados en el canal. Su valor predeterminado es 100. (opcional)

  • TransactionCapacity- Es el número máximo de eventos que el canal acepta o envía. Su valor predeterminado es 100 (opcional).

Fregadero del registrador

Este receptor registra todos los eventos que se le pasan. Generalmente, se utiliza con fines de prueba o depuración. Para configurar este receptor, debe proporcionar los siguientes detalles.

  • Channel

  • type - registrador

Archivo de configuración de ejemplo

A continuación se muestra un ejemplo del archivo de configuración. Copie este contenido y guárdelo comonetcat.conf en la carpeta conf de 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

Ejecución

Navegue por el directorio de inicio de Flume y ejecute la aplicación como se muestra a continuación.

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

Si todo va bien, la fuente comienza a escuchar el puerto indicado. En este caso lo es56565. A continuación se muestra la instantánea de la ventana del símbolo del sistema de una fuente NetCat que se ha iniciado y está escuchando el puerto 56565.

Pasar datos a la fuente

Para pasar datos a la fuente NetCat, debe abrir el puerto que se proporciona en el archivo de configuración. Abra un terminal separado y conéctelo a la fuente (56565) usando elcurlmando. Cuando la conexión sea exitosa, recibirá un mensaje "connected" Como se muestra abajo.

$ curl telnet://localhost:56565 
connected

Ahora puede ingresar sus datos línea por línea (después de cada línea, debe presionar Enter). La fuente de NetCat recibe cada línea como un evento individual y recibirá un mensaje recibido "OK”.

Siempre que haya terminado con el paso de datos, puede salir de la consola presionando (Ctrl+C). A continuación se muestra la instantánea de la consola donde nos hemos conectado a la fuente usando elcurl mando.

Cada línea que se ingrese en la consola anterior será recibida como un evento individual por la fuente. Dado que hemos utilizado elLogger receptor, estos eventos se registrarán en la consola (consola de origen) a través del canal especificado (canal de memoria en este caso).

La siguiente instantánea muestra la consola de NetCat donde se registran los eventos.