Introducción al Apache Flume

Introducción al Apache Flume

  • Orquestación
6 min de lectura Actualizado Apr 20, 2017

Puntos clave: Apache Flume están una herramienta para leer flujos de datos de alto volumen de forma eficiente y escribirlos en sistemas de almacenamiento sin pérdida de datos. Soporta diversas fuentes como registros y feeds de Twitter.

  • Flume genera datos a sistemas como HDFS, Hive y ElasticSearch.
  • La configuración implica definir fuentes, sumideros y canales para gestionar el flujo de datos.

Flume 101

Apache Flume lee una fuente de datos y la escribe en almacenamiento a volúmenes increíblemente altos y sin perder ningún evento. Estas fuentes de datos incluyen registros en streaming, tráfico de red, cuentas de Twitter, etc. (ejemplos a continuación)

Pero no manipula datos. En su lugar te puede escribirlo en algo con la capacidad de hacerlo, como Hive y, en ese caso, los comandos SQL (HQL) de utiliza Hive para procesarlo. O te puede enviarlo a ElasticSearch, donde los datos se almacenan en formato JSON que puede consultarse con Kibana. Hay muchas otras opciones son dónde almacena los datos.

play

Instalación

La instalación de Flume están sencilla. te simplemente descargarlo y descomprimirlo. No están clase path ni nada parecido que configurar. te no Comienza Flume, per se. En su lugar, te Comienza agentes, uno para cada fuente de datos que te quiera leer y guardar.

Fuente y furgón de canales

No están mucha terminología que dominar:

Una fuente están datos de entrada. Un sumidero están salida. Y un canal de memoria almacena eventos en memoria, con la condición de que se Obtén si el agente muere. Algunos de los sumideros, fuentes y canales de memoria que soporta Flume incluyen:

Fuentes—Avro (serialización de datos con un esquema), Thrift (abstracción escrita por Facebook para facilitar la comunicación entre diferentes lenguajes de programación), Exec (comandos de shell), JMS (mensajería), Twitter, Kafka (producto de streaming de LinkedIn), NetCat, Syslog, HTTP, personalizado (te puedes escribir los tuyos propios, además son muchos de terceros).

Sumergideros—HDFS, Hive, Logger (Apache log4j), ElasticSearch, Kafka, Custom (plugins de terceros como Cassandra, HBase y MongoDB)

Canales de memoria—JDBC (es decir, bases de datos), Kafka, Archivo, Personalizado

Configuración

La configuración de un agente Flume tiene el formato que se muestra a continuación. Hay fuentes son (entrada), sumideros (salida) y canales (conecta fuentes con sumideros). El nombre del agente están el nombre que te Haz arriba.

La codificación por colores muestra cómo te declarar los nombres de fuentes, sumideros y canales, y luego asociarlos con sus opciones correspondientes.

    (agent name).sources = (source name)
(agent name).channels = (channel name)
(agent name).sinks = (sink name)

(agent name).sources.(source name).options = value
(agent name).sinks.(sink name).options = value

(agent name).channels.(channel name).options = value

(agent name).sinks.(sink name).channel =   (channel name)
(agent name).sources.(sink name).channel =   (channel name)

Para Comienza un agente te ir a la carpeta de contenedor y ejecutar:

    ./flume-ng agent -n (agent name) -c conf -f ../conf/(agent config file name)

Seguir un archivo

Aquí están un ejemplo de cómo leer syslog en un sistema CentOS. En la práctica, te probablemente utiliza syslog y luego configura Flume para escuchar mensajes TCP o UDP. Pero aquí solo utiliza cola.

Queremos almacenar estos datos en Hadoop, así que Haz un directorio:

    hadoop fs -mkdir /flume

Aquí está nuestro archivo de configuración. Fíjate en los tipos exec y hdfs. Cada tipo tiene diferentes opciones. Por ejemplo, el tipo exec requiere un comando para ejecutarse. Y el tipo hdfs requiere la ruta.

    cat ../conf/flume.conf

# give names to the agent, source, sinks, and channels
agent.sources=tail
agent.sinks=hdfs
agent.channels=ch1

# tell it what command to run
agent.sources.tail.type=exec
agent.sources.tail.command=tail -F /var/log/messages

# give Hadoop options
agent.sinks.hdfs.type=hdfs
agent.sinks.hdfs.hdfs.path=/flume
agent.sinks.hdfs.hdfs.filePrefix=syslog
agent.sinks.hdfs.hdfs.rollInterval=10
agent.sinks.hdfs.hdfs.rollSize=0

# give channel options
agent.channels.ch1.type=memory
agent.channels.ch1.capacity=1000

# connect the sources and sinks to the channel
agent.sources.tail.channels=ch1
agent.sinks.hdfs.channel=ch1

Comienza el agente de flume. El nombre del agente debe coincidir con el nombre del agente te puesto en flume.conf

    ./flume-ng agent -n (agent  name) -c conf -f ../conf/(config file)

Entonces stdout escribirá mensajes mostrando que los datos han sido escritos:

    17/03/08 16:42:44 INFO hdfs.HDFSEventSink: Closing /flume/syslog
17/03/08 16:42:44 INFO hdfs.BucketWriter: Closing /flume/syslog.1488987752411.tmp
17/03/08 16:42:44 INFO hdfs.BucketWriter: Renaming /flume/syslog.1488987752411.tmp to /flume/syslog.1488987752411

Podemos ver lo que escribió usando cat. No siempre será texto legible.

    hadoop fs -cat /flume/syslog.1488987752411

Si tienes algún error en el archivo de configuración, Flume te dará un rastreo Java Stack con un mensaje de error bastante amigable que te dice qué está mal.

Twitter

Aquí escribimos tuits de Twitter, usando la API de streaming de Twitter, y luego los guardamos en Hadoop. Para hacer esto primero te hay que Crea una app en https://apps.twitter.com/, que te dará las claves te necesitas para conectarse.

Los Tweets no tienen estructura en Flume. Así que si te quieres trabajar con ellos te los escribirías, por ejemplo, en Hive. Pero para eso te tener que Crea el esquema de Twitter en Hive. te puede buscar instrucciones de cómo hacerlo en internet. En este ejemplo simplemente los escribimos en Hadoop.

    TwitterAgent.sources = Twitter
TwitterAgent.channels = t1
TwitterAgent.sinks = hdfs

TwitterAgent.sources.Twitter.type = org.apache.flume.source.twitter.TwitterSource
TwitterAgent.sources.Twitter.consumerKey = (obfuscated)
TwitterAgent.sources.Twitter.consumerSecret =  (obfuscated)
TwitterAgent.sources.Twitter.accessToken =  (obfuscated)
TwitterAgent.sources.Twitter.accessTokenSecret =  (obfuscated)
TwitterAgent.sources.Twitter.keywords = health
TwitterAgent.sinks.console.type = logger

TwitterAgent.sinks.hdfs.type=hdfs
TwitterAgent.sinks.hdfs.hdfs.path=/flume/twitter
TwitterAgent.sinks.hdfs.hdfs.filePrefix=messages
TwitterAgent.sinks.hdfs.hdfs.rollInterval=10
TwitterAgent.sinks.hdfs.hdfs.rollSize=0

TwitterAgent.channels.t1.type=memory
TwitterAgent.channels.t1.capacity = 1000


TwitterAgent.sources.Twitter.channels = t1
TwitterAgent.sinks.hdfs.channel = t1

Luego enumera los archivos escritos en Hadoop:

    -rw-r--r--   1 root supergroup  217127 2017-03-08 14:54 
/flume/twitter/messages.1488981289896
-rw-r--r--   1 root supergroup  232847 2017-03-08 14:55
/flume/twitter/messages.1488981289897
-rw-r--r--   1 root supergroup     227083 2017-03-08 14:55 
/flume/twitter/messages.1488981289898

te puede registrar tuits en la consola usando:

    TwitterAgent.sinks.console.type = logger

Pero como te ves, son en Hex, así que es difícil de leer:

    7/03/08 14:44:39 INFO sink.LoggerSink: Event: { headers:{} body: 4F 62 6A 01 02 16 61
76 72 6F 2E 73 63 68 65 6D Obj...avro.schem }
17/03/08 14:44:41 INFO sink.LoggerSink: Event: { headers:{} body: 4F 62 6A 01 02 16 61 
76 72 6F 2E 73 63 68 65 6D Obj...avro.schem }

Eso están una introducción básica a Flume. Por te puede Ve no están un producto complicado en absoluto. Como ejercicio, te quizá intente ahora escribir syslogs para Flume.

Estas publicaciones son mías y no representan necesariamente la posición, estrategias u opinión de BMC.

Más de Orquestación

Suscríbete al Informe

Al registrarse para esta oferta te son confirmar que te leído y aceptado la Política de Privacidad de BMC.

Gracias te

Tú te has suscrito a The Brief
El Brief abarca la orquestación de mainframe y empresa—BMC AMI y Control-M—y la investigación de analistas, despliegues de clientes y eventos en ambas áreas.