Escalar la recopilación de datos con Apache Flume y Python

Autor: Zen y el arte de la programación informática

1. Introducción

Apache Flume es un recopilador de registros confiable, distribuido y de código abierto proporcionado por Cloudera. Se usa ampliamente en escenarios como registro, recopilación de eventos y transmisión de datos en tiempo real. Puede procesar muy bien datos de registro masivos y puede garantizar de manera efectiva la integridad, el tiempo real y la puntualidad de los datos de registro. El backend de almacenamiento de datos de Flume admite HDFS, HBase, Kafka y otros sistemas de almacenamiento. Flume también puede realizar operaciones de preprocesamiento como segmentación, compresión y cifrado de datos para mejorar aún más la seguridad, la disponibilidad, el rendimiento, etc. En este artículo, implementaremos una aplicación de recopilación de registros simple a través del lenguaje Python para simular el proceso de recopilación, agregación y análisis de datos de registro en escenarios de alta concurrencia. Dado que Flume y Python están estrechamente integrados, este artículo también es un artículo sobre la integración de los dos. Creo que al leer este artículo, los lectores pueden comprender cómo usar Flume para agregar datos de múltiples fuentes y cómo usar Python para limpiar, calcular y analizar los registros recopilados.

2. Explicación de conceptos y términos básicos

2.1 Introducción al canal

Apache Flume (flume para abreviar) es un servicio distribuido, confiable y tolerante a fallas para recopilar, agregar y mover grandes cantidades de archivos de registro. Sus principales características incluyen:

  1. Fiabilidad: Flume garantiza que los datos no se perderán. Incluso si el propio Flume o la fuente del registro fallan, la integridad de los datos no se verá afectada;

  2. Integridad de los datos: Flume utiliza un mecanismo de transacción simple y fácil de usar para garantizar que los datos no se destruyan ni dañen;

  3. Eficiencia: Flume puede procesar por lotes y transmitir registros rápidamente, al mismo tiempo que tiene baja latencia, alto rendimiento y alta tolerancia a fallas;

  4. Admite múltiples backends de almacenamiento: Flume admite múltiples backends de almacenamiento, como HDFS, HBase, Kakfa, etc. Puede elegir diferentes backends de almacenamiento según sus necesidades;

  5. Admite preprocesamiento de datos: Flume admite operaciones de preprocesamiento como segmentación, compresión y cifrado de datos para mejorar aún más la seguridad, la disponibilidad, el rendimiento, etc.

2.2 Introducción a Python

Python es un lenguaje de programación informática multiplataforma, gratuito y de código abierto. Su filosofía de diseño enfatiza la legibilidad del código, la simplicidad, la portabilidad y muchas otras ventajas. Python fue desarrollado originalmente por Guido van Rossum y la primera versión se lanzó en 1991. La última versión de Python es 3.7.0 en julio de 2019. Python tiene una gran cantidad de bibliotecas y módulos para respaldar el desarrollo web, la informática científica, la minería de datos, el aprendizaje automático y otros campos, y se ha convertido en un lenguaje de programación muy popular.

2.3 Registro

Los registros son información de texto que registra el estado de ejecución y el flujo de procesamiento de una aplicación. Por lo general, contienen información como marca de tiempo, nivel, ID de hilo, categoría, mensaje, etc. En entornos de producción reales, los registros son una fuente de información muy importante. En sistemas de software grandes, a menudo se genera una gran cantidad de datos de registro. Además de ayudar a los desarrolladores a localizar problemas, los datos de registro también se pueden utilizar para realizar algunas estadísticas, monitoreo y otras tareas. Por lo tanto, el conocimiento técnico y las herramientas involucradas en la recopilación, el procesamiento, el análisis, la búsqueda y la generación de informes de datos de registros también son muy importantes.

3. Principios básicos del algoritmo y pasos operativos específicos.

3.1 Modelo de datos de registro

Un modelo de datos de registro se refiere a cómo se organizan y estructuran los datos de registro para que sean fáciles de recuperar, analizar y comprender. Generalmente, el modelo de datos de registro incluye nombre de registro, campos, etiquetas, categorías, niveles, etc. La siguiente figura muestra el modelo de datos de registro más común: el modelo de cuatro factores:

En el modelo de cuatro elementos, los cuatro elementos del registro son:

  1. Nombre del registro : el nombre del registro se refiere al identificador del nombre del registro. Generalmente, el nombre del registro lo genera la aplicación e indica el proceso o servicio del sistema al que pertenece el registro.

  2. Campos de registro : los campos de registro hacen referencia a toda la información relevante del registro. Consta de diferentes campos, cada uno de los cuales puede tener su propio nombre, valor y tipo. Por ejemplo, un registro puede contener campos como "ID de usuario", "Tiempo de acceso", "Parámetros de solicitud", etc.

  3. Etiqueta de registro : la etiqueta de registro se refiere a información adicional que describe el registro. Puede ser cualquier información que facilite la recuperación, el análisis y la generación de informes de registros, como el nombre de host, la dirección IP, la información del entorno, etc.

  4. Nivel de registro : el nivel de registro se refiere a la clasificación de la importancia del registro. En términos generales, los niveles de registro se dividen en siete niveles (de menor a mayor): DEBUG, INFO, WARN, ERROR, FATAL, TRACE y ALL. Entre ellos, DEBUG tiene el nivel más bajo y FATAL tiene el nivel más alto.

3.2 Configuración básica del canal

Instalar

Flume se puede instalar a través del paquete de código fuente o descargando el paquete binario compilado. Para métodos específicos, consulte las instrucciones de instalación del sitio web oficial.

Configuración

El archivo de configuración de Flume se llama flume.conf y se almacena en el directorio /etc/flume de forma predeterminada. Los archivos de configuración de Flume contienen tres partes principales:

  1. agente
  2. fuentes
  3. canales
  4. se hunde

Agente: el agente define las propiedades básicas de Flume, como el intervalo de verificación de configuración, si se puede ejecutar de forma independiente, el modo de operación, etc. fuentes: fuentes define la fuente de datos del registro. Flume admite una variedad de fuentes de datos, incluidas AvroSource, ExecSource, SpoolDirectorySource, etc. Aquí solo usamos ExecSource para simular la recopilación de registros. Canales: Los canales son uno de los componentes más importantes de Flume, que son responsables de almacenar, almacenar en caché y transmitir datos de registro. Admite múltiples estrategias de almacenamiento en búfer, incluida memoria, disco local, Thrift, MySQL, etc. Aquí solo usamos memoria caché. sumideros: sumideros define el destino de salida del registro. Flume admite una variedad de objetivos de salida, incluidos HDFS, Hive, LoggerSink, SolrJ, FileChannel, KafkaSink, etc. Aquí solo usamos LoggerSink para imprimir registros en la consola. Los ejemplos de configuración específicos son los siguientes:

#agent name
agent.name=quickstart-agent

#sources
source.exec = exec
 .command = tail -F /var/logs/*.log
 .filegroups = logs
 .batchSize = 1000
 .batchTimeout = 30 seconds

#channels
channel.memory.type = memory
channel.memory.capacity = 10000

#sinks
sink.console.type = logger
sink.console.loggerClassName = org.apache.flume.sink.ConsoleLogger
sink.console.logFormat = "%-4r %d{ISO8601} %-5p %c{1.}:%L - %m%n"

Entre ellos, .commandse encuentra el comando de ejecución, que especifica tail -Fel comando para monitorear /var/logs/*.logtodos los archivos de registro en la carpeta. .filegroupsEspecifique el grupo de archivos de registro; aquí solo hay un grupo logs. .batchSizeEstablezca el tamaño de la transferencia por lotes, aquí está configurado en 1000. .batchTimeoutEstablezca el tiempo de espera de la transferencia por lotes, aquí se establece en 30 segundos.

Luego inicie Flume, la ruta del archivo de configuración es /etc/flume/flume.confy el comando es flume-ng agent --config conf -f flume.conf -n quickstart-agent -Dflume.root.logger=INFO,console. Luego espere a que Flume se inicie normalmente y verá que los datos de registro comienzan a enviarse a la consola.

3.3 Recopilación de datos

La recopilación de datos es el vínculo más básico en los datos de registro. Los datos de registro suelen pasar por las siguientes etapas:

  1. Colección: lea archivos de registro, extraiga registros del servidor de registros, etc., y lea los datos de registro en la máquina donde se encuentra Flume.

  2. Dividir: si el archivo de registro es demasiado grande, debe dividirlo. Flume proporciona algunos complementos para completar la segmentación de archivos de registro, como los divisores SpoolDirArchive y TaildirNewLineEscaped.

  3. Análisis: Flume admite múltiples analizadores de formato de registro, como RegexParser, Log4jEventDeserializer, etc. Una vez analizados los datos del registro, se almacenarán en la memoria caché de acuerdo con el formato especificado.

  4. Enrutamiento: Flume envía datos de registro calificados a canales específicos mediante la configuración de reglas de filtrado.

  5. Consumo: cuando los datos de registro ingresan a los canales, Flume los consumirá en orden y los escribirá en el destino especificado (como HDFS, HBase, MySQL, etc.).

  6. Limpieza: Flume admite una variedad de métodos de limpieza de datos de registro, como eliminar caracteres especiales, conversión de direcciones IP, deduplicación, etc.

Pasos específicos:

  1. Leer datos de registro desde la fuente de registro: puede usar ExecSource o SpoolDirectorySource como fuente de datos para escribir los datos de registro en el canal de caché de Flume.

  2. Analizar y limpiar datos: Flume admite múltiples analizadores de formato de registro, como RegexParser, Log4jEventDeserializer, etc. También puede escribir analizadores personalizados. Al mismo tiempo, Flume admite una variedad de métodos de limpieza de datos de registro, como eliminar caracteres especiales, conversión de direcciones IP, deduplicación, etc.

  3. Envíe datos a canales de acuerdo con las reglas de enrutamiento: Flume admite reglas de enrutamiento basadas en expresiones regulares, tipos de eventos, marcas de tiempo, hosts, etc.

  4. Almacene datos en canales: Flume admite múltiples tipos de canales, incluidos canales de memoria, canales de archivos, canales de bases de datos, etc. Se pueden configurar diferentes tipos de canales de manera flexible a través de archivos de configuración.

  5. Escriba datos en el destino: Flume admite múltiples destinos, incluidos HDFS, HBase, MySQL, etc., y se puede configurar de manera flexible a través de archivos de configuración.

3.4 Procesamiento de datos

El procesamiento de datos es el siguiente paso después de la recopilación de datos de registro. Las principales tareas son:

  1. Análisis de datos: analice los datos de registro almacenados en caché por Flume de acuerdo con las necesidades comerciales para formar indicadores o datos relacionados con el negocio.

  2. Evaluación de la calidad del registro: evalúe la precisión, integridad, operatividad y otras dimensiones de los datos de registro almacenados en caché por Flume, descubra datos anormales y trátelos en consecuencia.

  3. Informe de datos: resuma, cuente, consulte y otras operaciones sobre los datos de registro almacenados en caché por Flume para formar un informe de datos y presentarlo al personal relacionado con la empresa.

  4. Almacenamiento de datos: almacene los datos de registro almacenados en caché por Flume en varios dispositivos de almacenamiento, como HDFS, MySQL, etc.

  5. Procesamiento de datos en canalización: durante el proceso de recopilación, procesamiento y almacenamiento de registros, se puede diseñar un canal de procesamiento de datos para permitir que los datos de registro se transfieran entre varios enlaces.

Pasos específicos:

  1. Utilice marcos de procesamiento de big data como MapReduce o Spark para analizar y procesar los datos de registro almacenados en caché por Flume.

  2. Query Flume almacenó en caché los datos de registro a través de motores SQL como Hive, Impala y Drill.

  3. Utilice el HTTP Post Sink proporcionado por Flume para sincronizar datos con sistemas externos, como Elasticsearch, Kafka, etc.

  4. Utilice Sqoop Source y Sqoop Connector proporcionados por Flume para importar datos al clúster de Hadoop.

  5. Utilice el canal JDBC proporcionado por Flume para importar datos a una base de datos relacional.

  6. Utilice el JMS Sink proporcionado por Flume para sincronizar datos con sistemas externos.

Supongo que te gusta

Origin blog.csdn.net/universsky2015/article/details/133504367
Recomendado
Clasificación