(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Практическое занятие: Обработка журналов с помощью Apache Hadoop

Источник: IBM

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

Обработку журнала можно использовать для извлечения из него разнообразной информации. Один из наиболее распространенных сценариев применения состоит в извлечении количества ошибок или количества наступлений в системе некоторого события (например, неудачных попыток входа в систему). Вы также можете извлекать различные показатели производительности (например, количество соединений или количество транзакций в секунду). Другой пример полезной информации - извлечение (map) из веб-журналов соответствующих сведений и подсчет количества посещений сайта (reduce). Кроме того, такой анализ позволяет идентифицировать уникальные посещения пользователей в дополнение к статистическим сведениям по обращению к файлам.

Обзор

Эти упражнения позволят вам получить практические навыки в следующих областях:

  • Развертывание простой Hadoop-среды
  • Взаимодействие с файловой системой HDFS (Hadoop file system)
  • Написание простого MapReduce-приложения
  • Написание фильтрующего Pig-запроса
  • Написание агрегирующего Pig-запроса

Предварительные условия

Чтобы извлечь максимальную пользу из этих упражнений, вы должны обладать базовыми практическими знаниями в области Linux®. Кроме того, для развертывания простой Hadoop-среды полезно наличие определенных знаний в области виртуальных машин.


Упражнение 1. Развертывание простой Hadoop-среды

Существует два способа развертывания Hadoop-среды. Первый способ состоит в установке программного обеспечения Hadoop и его последующего конфигурирования в своей ИТ-среде (самый простой случай - одноузловой экземпляр, все демоны которого исполняются в единственном узле).

Второй и более простой способ состоит в использовании виртуальной машины Cloudera's Hadoop Demo VM (которая содержит образ Linux и заранее сконфигурированный экземпляр Hadoop). Виртуальная машина Cloudera исполняется в среде VMware, KVM (Kernel-based Virtual Machine) или Virtualbox.

Выберите предпочтительный способ и выполните установку. После этого выполните следующее задание.

  • Убедитесь в функционировании Hadoop посредством выдачи HDFS-команды ls.

Упражнение 2. Взаимодействие с файловой системой HDFS

HDFS - это файловая система специального назначения, которая в рамках Hadoop-кластера управляет данными и репликами, распределяя их по вычислительным узлам с целью эффективной обработки. Несмотря на то, что HDFS - это файловая система специального назначения, в ней реализованы многие команды типовых файловых систем. Для извлечения справочной информации по Hadoop воспользуйтесь командой hadoop dfs. Выполните следующие действия

  • Создайте тестовый подкаталог внутри файловой системы HDFS.
  • С помощью команды copyFromLocal переместите какой-либо файл из локальной файловой системы в вышеупомянутый подкаталог HDFS.
  • Для дополнительной уверенности просмотрите перемещенный файл в файловой системе HDFS с помощью команды hadoop dfs .

Упражнение 3. Написание простого MapReduce-приложения

Написание MapReduce-приложения для подсчета слов не составляет никаких сложностей. Создайте MapReduce-приложение на языке Python, а затем выполните его с типовым набором данных. Не забывайте, что Hadoop сортирует вывод Map-шага таким образом, чтобы похожие слова располагались рядом, что обеспечивает полезную оптимизацию для шага Reduce.


Упражнение 4. Написание простого Pig-запроса

Инструмент Pig позволяет создавать простые скрипты, которые транслируются в MapReduce-приложения. В этом упражнении вы извлекаете все журнальные записи (из каталога /var/log/messages), которые содержат слово kernel: и слово terminating.

  • Создайте скрипт, который извлекает все журнальные строки по заранее заданным критериям.

Упражнение 5. Написание агрегирующего Pig-запроса

Сообщения для журнала генерируются различными источниками в ядре Linux (такими как kernel или dhclient). В этом примере вы хотите выявить различные источники, которые генерируют журнальные сообщения, а также количество журнальных сообщений, поступивших из каждого источника.

  • Create a script that counts the number of log messages for each log source.

Решения упражнений

Конкретный выходной результат будет зависеть от вашей конкретной установки Hadoop и от ее конфигурации.


Решение упражнения 1. Развертывание простой Hadoop-среды

В упражнении 1 вы выполняете команду ls в файловой системе HDFS. В листинге 1 демонстрируется правильное решение.

Листинг 1. Выполнение команды ls в файловой системе HDFS

$ hadoop dfs -ls /
drwxrwxrwx    - hue       supergroup           0 2011-12-10 06:56 /tmp
drwxr-xr-x    - hue       supergroup           0 2011-12-08 05:20 /user
drwxr-xr-x    - mapred    supergroup           0 2011-12-08 10:06 /var
$

В зависимости от использования возможно присутствие различного количества файлов.


Решение для упражнения 2. Взаимодействие с файловой системой HDFS

В упражнении 2 вы создаете в файловой системе HDFS подкаталог и копируете в него некоторый файл. Обратите внимание, что вы создаете тестовые данные посредством перемещения буфера сообщений ядра в файл. Для дополнительного надежности просмотрите файл в файловой системе HDFS с помощью команды cat (см. листинг 2).

Листинг 2. Манипуляции с файловой системой HDFS
$ dmesg > kerndata
$ hadoop dfs -mkdir /test
$ hadoop dfs -ls /test
$ hadoop dfs -copyFromLocal kerndata /test/mydata
$ hadoop dfs -cat /test/mydata
Linux version 2.6.18-274-7.1.el5 (mockbuild@builder10.centos.org)...
...
e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
$


Решение упражнения 3. Написание простого MapReduce-приложения

В упражнении 3 вы создаете простое MapReduce-приложение на языке Python для подсчета слов. Python - это действительно отличный язык для реализации примера с подсчетом слов.

В этом упражнении предполагается, что вы уже выполнили шаги упражнения 2 (по перемещению данных в файловую систему HDFS). В листинге 3 показано соответствующее Map-приложение.

Листинг 3. Map-приложение на языке Python
#!/usr/bin/env python

import sys

for line in sys.stdin:
    line = line.strip()
    words = line.split()
    for word in words:
        print '%s\t1' % word

В листинге 4 показано соответствующее Reduce-приложение.

Листинг 4. Reduce-приложение на языке Python
#!/usr/bin/env python

from operator import itemgetter
import sys

last_word = None
last_count = 0
cur_word = None

for line in sys.stdin:
    line = line.strip()

    cur_word, count = line.split('\t', 1)

    count = int(count)

    if last_word == cur_word:
        last_count += count
    else:
        if last_word:
           print '%s\t%s' % (last_word, last_count)
           last_count = count
        last_word = cur_word

if last_word == cur_word:
    print '%s\t%s' % (last_word, last_count)

В листинге 5 демонстрируется процесс вызова MapReduce-примера на языке Python в среде Hadoop.

Листинг 5. Тестирование MapReduce-приложения на языке Python в среде Hadoop

$ hadoop jar /usr/lib/hadoop-0.20/contrib/streaming/hadoop-streaming-0.20.2-cdh3u2.jar \
 -file pymap.py -mapper pymap.py -file pyreduce.py -reducer pyreduce.py \
 -input /test/mydata -output /test/output
... $ hadoop dfs -cat /test/output/part-00000
...
write 3
write-combining 2
wrong. 1
your 2
zone: 2 zonelists. 1
$




Решение для упражнения 4. Написание простого Pig-запроса

В упражнении 4 вы извлекаете элементы журнала /var/log/messages, которые содержат слово kernel: и слово terminating. В этом случае вы используете инструмент Pig в локальном режиме для запроса к локальному файлу (см. листинг 6). Загрузите файл в Pig-отношение (log), отфильтруйте его содержимое, чтобы оставить лишь сообщения со словом kernel, а затем отфильтруйте полученное отношение, оставив лишь сообщения со словом terminating.

Листинг 6. Извлечение из журнала всех сообщений, содержащих слова kernel и terminating
$ pig -x local
grunt> log = LOAD '/var/log/messages';
grunt> logkern = FILTER log BY $0 MATCHES '.*kernel:.*';
grunt> logkernterm = FILTER logkern BY $0 MATCHES '.*terminating.*';
grunt> dump logkernterm
...
(Dec  8 11:08:48 localhost kernel: Kernel log daemon terminating.)
grunt>


Решение для упражнения 5. Написание агрегирующего Pig-запроса

В упражнении 5 вы извлекали из каталога /var/log/messages источники сообщений для журналов и количество таких сообщений. В этом случае мы создаем запрашивающий скрипт и выполняем его в локальном режиме Pig. В листинге 7 вы загружаете файл и производите разбор входной информации, используя пробел в качестве разделителя. Затем вы присваиваете поля строки с разделителями своим поименованным элементам. Сначала вы используете оператор GROUP для группировки сообщений по их источнику, а затем применяете операторы FOREACH и COUNT для агрегирования своих данных.

Листинг 7. Скрипт для работы с каталогом /var/log/messages
log = LOAD '/var/log/messages' USING PigStorage(' ') AS (month:chararray, \
day:int, time:chararray, host:chararray, source:chararray); sources = GROUP log BY source; counts = FOREACH sources GENERATE group, COUNT(log); dump counts;

Результаты выполнения скрипта показаны в листинге 8.

Листинг 8. Результаты выполнения скрипта
$ pig -x local logsources.pig
...
(init:,1)
(gconfd,12)
(kernel:,505)
(syslogd,2)
(dhclient:,91)
(localhost,1168)
(gpm[2139]:,2)
[gpm[2168]:,2)
(NetworkManager:,292)
(avahi-daemon[3345]:,37)
(avahi-daemon[3362]:,44)
(nm-system-settings:,8)
$

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 02.11.2013 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Stimulsoft Reports.Ultimate Single License Includes one year subscription, source code
ABViewer Professional пользовательская
Quest Software. TOAD Professional Edition
Quest Software. TOAD Xpert Edition
Zend Studio Commercial License 1 Year Free Upgrades
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Безопасность компьютерных сетей и защита информации
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
CASE-технологии
Компьютерный дизайн - Все графические редакторы
СУБД Oracle "с нуля"
Программирование на Visual С++
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100