Ganglia环境搭建并监控Hadoop分布式集群

简介

Ganglia可以监控分布式集群中硬件资源的使用情况,例如CPU,内存,网络等资源。通过Ganglia可以监控Hadoop集群在运行过程中对集群资源的调度,作为简单地运维参考。

环境搭建流程

1、我们先在主机master01上面搭建好Ganglia环境

2、在master01主机上解压JDK和Hadoop到安装目录、修改配置文件

3、克隆出两台主机slave01,slave02并修改主机名和IP主机名映射、做免密码登录

4、启动Ganglia和Hadoop集群、实现wordcount实例

关闭防火墙和Selinux

关闭防火墙和Selinux是因为这两者会对Ganglia和Hadoop环境搭建造成影响,比如防火墙会导致集群间一些通信问题。

关闭防火墙

临时和永久关闭防火墙

临时:

service iptables stop

永久:

chkconfig iptables off

关闭Selinux

vi /etc/sysconfig/selinux

修改内容如下:

使配置生效:

setenforce 0

Ganglia单机环境搭建

Ganglia简介

Ganglia 是 UC Berkeley 发起的一个开源监视项目,设计用于测量数以千计的节点。每台计算机都运行一个收集和发送度量数据(如处理器速度、内存使用量等)的名为 gmond 的守护进程。它将从操作系统和指定主机中收集。接收所有度量数据的主机可以显示这些数据并且可以将这些数据的精简表单传递到层次结构中。正因为有这种层次结构模式,才使得 Ganglia 可以实现良好的扩展。gmond 带来的系统负载非常少,这使得它成为在集群中各台计算机上运行的一段代码,而不会影响用户性能。

一、Ganglia组件

Ganglia 监控套件包括三个主要部分:gmond,gmetad,和网页接口,通常被称为ganglia-web。

Gmond :是一个守护进程,他运行在每一个需要监测的节点上,收集监测统计,发送和接受在同一个组播或单播通道上的统计信息 如果他是一个发送者(mute=no)他会收集基本指标,比如系统负载(load_one),CPU利用率。他同时也会发送用户通过添加C/Python模块来自定义的指标。 如果他是一个接收者(deaf=no)他会聚合所有从别的主机上发来的指标,并把它们都保存在内存缓冲区中。

Gmetad:也是一个守护进程,他定期检查gmonds,从那里拉取数据,并将他们的指标存储在RRD存储引擎中。他可以查询多个集群并聚合指标。他也被用于生成用户界面的web前端。

Ganglia-web :顾名思义,他应该安装在有gmetad运行的机器上,以便读取RRD文件。 集群是主机和度量数据的逻辑分组,比如数据库服务器,网页服务器,生产,测试,QA等,他们都是完全分开的,你需要为每个集群运行单独的gmond实例。

一般来说集群中每个节点需要一个接收的gmond,每个网站需要一个gmetad。

二、安装依赖

    注:建议使用超级用户安装

    yum install –y gcc gcc-c++ libpng freetype zlib libdbi apr* libxml2-devel pkg-config glib pixman pango pango-devel freetye-devel fontconfig cairo cairo-devel libart_lgpl libart_lgpl-devel pcre* rrdtool*

三、安装expat依赖

    cd /root
    wget http://jaist.dl.sourceforge.net/project/expat/expat/2.1.0/expat-2.1.0.tar.gz
    tar -xf expat-2.1.0.tar.gz && cd expat-2.1.0 && ./configure --prefix=/usr/local/expat && make && make install && cd ..

四、安装confuse

    wget http://ftp.twaren.net/Unix/NonGNU//confuse/confuse-2.7.tar.gz
tar -xf confuse-2.7.tar.gz && cd confuse-2.7 && ./configure CFLAGS=-fPIC --disable-nls --prefix=/usr/local/confuse && make && make install && cd ..

64bit机器需要拷贝动态链接库:

mkdir -p /usr/local/confuse/lib64 && cp -a -f /usr/local/confuse/lib/* /usr/local/confuse/lib64/

五、安装ganglia

    wget http://jaist.dl.sourceforge.net/project/ganglia/ganglia%20monitoring%20core/3.6.0/ganglia-3.6.0.tar.gz
    tar -xf ganglia-3.6.0.tar.gz && cd ganglia-3.6.0 && ./configure --with-gmetad --enable-gexec --with-libconfuse=/usr/local/confuse --with-libexpat=/usr/local/expat --prefix=/usr/local/ganglia --sysconfdir=/etc/ganglia && make && make install && cd ..

六、服务端配置

创建rrdtool数据目录,看$ganglia-3.2.0/web/conf.php里面的gmetad_root变量,并根据apache的运行用户创建权限,例如apache运行于apache用户上 。

    mkdir -p /var/lib/ganglia/rrds && mkdir -p /var/lib/ganglia/dwoo && chown -R root:root /var/lib/ganglia

配置一个数据源,修改/etc/ganglia/gmetad.conf文件,同时将运行用户设置为rrdtool的目录权限用户,例如apache用户

    data_source "Hadoop" 192.168.1.108:8649
    setuid_username "root"

说明:这里的 " hadoop " 表示的是集群的名称,后面的内容是这个集群中所包含的主机信息,也就是要监控的主机ip。

添加自启动脚本

    cp -f ganglia-3.6.0/gmetad/gmetad.init /etc/init.d/gmetad && cp -f /usr/local/ganglia/sbin/gmetad /usr/sbin/gmetad && chkconfig --add gmetad

启动gmetad服务

    service gmetad start

看见Starting GANGLIA gmetad: [ OK ]就代表运行正常了。 通过telnet localhost 8651验证gmetad是否正常。

七、客户端配置(gmond节点)

本机安装如下:

    cp -f ganglia-3.6.0/gmond/gmond.init /etc/init.d/gmond && cp -f /usr/local/ganglia/sbin/gmond /usr/sbin/gmond && chkconfig --add gmond && gmond --default_config > /etc/ganglia/gmond.conf

对于生成的默认配置文件/etc/ganglia/gmond.conf需要做适当的修改

globals {
  user = root /*运行Ganglia的用户*/
  host_dmax = 120 /*secs */
  send_metadata_interval = 15 /*发送数据的时间间隔*/
}

cluster {
  name = "hadoop" /*集群名称*/
  owner = "root" /*运行Ganglia的用户*/
}

udp_send_channel {
   	  # mcast_join = 239.2.11.71 /*注释掉组播*/
  host = 192.168.1.108/*发送给安装gmetad的机器*/
}

udp_recv_channel { #接受UDP包配置
  # mcast_join = 239.2.11.71
  # bind = 239.2.11.71
}

其中name是将要在服务端进行的分组,是服务端的数据源。接下来开启服务

    service gmond start

看见Starting GANGLIA gmetad: [ OK ]代表启动成功。如果有失败,可以讲gmond.conf中的debug从0改为100,看更多的日志,然后进行排查。

八、服务端的WEB配置

PHP程序需要依赖Apache来运行,因此需要安装如下依赖

    yum -y install php httpd
    service httpd start //启动httpd 服务

九、测试安装是否成功

    vi /var/www/html/index.php

输入:

    <?php phpinfo();?>

保存,然后浏览器 localhost/index.php

正常是看到php的信息。

    cd /root
    wget http://jaist.dl.sourceforge.net/project/ganglia/ganglia-web/3.5.10/ganglia-web-3.5.10.tar.gz
tar -xf ganglia-web-3.5.10.tar.gz && cd ganglia-web-3.5.10 && make install && cd ..

这样 在/var/www/html/下 生成了 ganglia 目录

注(可能出现的问题):

Ganglia访问失败:

    There was an error collecting ganglia data (127.0.0.1:8652): fsockopen error: Permission denied

解决:

需要关闭selinux:vi /etc/selinux/config,把SELINUX=enforcing改成SELINUX=disabled;需要重启机器。

可以使用命令setenforce 0来关闭selinux而不需要重启,刷新页面,即可访问。但此方法只是一权宜之计。要想永久修改selinux设置,还是要使用第一种方法。

重启httpd服务器即可看到效果

    service httpd restart

使用http://master/ganglia查看对应的ganglia信息。(注:master为运行gmetad的主机的hostname)

Ganglia集群配置

免密码登录

单机配置好后,现在来配置集群的:

把刚才配置的那台VMware中的虚拟机,使用克隆功能,克隆出两台,然后:

vi /etc/sysconfig/network   #修改主机名
vi /etc/hosts       #修改主机名和IP映射

三台主机IP、主机名、角色对应关系:

在每台主机中敲入如下命令,然后一直回车确认就可以了,如果是root用户,会在/root/.ssh目录下生成密钥文件。

ssh-keygen -t rsa

拷贝slave01上公钥到master01上面(slave02也需要)

然后通过命令拷贝三台主机公钥到authorized_keys文件

在master01主机上/root/.ssh目录下,slave01和slave02中id_rsa.pub也拷贝到这个目录,并且名称分别为slave01,slave02

cat id_rsa.pub >> authorized_keys
cat slave01 >> authorized_keys
cat slave02 >> authorized_keys

这时我们就可以免密码登录了

配置并开启Ganglia集群

永久关闭slave01,slave02上面的Ganglia服务端gmetad

查看Ganglia服务端gmetad和客户端gmond是否都开启

开启Apache的httpd服务

Ganglia监控图示:

Hadoop环境软件准备

首先需要将JDK以及Hadoop软件解压到需要安装的目录

安装JDK

配置Java到环境变量

验证Java环境是否安装好

安装Hadoop

把Hadoop添加到环境变量

拷贝master01上修改好的/etc/profile文件到其他两台主机

使环境变量立即生效

查看hadoop版本

建立data,name,tmp文件夹:后面配置文件中需要用到

Hadoop配置文件修改

hadoop-env.sh

在文件头添加如下内容

export JAVA_HOME=/usr/local/jdk1.7.0_80
export HADOOP_LOG_DIR=/usr/local/hadoop_repo/logs
export HADOOP_ROOT_LOGGER=DEBUG,DRFA

core-site.xml

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master01:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/hadoop_repo/tmp</value>
</property>
<!--
    <property>
        <name>fs.trash.interval</name>
        <value>1440</value>
    </property>
-->
</configuration>

hdfs-site.xml

<configuration>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:///usr/local/hadoop_repo/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:///usr/local/hadoop_repo/data</value>
    </property>
    <property>
        <name>dfs.namenode.checkpoint.dir</name>
        <value>file:///usr/local/hadoop_repo/namesecondary</value>
   </property>
   <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>master01:9001</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
    </property><property>
        <name>dfs.permissions</name>
        <value>false</value>
    </property>
</configuration>

mapred-site.xml

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>master01:10020</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>master01:19888</value>
    </property>
    <property>
        <name>yarn.app.mapreduce.am.staging-dir</name>
        <value>/history</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.done-dir</name>
        <value>${yarn.app.mapreduce.am.staging-dir}/history/done</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.intermediate-done-dir</name>
        <value>${yarn.app.mapreduce.am.staging-dir}/history/done_intermediate</value>
    </property>
    <property>
    <name>mapreduce.map.log.level</name>
        <value>DEBUG</value>
    </property>
    <property>
        <name>mapreduce.reduce.log.level</name>
        <value>DEBUG</value>
    </property>
</configuration> 

slaves

master01
slave01
slave02

yarn-env.sh

export JAVA_HOME=/usr/local/jdk1.7.0_80
export YARN_LOG_DIR=/usr/local/hadoop_repo/logs
export YARN_ROOT_LOGGER=DEBUG,DRFA

yarn-site.xml

<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname</name>
    <value>master01</value>
    </property>
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>master01:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>master01:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>master01:8031</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>master01:8033</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>master01:8088</value>
    </property>
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
</configuration>

Hadoop集群启动

启动HDFS

格式化:

启动dfs:

master01上面的hdfs进程:

slave01,slave02上面的hdfs进程:

HDFS的web页面:192.168.33.181:50070/

启动yarn

启动yarn命令:

start-yarn.xml

Yarn的Web页面:192.168.33.181:8088

Wordcount实例运行

Wordcount实例所在jar包位置:

/usr/local/hadoop-2.6.0/share/hadoop/mapreduce

创建一个words文件,并写入如下文本:

vi words<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>

通过客户端查看HDFS文件系统目录:

hdfs dfs -ls -R /

运行wordcount的脚本命令

hadoop jar hadoop-mapreduce-examples-2.6.0.jar wordcount /input/words /output

HDFS文件系统路径页面示图:

HDFS页面查看运行结果目录:

通过Yarn的web页面查看实例运行状态,如下为实例运行结束的图示:

查看wordcount实例的运行结果:

hdfs dfs -text /output/part-r-00000

Ganglia监控Hadoop集群图

来源: http://lib.csdn.net/article/hadoop/44887

时间: 2024-10-21 14:48:25

Ganglia环境搭建并监控Hadoop分布式集群的相关文章

Hadoop分布式集群环境搭建

分布式环境搭建之环境介绍 之前我们已经介绍了如何在单机上搭建伪分布式的Hadoop环境,而在实际情况中,肯定都是多机器多节点的分布式集群环境,所以本文将简单介绍一下如何在多台机器上搭建Hadoop的分布式环境. 我这里准备了三台机器,IP地址如下: 192.168.77.128 192.168.77.130 192.168.77.134 首先在这三台机器上编辑/etc/hosts配置文件,修改主机名以及配置其他机器的主机名 [[email protected] ~]# vim /etc/host

使用Docker在本地搭建Hadoop分布式集群

学习Hadoop集群环境搭建是Hadoop入门必经之路.搭建分布式集群通常有两个办法: 要么找多台机器来部署(常常找不到机器) 或者在本地开多个虚拟机(开销很大,对宿主机器性能要求高,光是安装多个虚拟机系统就得搞半天……). 那么,问题来了! 有没有更有可行性的办法? 提到虚拟化,Docker最近很是火热!不妨拿来在本地做虚拟化,搭建Hadoop的伪分布式集群环境.虽然有点大材小用,但是学习学习,练练手也是极好的. 文章比较长,建议先倒杯水,听我慢慢到来…… 先说一下我的思路吧: 先使用Dock

基于HBase Hadoop 分布式集群环境下的MapReduce程序开发

HBase分布式集群环境搭建成功后,连续4.5天实验客户端Map/Reduce程序开发,这方面的代码网上多得是,写个测试代码非常容易,可是真正运行起来可说是历经挫折.下面就是我最终调通并让程序在集群上运行起来的一些经验教训. 一.首先说一下我的环境: 1,集群的环境配置请见这篇博文. 2,开发客户机环境:操作系统是CentOS6.5,JDK版本是1.7.0-60,开发工具是Eclipse(原始安装是从google的ADT网站下载的ADT专用开发环境,后来加装了Java企业开发的工具,启动Flas

Hadoop分布式集群搭建完全详细教程

Hadoop分布式集群环境搭建步骤如下 实验环境: 系统:win7 内存:8G(因要开虚拟机,内存建议不低于8G) 硬盘:建议固态 虚拟机:VMware 12 Linux:Centos 7 jdk1.7.0_67 hadoop-2.5.0.tar.gz 1.安装VMware虚拟机环境2.安装Centos操作系统3.修改主机名配置网络4.配置ssh无密码登录5.上传jdk配置环境变量6.上传hadoop配置环境变量7.修改hadoop配置文件8.格式化namenode9.启动hadoop并测试1安

Hadoop 分布式集群搭建 &amp; 配置

一. 安装Java Java下载 官网下载合适的jdk,本人使用的是jdk-7u79-linux-x64.tar.gz,接下来就以该版本的jdk为例,进行Java环境变量配置 创建Java目录 在/usr/local目录下创建java目录,用于存放解压的jdk cd /usr/local mkdir java 解压jdk 进入java目录 cd java tar zxvf jdk-7u79-linux-x64.tar.gz 配置环境变量 编辑profile文件 cd /etc vim profi

Spark入门 - 1 搭建Hadoop分布式集群

安装Ubuntu系统 不论是通过虚拟机方式还是直接在物理机上安装Ubuntu系统,网上都有丰富的教程,此处不再赘述. 为了方便起见,此处设置的机器名最好与书本的设置一致:Master.Slave1和Slave2. 配置root用户登录 这里有一步与普通教程不同.在安装好系统,重启之后,完成了相关配置.可以进行这一步,设置使用root用户登录,方便以后多个服务器相互操作.如下所示. 为了简化权限问题,需要以root用户的身份登录使用Ubuntu系统.而在默认情况下,Ubuntu没有开启root用户

大数据系列之Hadoop分布式集群部署

本节目的:搭建Hadoop分布式集群环境 环境准备 LZ用OS X系统 ,安装两台Linux虚拟机,Linux系统用的是CentOS6.5:Master Ip:10.211.55.3 ,Slave Ip:10.211.55.4 各虚拟机环境配置好Jdk1.8(1.7+即可) 资料准备 hadoop-2.7.3.tar.gz 虚拟机配置步骤 以下操作都在两台虚拟机 root用户下操作,切换至root用户命令 配置Master hostname 为Master ; vi /etc/sysconfi

亿级Web系统搭建:单机到分布式集群【转】

当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题.为了解决这些性能压力带来问题,我们需要在Web系统架构层面搭建多个层次的缓存机制.在不同的压力阶段,我们会遇到不同的问题,通过搭建不同的服务和架构来解决. Web负载均衡 Web负载均衡(Load Balancing),简单地说就是给我们的服务器集群分配“工作任务”,而采用恰当的分配方式,对于保护处于后端的Web服务器来说,非常重要. 负载均衡的策略有很

亿级Web系统搭建:单机到分布式集群

当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题.为了解决这些性能压力带来问题,我们需要在Web系统架构层面搭建多个层次的缓存机制.在不同的压力阶段,我们会遇到不同的问题,通过搭建不同的服务和架构来解决. Web负载均衡 Web负载均衡(Load Balancing),简单地说就是给我们的服务器集群分配“工作任务”,而采用恰当的分配方式,对于保护处于后端的Web服务器来说,非常重要. 负载均衡的策略有很