Статьи

Как настроить ганглии с помощью Hadoop

Очень важно отслеживать все машины в кластере с точки зрения работоспособности ОС, узких мест, падений производительности и так далее. Есть множество доступных инструментов, которые выкладывают огромное количество графиков и статистики. Но для администратора кластера должны отображаться только выдающиеся статистические данные, которые серьезно влияют на производительность или работоспособность кластера.
                        Ганглия отвечает всем требованиям.


Введение в Ganglia:
Ganglia — это масштабируемая распределенная система мониторинга для высокопроизводительных вычислительных систем, таких как кластеры и сети. Он основан на иерархической структуре, предназначенной для федераций кластеров. Он использует протокол прослушивания / объявления на основе многоадресной рассылки для мониторинга состояния в кластерах и использует дерево двухточечных соединений между репрезентативными узлами кластера для объединения кластеров и агрегирования их состояния. Он использует широко используемые технологии, такие как XML для представления данных, XDR для компактной, переносимой передачи данных и RRDtool для хранения и визуализации данных. Он использует тщательно разработанные структуры данных и алгоритмы для достижения очень низких издержек на узел и высокого параллелизма.

Реализация надежна, портирована на обширный набор операционных систем и процессорных архитектур и в настоящее время используется более чем в 500 кластерах по всему миру. Он используется для связывания кластеров в университетских кампусах и по всему миру и может масштабироваться для обработки кластеров с 2000 узлами.

Зная немного о том, что такое Ganglia, есть некоторые чистые термины, которые нужно знать перед началом игры.
1. Узел. Обычно это машина, предназначенная для выполнения одной задачи с ее (1-4) основным процессором.
2. Кластер: Кластер состоит из группы узлов.
3. Сетка: Сетка состоит из группы кластеров.

Направляясь к Ganglia …
Система ganglia состоит из двух уникальных демонов, веб-интерфейса на основе PHP и нескольких других небольших служебных программ.


Ganglia Monitoring Daemon (gmond)
Gmond — это многопоточный демон, который запускается на каждом узле кластера, который вы хотите отслеживать. Он отвечает за мониторинг изменений в состоянии хоста, объявление соответствующих изменений, прослушивание состояния всех других узлов ganglia с помощью одноадресной передачи. или многоадресные запросы канала и ответа для XML-описания состояния кластера. Каждый gmond передает информацию двумя различными способами: одноадресная / многоадресная передача состояния хоста в формате внешнего представления данных (XDR) с использованием сообщений UDP или отправка XML через TCP-соединение.
 
Ganglia Meta Daemon (gmetad)
 Ganglia Meta Daemon («gmetad») периодически опрашивает коллекцию дочерних источников данных, анализирует собранный XML, сохраняет все числовые, изменчивые метрики в циклических базах данных и экспортирует агрегированный XML по сокетам TCP клиентам , Источниками данных могут быть либо демоны «gmond», представляющие определенные кластеры, либо другие демоны «gmetad», представляющие наборы кластеров. Источники данных используют исходные IP-адреса для управления доступом и могут быть указаны с использованием нескольких IP-адресов для восстановления после отказа. Последняя возможность естественна для агрегации данных из кластеров, поскольку каждый демон «gmond» содержит все состояние своего кластера.
 
Веб-
 интерфейс Ganglia PHP Веб- интерфейс Ganglia предоставляет системным администраторам представление собранной информации через динамические веб-страницы в реальном времени.

Настройка Ganglia:
Предположим следующее:
— Кластер: «HadoopCluster»
— Узлы: «Master», «Slave1», «Slave2». {Рассмотрено только 3 узла для примеров. Аналогичным образом можно настроить множество узлов / ведомых.}
— Сетка: «Сетка» на данный момент состоит из «HadoopCluster».

 gmond должен быть установлен на всех узлах, т.е. «Мастер», «Раб1», «Раб2». Gmetad и веб-интерфейс будут на Мастере. На главном узле мы можем видеть всю статистику в веб-интерфейсе. Однако у нас также может быть выделенный сервер для веб-интерфейса.

Шаг 1: Установить gmond на «Master», «Slave1» и «Slave2».
Установить Ganglia можно, загрузив соответствующий tar.gz, распаковав, сконфигурировав, изготовив и установив. Но зачем изобретать велосипед. Давайте установим то же самое с хранилищем.

ОС: Ubuntu 11.04
Ganglia версия 3.1.7
Hadoop версия CDH3 hadoop-0.20.2

Обновите ваши пакеты репозитория.

$ sudo apt-get update
Установка зависимых пакетов.
$ sudo apt-get -y install build-essential libapr1-dev libconfuse-dev libexpat1-dev python-dev
Установка Гмонд.
$  sudo apt-get install ganglia-monitor
Внесение изменений в /etc/ganglia/gmond.conf
$  sudo vi /etc/ganglia/gmond.conf
/* This configuration is as close to 2.5.x default behavior as possible
   The values closely match ./gmond/metric.h definitions in 2.5.x */
globals {                   
  daemonize = yes             
  setuid = no
  user = ganglia             
  debug_level = 0              
  max_udp_msg_len = 1472       
  mute = no            
  deaf = no            
  host_dmax = 0 /*secs */
  cleanup_threshold = 300 /*secs */
  gexec = no            
  send_metadata_interval = 0    
}

/* If a cluster attribute is specified, then all gmond hosts are wrapped inside
 * of a <CLUSTER> tag.  If you do not specify a cluster tag, then all <HOSTS> will
 * NOT be wrapped inside of a <CLUSTER> tag. */
cluster {
  name = "HadoopCluster"
  owner = "Master"
  latlong = "unspecified"
  url = "unspecified"
}

/* The host section describes attributes of the host, like the location */
host {
  location = "unspecified"
}

/* Feel free to specify as many udp_send_channels as you like.  Gmond
   used to only support having a single channel */
udp_send_channel {
  host = Master
  port = 8650
  ttl = 1
}

/* You can specify as many udp_recv_channels as you like as well. */
udp_recv_channel {
#  mcast_join = 239.2.11.71
  port = 8650
#  bind = 239.2.11.71
}

/* You can specify as many tcp_accept_channels as you like to share
   an xml description of the state of the cluster */
tcp_accept_channel {
  port = 8649
} ...
Об изменениях конфигурации:

проверьте глобалы один раз. В кластере {} измените имя кластера, как предполагается, на «HadoopCluster» с неопределенного, владельца на «Мастер» (может быть именем вашей организации / администратора), можно указать длинный адрес, URL-адрес в соответствии с вашим местоположением. Нет вреда в том, чтобы не указывать их.

Как уже говорилось, gmond общается с помощью UDP-сообщений или отправки XML по TCP-соединению. Итак, давайте выясним это!

udp_send_channel {
      host = Master
      port = 8650
      ttl = 1
    }  ...
означает, что получателем хоста в конечной точке будет «Master» (где Master — это имя хоста с соответствующим IP-адресом. Добавьте все имена хостов в / etc / hosts с соответствующими IP-адресами). Порт, на котором он принимает, — 8650.
Поскольку gmond теперь настроен на «Master», канал приема UDP — 8650.
udp_recv_channel {
    #  mcast_join = 239.2.11.71
      port = 8650
    #  bind = 239.2.11.71
    } 
Все описания XML, которые могут быть метриками hadoop, метриками системы и т. Д., Принимаются на порту: 8649
tcp_accept_channel {
      port = 8649
    } ..
Начиная ганглии:
$ sudo /etc/init.d/ganglia-monitor start
$ telnet Master 8649
Вывод должен содержать формат XML.

Это значит, что Гмонд встал.

$ ps aux | grep gmond
показывает gmond

Установка gmond на подчиненных машинах такая же, как и у gmond.conf,

    /* This configuration is as close to 2.5.x default behavior as possible
       The values closely match ./gmond/metric.h definitions in 2.5.x */
    globals {
      daemonize = yes
      setuid = no
      user = ganglia
      debug_level = 0
      max_udp_msg_len = 1472
      mute = no
      deaf = no
      host_dmax = 0 /*secs */
      cleanup_threshold = 300 /*secs */
      gexec = no
      send_metadata_interval = 0
    }

    /* If a cluster attribute is specified, then all gmond hosts are wrapped inside
     * of a <CLUSTER> tag.  If you do not specify a cluster tag, then all <HOSTS> will
     * NOT be wrapped inside of a <CLUSTER> tag. */
    cluster {
      name = "HadoopCluster"
      owner = "Master"
      latlong = "unspecified"
      url = "unspecified"
    }

    /* The host section describes attributes of the host, like the location */
    host {
      location = "unspecified"
    }

    /* Feel free to specify as many udp_send_channels as you like.  Gmond
       used to only support having a single channel */
    udp_send_channel {
      host = Master
      port = 8650
      ttl = 1
    }

    /* You can specify as many udp_recv_channels as you like as well. */
    udp_recv_channel {

    #  mcast_join = 239.2.11.71
      port = 8650
     # bind = 239.2.11.71
    }

    /* You can specify as many tcp_accept_channels as you like to share
       an xml description of the state of the cluster */
    tcp_accept_channel {
      port = 8649
    }....
Начиная ганглии:
$ sudo /etc/init.d/ganglia-monitor start
$ telnet Slave1 8649

Вывод должен содержать формат XML.

Это означает, что gmond работает.

$ ps aux | grep gmond
показывает Гмонд 
Шаг 2 : Установка gmetad на Мастер.
$ sudo apt-get install ganglia-webfrontend
Установка зависимостей
$ sudo apt-get -y install build-essential libapr1-dev libconfuse-dev libexpat1-dev python-dev librrd2-dev
Внесение необходимых изменений в gmetad.conf
data_source «HadoopCluster».
Главное имя сетки «Сетка»
setuid_username « ganglia » Источник

данных задает имя кластера как «HadoopCluster», а «Мастер» — единственную точку консолидации всех метрик и статистики.
имя сетки изначально предполагается как «Сетка».
имя пользователя — ganglia.

Проверьте каталог / var / lib / ganglia. Если не существует, то
mkdir / var / lib / ganglia
mkdir / var / lib / ganglia / rrds /,
а затем

$ sudo chown -R ganglia:ganglia /var/lib/ganglia/
Запуск Гметад
$ sudo /etc/init.d/gmetad start
Вы можете остановиться с 
$ sudo /etc/init.d/gmetad stop 
и запустить в режиме отладки один раз.
$ gmetad -d 1
Теперь перезапустите демон
$ sudo /etc/init.d/gmetad restart

Шаг 3 : Установка зависимых от веб-интерфейса PHP пакетов в «Мастер»

$ sudo apt-get -y install build-essential libapr1-dev libconfuse-dev libexpat1-dev python-dev librrd2-dev
Проверьте каталог / var / www / ganglia и перезапустите apache2
$ sudo /etc/init.d/apache2 restart
Пора перейти по веб-адресу
http: // Master / ganglia
в целом, http: // <hostname> / ganglia /

Вы должны увидеть некоторые графики.

Шаг 4 : Настройка метрики Hadoop с помощью Ganglia.
На Мастере (Наменод, JobTracker)

$ sudo vi /etc/hadoop-0.20/conf/hadoop-metrics.properties

    # Configuration of the "dfs" context for null
    #dfs.class=org.apache.hadoop.metrics.spi.NullContext

    # Configuration of the "dfs" context for file
    #dfs.class=org.apache.hadoop.metrics.file.FileContext
    #dfs.period=10
    #dfs.fileName=/tmp/dfsmetrics.log

    # Configuration of the "dfs" context for ganglia
     dfs.class=org.apache.hadoop.metrics.ganglia.GangliaContext31
     dfs.period=10
     dfs.servers=Master:8650

    # Configuration of the "dfs" context for /metrics
    #dfs.class=org.apache.hadoop.metrics.spi.NoEmitMetricsContext


    # Configuration of the "mapred" context for null
    #mapred.class=org.apache.hadoop.metrics.spi.NullContext

    # Configuration of the "mapred" context for /metrics
    mapred.class=org.apache.hadoop.metrics.spi.NoEmitMetricsContext

    # Configuration of the "mapred" context for file
    #mapred.class=org.apache.hadoop.metrics.file.FileContext
    #mapred.period=10
    #mapred.fileName=/tmp/mrmetrics.log

    # Configuration of the "mapred" context for ganglia
     mapred.class=org.apache.hadoop.metrics.ganglia.GangliaContext31
     mapred.period=10
     mapred.servers=Master:8650


    # Configuration of the "jvm" context for null
    #jvm.class=org.apache.hadoop.metrics.spi.NullContext

    # Configuration of the "jvm" context for /metrics
    jvm.class=org.apache.hadoop.metrics.spi.NoEmitMetricsContext

    # Configuration of the "jvm" context for file
    #jvm.class=org.apache.hadoop.metrics.file.FileContext
    #jvm.period=10
    #jvm.fileName=/tmp/jvmmetrics.log

    # Configuration of the "jvm" context for ganglia
     jvm.class=org.apache.hadoop.metrics.ganglia.GangliaContext31
     jvm.period=10
     jvm.servers=Master:8650

    # Configuration of the "rpc" context for null
    #rpc.class=org.apache.hadoop.metrics.spi.NullContext

    # Configuration of the "rpc" context for /metrics
    rpc.class=org.apache.hadoop.metrics.spi.NoEmitMetricsContext

    # Configuration of the "rpc" context for file
    #rpc.class=org.apache.hadoop.metrics.file.FileContext
    #rpc.period=10
    #rpc.fileName=/tmp/rpcmetrics.log

    # Configuration of the "rpc" context for ganglia
     rpc.class=org.apache.hadoop.metrics.ganglia.GangliaContext31
     rpc.period=10
     rpc.servers=Master:8650
Hadoop предоставляет способ доступа ко всем метрикам с помощью класса GangliaContext31.
Перезапустите сервисы hadoop в Master.
Перезапустите Gmond и Gmetad.
$ telnet Master 8649

будет выплевывать метрики XML Hadoop

на Slave1 (вторичный Namenode, Datanode, TaskTracker)

$ sudo gedit /etc/hadoop-0.20.2/conf/hadoop-metrics.properties

    # Configuration of the "dfs" context for file
    #dfs.class=org.apache.hadoop.metrics.file.FileContext
    #dfs.period=10
    #dfs.fileName=/tmp/dfsmetrics.log

    # Configuration of the "dfs" context for ganglia
     dfs.class=org.apache.hadoop.metrics.ganglia.GangliaContext31
     dfs.period=10
     dfs.servers=Master:8650

    # Configuration of the "dfs" context for /metrics
    #dfs.class=org.apache.hadoop.metrics.spi.NoEmitMetricsContext


    # Configuration of the "mapred" context for null
    #mapred.class=org.apache.hadoop.metrics.spi.NullContext

    # Configuration of the "mapred" context for /metrics
     mapred.class=org.apache.hadoop.metrics.spi.NoEmitMetricsContext

    # Configuration of the "mapred" context for file
    #mapred.class=org.apache.hadoop.metrics.file.FileContext
    #mapred.period=10
    #mapred.fileName=/tmp/mrmetrics.log

    # Configuration of the "mapred" context for ganglia
     mapred.class=org.apache.hadoop.metrics.ganglia.GangliaContext31
     mapred.period=10
     mapred.servers=Master:8650

    # Configuration of the "jvm" context for null
    #jvm.class=org.apache.hadoop.metrics.spi.NullContext

    # Configuration of the "jvm" context for /metrics
    jvm.class=org.apache.hadoop.metrics.spi.NoEmitMetricsContext

    # Configuration of the "jvm" context for file
    #jvm.class=org.apache.hadoop.metrics.file.FileContext
    #jvm.period=10
    #jvm.fileName=/tmp/jvmmetrics.log

    # Configuration of the "jvm" context for ganglia
     jvm.class=org.apache.hadoop.metrics.ganglia.GangliaContext31
     jvm.period=10
     jvm.servers=Master:8650

    # Configuration of the "rpc" context for null
    #rpc.class=org.apache.hadoop.metrics.spi.NullContext

    # Configuration of the "rpc" context for /metrics
    rpc.class=org.apache.hadoop.metrics.spi.NoEmitMetricsContext

    # Configuration of the "rpc" context for file
    #rpc.class=org.apache.hadoop.metrics.file.FileContext
    #rpc.period=10
    #rpc.fileName=/tmp/rpcmetrics.log

    # Configuration of the "rpc" context for ganglia
     rpc.class=org.apache.hadoop.metrics.ganglia.GangliaContext31
     rpc.period=10
     rpc.servers=Master:8650
Перезапустите датодуду и треккер с помощью команды
$ sudo service hadoop-0.20-tasktracker restart
$ sudo service hadoop-0.20-datanode restart
Перезапустите Gmond
$ telnet Master 8649
будет выплевывать формат XML метрик Hadoop для хоста Slave1

Аналогичная процедура, которая была выполнена для Slave1, должна выполняться для Slave2, перезапуская сервисы hadoop и gmond.

На Мастере,
Перезапусти gmond и gmetad с

$ sudo /etc/init.d/ganglia-monitor restart
$ sudo /etc/init.d/gmetad restart

Нажмите веб-URL
http: // Master / ganglia.
Проверьте метрики, сетку, кластер и все узлы, для которых вы настроили.
Вы также можете наблюдать, как работают хосты, хосты не работают, общее количество процессоров Много больше в магазине!
 

Наслаждайтесь мониторингом вашего кластера! ?