Масштабирование сбора данных с помощью Apache Flume и Python

Автор: Дзен и искусство компьютерного программирования

1. Введение

Apache Flume — это распределенный и надежный сборщик журналов с открытым исходным кодом, предоставляемый Cloudera. Он широко используется в таких сценариях, как ведение журнала, сбор событий и потоковая передача данных. Он может очень хорошо обрабатывать большие объемы данных журналов и эффективно обеспечивать целостность, актуальность и своевременность данных журналов. Серверная часть хранилища данных Flume поддерживает HDFS, HBase, Kafka и другие системы хранения. Flume также может выполнять операции предварительной обработки, такие как сегментация, сжатие и шифрование данных, для дальнейшего повышения безопасности, доступности, производительности и т. д. данных. В этой статье мы реализуем простое приложение для сбора журналов на языке Python, чтобы имитировать процесс сбора, агрегации и анализа данных журналов в сценариях с высоким уровнем параллелизма. Поскольку Flume и Python тесно интегрированы, эта статья также посвящена их интеграции. Я считаю, что, прочитав эту статью, читатели смогут понять, как использовать Flume для агрегирования данных из нескольких источников и как использовать Python для очистки, расчета и анализа собранных логов.

2. Объяснение основных понятий и терминов

2.1 Знакомство с Flume

Apache Flume (сокращенно Flume) — это распределенный, надежный и отказоустойчивый сервис для сбора, агрегирования и перемещения больших объемов файлов журналов. Его основные особенности включают в себя:

  1. Надежность: Flume гарантирует, что данные не будут потеряны. Даже если сам Flume или источник журнала выйдет из строя, целостность данных не будет затронута;

  2. Целостность данных: Flume использует простой и удобный в использовании механизм транзакций, гарантирующий, что данные не будут уничтожены или повреждены;

  3. Эффективность: Flume может пакетно обрабатывать и быстро передавать журналы, обеспечивая при этом низкую задержку, высокую пропускную способность и высокую отказоустойчивость;

  4. Поддержка нескольких серверов хранения: Flume поддерживает несколько серверов хранения, таких как HDFS, HBase, Kakfa и т. д. Вы можете выбрать различные серверы хранения в соответствии с вашими потребностями;

  5. Поддержка предварительной обработки данных: Flume поддерживает операции предварительной обработки, такие как сегментация, сжатие и шифрование данных, для дальнейшего повышения безопасности, доступности, производительности и т. д.

2.2 Введение в Python

Python — это бесплатный кроссплатформенный язык программирования с открытым исходным кодом. Его философия дизайна подчеркивает читаемость кода, простоту, переносимость и многие другие преимущества. Первоначально Python был разработан Гвидо ван Россумом, а первая версия была выпущена в 1991 году. Последняя версия Python — 3.7.0 по состоянию на июль 2019 года. Python имеет множество библиотек и модулей для поддержки веб-разработки, научных вычислений, интеллектуального анализа данных, машинного обучения и других областей и стал очень популярным языком программирования.

2.3 Журнал

Журналы — это текстовая информация, в которой фиксируется рабочее состояние и поток обработки приложения. Обычно они содержат такую ​​информацию, как отметка времени, уровень, идентификатор потока, категория, сообщение и т. д. В реальных производственных средах журналы являются очень важным источником информации. В больших программных системах часто генерируется большой объем данных журнала. Помимо помощи разработчикам в обнаружении проблем, данные журналов также можно использовать для выполнения некоторых задач статистики, мониторинга и других задач. Поэтому технические знания и инструменты, необходимые для сбора, обработки, анализа, поиска и составления отчетов, также очень важны.

3. Основные принципы алгоритма и конкретные этапы работы.

3.1 Модель данных журнала

Модель данных журнала относится к тому, как данные журнала организованы и структурированы, чтобы облегчить их извлечение, анализ и понимание. Как правило, модель данных журнала включает имя журнала, поля, метки, категории, уровни и т. д. На следующем рисунке показана наиболее распространенная модель данных журнала — четырехфакторная модель:

В четырехэлементной модели четырьмя элементами журнала являются:

  1. Имя журнала : Имя журнала относится к идентификатору имени журнала. Обычно имя журнала генерируется приложением и указывает на системный процесс или службу, которому принадлежит журнал.

  2. Поля журнала : Поля журнала относятся ко всей соответствующей информации в журнале. Он состоит из разных полей, каждое из которых может иметь свое имя, значение и тип. Например, журнал может содержать такие поля, как «Идентификатор пользователя», «Время доступа», «Параметры запроса» и т. д.

  3. Тег журнала : Тег журнала относится к дополнительной информации, описывающей журнал. Это может быть любая информация, которая облегчает извлечение журналов, их анализ и составление отчетов, например имя хоста, IP-адрес, информация о среде и т. д.

  4. Уровень журнала : Уровень журнала относится к классификации важности журнала. Вообще говоря, уровни журнала делятся на семь уровней (от низкого к высокому): DEBUG, INFO, WARN, ERROR, FATAL, TRACE и ALL. Среди них DEBUG имеет самый низкий уровень, а FATAL — самый высокий.

3.2 Базовая конфигурация лотка

Установить

Flume можно установить через пакет исходного кода или загрузив скомпилированный двоичный пакет. Конкретные методы можно найти в инструкциях по установке на официальном веб-сайте.

Конфигурация

Файл конфигурации Flume называется flume.conf и по умолчанию хранится в каталоге /etc/flume. Файлы конфигурации Flume состоят из трех основных частей:

  1. агент
  2. источники
  3. каналы
  4. тонет

Агент: агент определяет основные свойства Flume, такие как интервал проверки конфигурации, возможность запуска независимо, режим работы и т. д. source:sources определяет источник данных журнала. Flume поддерживает множество источников данных, включая AvroSource, ExecSource, SpoolDirectorySource и т. д. Здесь мы используем ExecSource только для имитации сбора журналов. каналы: каналы — один из наиболее важных компонентов Flume, отвечающих за хранение, кэширование и передачу данных журнала. Он поддерживает несколько стратегий буферизации, включая память, локальный диск, Thrift, MySQL и т. д. Здесь мы используем только кэш памяти. приемники: приемники определяют место назначения вывода журнала. Flume поддерживает различные цели вывода, включая HDFS, Hive, LoggerSink, SolrJ, FileChannel, KafkaSink и т. д. Здесь мы используем LoggerSink только для вывода логов на консоль. Конкретные примеры конфигурации следующие:

#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"

Среди них .command— команда выполнения, укажите tail -Fкоманду для мониторинга /var/logs/*.logвсех файлов журналов в папке. .filegroupsУкажите группу файлов журнала, здесь только одна группа logs. .batchSizeУстановите размер пакетной передачи, здесь он установлен на 1000. .batchTimeoutУстановите таймаут пакетной передачи, здесь он установлен на 30 секунд.

Затем запустите Flume, путь к файлу конфигурации — /etc/flume/flume.conf, а команда — flume-ng agent --config conf -f flume.conf -n quickstart-agent -Dflume.root.logger=INFO,console. Затем подождите, пока Flume запустится нормально, и вы увидите, что данные журнала начнут выводиться на консоль.

3.3 Сбор данных

Сбор данных — это самое основное звено в данных журнала. Данные журнала обычно проходят следующие этапы:

  1. Сбор: чтение файлов журналов, получение журналов с сервера журналов и т. д., а также чтение данных журналов на компьютер, на котором расположен Flume.

  2. Разделить: Если файл журнала слишком велик, вам необходимо разделить файл журнала. Flume предоставляет несколько плагинов для полной сегментации файлов журналов, например разделители SpoolDirArchive и TaildirNewLineEscaped.

  3. Анализ: Flume поддерживает несколько анализаторов форматов журналов, таких как RegexParser, Log4jEventDeserializer и т. д. После анализа данных журнала они будут сохранены в кэше памяти в соответствии с указанным форматом.

  4. Маршрутизация: Flume отправляет проверенные данные журнала в указанные каналы, настраивая правила фильтрации.

  5. Потребление: когда данные журнала поступают в каналы, Flume будет использовать их по порядку и записывать в указанное место назначения (например, HDFS, HBase, MySQL и т. д.).

  6. Очистка: Flume поддерживает различные методы очистки данных журналов, такие как удаление специальных символов, преобразование IP-адресов, дедупликация и т. д.

Конкретные шаги:

  1. Чтение данных журнала из источника журнала. Вы можете использовать ExecSource или SpoolDirectorySource в качестве источника данных для записи данных журнала в канал кэша Flume.

  2. Анализ и очистка данных: Flume поддерживает несколько анализаторов форматов журналов, таких как RegexParser, Log4jEventDeserializer и т. д. Вы также можете писать собственные анализаторы. В то же время Flume поддерживает различные методы очистки данных журналов, такие как удаление специальных символов, преобразование IP-адресов, дедупликация и т. д.

  3. Отправляйте данные в каналы в соответствии с правилами маршрутизации: Flume поддерживает правила маршрутизации, основанные на регулярных выражениях, типах событий, временных метках, хостах и ​​т. д.

  4. Храните данные в каналах: Flume поддерживает несколько типов каналов, включая каналы памяти, файловые каналы, каналы базы данных и т. д. Различные типы каналов можно гибко настроить с помощью файлов конфигурации.

  5. Запись данных в место назначения: Flume поддерживает несколько мест назначения, включая HDFS, HBase, MySQL и т. д., и может быть гибко настроен с помощью файлов конфигурации.

3.4 Обработка данных

Обработка данных — это следующий шаг после сбора данных журнала. Основными задачами являются:

  1. Анализ данных: анализируйте данные журналов, кэшированные Flume, в соответствии с потребностями бизнеса для формирования показателей или данных, связанных с бизнесом.

  2. Оценка качества журнала: оценивайте точность, полноту, работоспособность и другие параметры данных журнала, кэшированных Flume, обнаруживайте аномальные данные и обрабатывайте их соответствующим образом.

  3. Отчет о данных: суммирование, подсчет, запрос и другие операции с данными журнала, кэшированными Flume, для формирования отчета с данными и представления его персоналу, связанному с бизнесом.

  4. Хранение данных: храните данные журнала, кэшированные Flume, на различных устройствах хранения, таких как HDFS, MySQL и т. д.

  5. Конвейерная обработка данных. В процессе сбора, обработки и хранения журналов можно спроектировать конвейер обработки данных, позволяющий передавать данные журналов между различными ссылками.

Конкретные шаги:

  1. Используйте платформы обработки больших данных, такие как MapReduce или Spark, для анализа и обработки данных журналов, кэшированных Flume.

  2. Запросите кэшированные данные журнала Flume через механизмы SQL, такие как Hive, Impala и Drill.

  3. Используйте HTTP Post Sink, предоставляемый Flume, для синхронизации данных с внешними системами, такими как Elasticsearch, Kafka и т. д.

  4. Используйте Sqoop Source и Sqoop Connector, предоставленные Flume, для импорта данных в кластер Hadoop.

  5. Используйте канал JDBC, предоставленный Flume, для импорта данных в реляционную базу данных.

  6. Используйте JMS Sink, предоставленный Flume, для синхронизации данных с внешними системами.

рекомендация

отblog.csdn.net/universsky2015/article/details/133504367
рекомендация