Практическое занятие: Обработка журналов с помощью Apache HadoopИсточник: IBM
Журналы могут иметь самые разные формы, однако вне зависимости от этого результатом роста приложений и инфраструктур является огромное количество распределенных данных, углубленное исследование которых может принести определенную пользу. Журналы сегодняшних серверов - журналы веб-серверов и почтовых серверов, журналы ядра и журналы загрузки - содержат обширный набор насыщенной информации. Огромные массивы распределенных данных - идеальная область применения для технологии Apache Hadoop, а журнальные файлы как раз и представляют собой упорядоченные по времени структурированные текстовые данные. Обработку журнала можно использовать для извлечения из него разнообразной информации. Один из наиболее распространенных сценариев применения состоит в извлечении количества ошибок или количества наступлений в системе некоторого события (например, неудачных попыток входа в систему). Вы также можете извлекать различные показатели производительности (например, количество соединений или количество транзакций в секунду). Другой пример полезной информации - извлечение (map) из веб-журналов соответствующих сведений и подсчет количества посещений сайта (reduce). Кроме того, такой анализ позволяет идентифицировать уникальные посещения пользователей в дополнение к статистическим сведениям по обращению к файлам. Эти упражнения позволят вам получить практические навыки в следующих областях:
Чтобы извлечь максимальную пользу из этих упражнений, вы должны обладать базовыми практическими знаниями в области Linux®. Кроме того, для развертывания простой Hadoop-среды полезно наличие определенных знаний в области виртуальных машин. Упражнение 1. Развертывание простой Hadoop-среды Существует два способа развертывания Hadoop-среды. Первый способ состоит в установке программного обеспечения Hadoop и его последующего конфигурирования в своей ИТ-среде (самый простой случай - одноузловой экземпляр, все демоны которого исполняются в единственном узле). Второй и более простой способ состоит в использовании виртуальной машины Cloudera's Hadoop Demo VM (которая содержит образ Linux и заранее сконфигурированный экземпляр Hadoop). Виртуальная машина Cloudera исполняется в среде VMware, KVM (Kernel-based Virtual Machine) или Virtualbox. Выберите предпочтительный способ и выполните установку. После этого выполните следующее задание.
Упражнение 2. Взаимодействие с файловой системой HDFS HDFS - это файловая система специального назначения, которая в рамках Hadoop-кластера управляет данными и репликами, распределяя их по вычислительным узлам с целью эффективной обработки. Несмотря на то, что HDFS - это файловая система специального назначения, в ней реализованы многие команды типовых файловых систем. Для извлечения справочной информации по Hadoop воспользуйтесь командой hadoop dfs. Выполните следующие действия
Упражнение 3. Написание простого MapReduce-приложения Написание MapReduce-приложения для подсчета слов не составляет никаких сложностей. Создайте MapReduce-приложение на языке Python, а затем выполните его с типовым набором данных. Не забывайте, что Hadoop сортирует вывод Map-шага таким образом, чтобы похожие слова располагались рядом, что обеспечивает полезную оптимизацию для шага Reduce. Упражнение 4. Написание простого Pig-запроса Инструмент Pig позволяет создавать простые скрипты, которые транслируются в MapReduce-приложения. В этом упражнении вы извлекаете все журнальные записи (из каталога /var/log/messages), которые содержат слово kernel: и слово terminating.
Упражнение 5. Написание агрегирующего Pig-запроса Сообщения для журнала генерируются различными источниками в ядре Linux (такими как kernel или dhclient). В этом примере вы хотите выявить различные источники, которые генерируют журнальные сообщения, а также количество журнальных сообщений, поступивших из каждого источника.
Конкретный выходной результат будет зависеть от вашей конкретной установки Hadoop и от ее конфигурации. Решение упражнения 1. Развертывание простой Hadoop-среды В упражнении 1 вы выполняете команду ls в файловой системе HDFS. В листинге 1 демонстрируется правильное решение. Листинг 1. Выполнение команды ls в файловой системе HDFS
В зависимости от использования возможно присутствие различного количества файлов. Решение для упражнения 2. Взаимодействие с файловой системой HDFS В упражнении 2 вы создаете в файловой системе HDFS подкаталог и копируете в него некоторый файл. Обратите внимание, что вы создаете тестовые данные посредством перемещения буфера сообщений ядра в файл. Для дополнительного надежности просмотрите файл в файловой системе HDFS с помощью команды cat (см. листинг 2). Листинг 2. Манипуляции с файловой системой HDFS
Решение упражнения 3. Написание простого MapReduce-приложения В упражнении 3 вы создаете простое MapReduce-приложение на языке Python для подсчета слов. Python - это действительно отличный язык для реализации примера с подсчетом слов. В этом упражнении предполагается, что вы уже выполнили шаги упражнения 2 (по перемещению данных в файловую систему HDFS). В листинге 3 показано соответствующее Map-приложение. Листинг 3. Map-приложение на языке Python
В листинге 4 показано соответствующее Reduce-приложение. Листинг 4. Reduce-приложение на языке Python
В листинге 5 демонстрируется процесс вызова MapReduce-примера на языке Python в среде Hadoop. Листинг 5. Тестирование MapReduce-приложения на языке Python в среде Hadoop
Решение для упражнения 4. Написание простого Pig-запроса В упражнении 4 вы извлекаете элементы журнала /var/log/messages, которые содержат слово kernel: и слово terminating. В этом случае вы используете инструмент Pig в локальном режиме для запроса к локальному файлу (см. листинг 6). Загрузите файл в Pig-отношение (log), отфильтруйте его содержимое, чтобы оставить лишь сообщения со словом kernel, а затем отфильтруйте полученное отношение, оставив лишь сообщения со словом terminating. Листинг 6. Извлечение из журнала всех сообщений, содержащих слова kernel и terminating
Решение для упражнения 5. Написание агрегирующего Pig-запроса В упражнении 5 вы извлекали из каталога /var/log/messages источники сообщений для журналов и количество таких сообщений. В этом случае мы создаем запрашивающий скрипт и выполняем его в локальном режиме Pig. В листинге 7 вы загружаете файл и производите разбор входной информации, используя пробел в качестве разделителя. Затем вы присваиваете поля строки с разделителями своим поименованным элементам. Сначала вы используете оператор GROUP для группировки сообщений по их источнику, а затем применяете операторы FOREACH и COUNT для агрегирования своих данных. Листинг 7. Скрипт для работы с каталогом /var/log/messages
Результаты выполнения скрипта показаны в листинге 8. Листинг 8. Результаты выполнения скрипта
|