Очень важно отслеживать все машины в кластере с точки зрения работоспособности ОС, узких мест, падений производительности и так далее. Есть множество доступных инструментов, которые выкладывают огромное количество графиков и статистики. Но для администратора кластера должны отображаться только выдающиеся статистические данные, которые серьезно влияют на производительность или работоспособность кластера.
Ганглия отвечает всем требованиям.
Введение в 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») периодически опрашивает коллекцию дочерних источников данных, анализирует собранный 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
$ 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 } ...
Поскольку gmond теперь настроен на «Master», канал приема UDP — 8650.
udp_recv_channel { # mcast_join = 239.2.11.71 port = 8650 # bind = 239.2.11.71 }
tcp_accept_channel { port = 8649 } ..
$ sudo /etc/init.d/ganglia-monitor start $ telnet Master 8649
Это значит, что Гмонд встал.
$ ps aux | grep 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
$ sudo apt-get install ganglia-webfrontend
$ sudo apt-get -y install build-essential libapr1-dev libconfuse-dev libexpat1-dev python-dev librrd2-dev
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
$ 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 в 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
$ telnet Master 8649
Аналогичная процедура, которая была выполнена для Slave1, должна выполняться для Slave2, перезапуская сервисы hadoop и gmond.
На Мастере,
Перезапусти gmond и gmetad с
$ sudo /etc/init.d/ganglia-monitor restart $ sudo /etc/init.d/gmetad restart
Нажмите веб-URL
http: // Master / ganglia.
Проверьте метрики, сетку, кластер и все узлы, для которых вы настроили.
Вы также можете наблюдать, как работают хосты, хосты не работают, общее количество процессоров Много больше в магазине!
Наслаждайтесь мониторингом вашего кластера! ?