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.
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.
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.
Guía Hadoop
- Tutorial de Hadoop para principiantes: Conceptos básicos de Hadoop
- Introducción a la administración Hadoop
- Introducción a la seguridad Hadoop
- Introducción al Apache Flume
- Una introducción a Hive
- Introducción a HDFS
- Introducción a Hbase
- Ejemplos de Hadoop: 5 casos de utiliza en el mundo real
- Carreras en Hadoop: Conseguir empleo
- Preguntas de entrevista en Hadoop
- Introducción a la analítica Hadoop
- Introducción a Apache Pig
- Introducción al hilo apache
- Introducción a la arquitectura Hadoop
- Ventajas y ventajas de Hadoop
- Usando Hadoop con Apache Cassandra
- Hadoop vs Kubernetes: ¿Acabarán K8s y Cloud Native con Hadoop?
- Certificaciones Hadoop
- Clústeres Hadoop: Una introducción
- Ecosistema y Componentes Hadoop
Estas publicaciones son mías y no representan necesariamente la posición, estrategias u opinión de BMC.