专栏首页我是攻城师如何监控你的Hadoop+Hbase集群?

如何监控你的Hadoop+Hbase集群?

前言 监控hadoop的框架有不少,如CDH的CM组件和Ambari都可以监控他们自己的hadoop,但是它不能监控apache的hadoop,如果你是使用原生的Apache Hadoop,那么也没关系,原生的Hadoop天生就提供了非常详细的对接Ganglia的jmx接口,里面包含了各个核心组件metrics获取功能,这一点你可以查看hadoop和hbase包括spark的conf下面的metrics文件里面配置,就能得到验证。 (一)Ganglia是什么?  Ganglia 是 UC Berkeley 发起的一个开源监视项目,设计用于测量数以千计的节点。每台计算机都运行一个收集和发送度量数据(如处理器速度、内存使用量等)的名为 gmond 的守护进程。它将从操作系统和指定主机中收集。接收所有度量数据的主机可以显示这些数据并且可以将这些数据的精简表单传递到层次结构中。正因为有这种层次结构模式,才使得 Ganglia 可以实现良好的扩展。gmond 带来的系统负载非常少,这使得它成为在集群中各台计算机上运行的一段代码,而不会影响用户性能。 (二)Ganglia的主要组件 1,gmond (Ganglia Monitioring Daemon): gmond是ganglia监控的基于多线程模式的守护进程,它需要安装运行在每个你想要监控的机器上,安装非常简单,你不需要有一个通用的NFS系统或者安装一个数据库后端存储, 或者安装指定一个账户,也不需要维护一个繁琐的配置文件。 gmond有4个主要的职责: A:监控主机状态变化 B:发现或发布相关变化 C:监控其他的所有的ganglia节点通过一个单播(unicast)或者多播(multicast)通道模式 D:答复集群转态通过一个XML描述的信息 2,gmetad(Ganglia Meta Daemon ) gmetad是ganglia的元数据守护进程,通常只需要一个监控集群只需要一个元数据守护进程即可,当然如果你想实现高可用的数据冗余,你也可以配置多个, gmetad主要是收集汇聚解析从各个gmond进程汇报发送过来的信息,并将其保存至rrd数据库里,供前端查询展示所需。 3,ganglia-web(Ganglia PHP Web Frontend) ganglia的前端展示框架,负责以图形化的方式,展示集群的一些metics,并且支持分钟,小时,日,月,年,级别的汇总展示,虽然页面丑陋了点,但不 不算华而不实,主要是将rrd里面的XML的数据,解析为静态的HTML网页,方便管理员查询集群的cpu,内存,磁盘,网络,等一些自定义的metrics的某个时间段的 负载展现图 (三)Ganglia的架构拓扑

(四)Ganglia的安装 假设有3台机器centos6.5的系统,分别如下: 192.168.1.187 hadoop hbase gmetad gmond ganglia-web 192.168.1.186 hadoop hbase gmond 192.168.1.184 hadoop hbase gmond 主节点上安装的组件安装gmetad,gmond,ganglia-web 1,安装依赖组件:

Java代码

  1. yum -y install httpd-devel automake autoconf libtool ncurses-devel libxslt groff pcre-devel pkgconfig

2,安装ganglia的epel源,每台机器上 如果是centos7的系统:

Java代码

  1. # yum install epel-release
  2. # yum install ganglia-web ganglia-gmetad ganglia-gmond 或者直接 yum install -y ganglia*

如果是centos6的系统:

Java代码

  1. sudo rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
  2. yum install -y ganglia*

3,配置ganglia 主节点上,需要配置三个东西: A : /etc/ganglia/gmetad.conf 只需要配置2个核心选项即可

Java代码

  1. data_source "hadoop" 192.168.1.187 192.168.1.186 192.168.1.184 // 使用单播的方式,加入所有要监控的机器ip,默认端口是8649
  2. case_sensitive_hostnames 1 //是否忽略大小写,1代表不忽略,如果你的机器名里面含有大写的字母,一定要配置1,否则ganglia的前端图形就不能正确的读取rrds里面的每个机器的数据

B : /etc/ganglia/gmond.conf

Java代码

  1. cluster {
  2. name = "hadoop" #配置的名字与gmetad里面的需要一致
  3. owner = "unspecified"
  4. latlong = "unspecified"
  5. url = "unspecified"
  6. }
  7. udp_send_channel {
  8. #mcast_join = 239.2.11.71 #注释掉默认的多播地址
  9. host = 192.168.1.187 # 使用单播模式,发送消息
  10. port = 8649
  11. ttl = 1
  12. }
  13. udp_recv_channel {
  14. #mcast_join = 239.2.11.71
  15. port = 8649
  16. bind = 192.168.1.187 #主节点的这个配置需要加上,用来接受其他机器上的传输过来的数据 , 特别注意从节点上的这项配置是
  17. retry_bind = true
  18. }

C : /etc/httpd/conf.d/ganglia.conf

Java代码

  1. <Location /ganglia>
  2. Order deny,allow
  3. Allow from all #允许所有的机器访问
  4. #Deny from all
  5. #Allow from 127.0.0.1
  6. # Allow from ::1
  7. # Allow from .example.com
  8. </Location>

4,从节点只要安装gmond组件即可

Java代码

  1. yum install -y ganglia-gmond

然后配置gmond.conf

Java代码

  1. cluster {
  2. name = "hadoop" #配置的名字与gmetad里面的需要一致
  3. owner = "unspecified"
  4. latlong = "unspecified"
  5. url = "unspecified"
  6. }
  7. udp_send_channel {
  8. #mcast_join = 239.2.11.71 #注释掉默认的多播地址
  9. host = 192.168.1.187 # 使用单播模式,发送消息
  10. port = 8649
  11. ttl = 1
  12. }
  13. udp_recv_channel {
  14. #mcast_join = 239.2.11.71
  15. port = 8649
  16. #bind = 192.168.1.187 仅仅安装gmond的节点上,不需要这项配置,加上会报错
  17. retry_bind = true
  18. }

5,如何改变rrd存储路径: 最好的办法,就是使用软连接,直接改gmetad里面的配置有时候可能不生效 默认的存储路径在/var/lib/ganglia/rrds/ 你可以在这个目录,建一个软连接,改变此库的存储路径: 在/var/lib/ganglia/rrds 新建软连接,第一个参数是新路径,第二个参数是默认路径

Java代码

  1. sudo ln -s /ROOT/server/rrds /var/lib/ganglia/rrds

改变rrds的tools的默认路径: http://stackoverflow.com/questions/26619473/how-to-change-the-storage-path-from-rrdtool-on-the-ganglia 需要注意改变后的路径的权限和用户赋值

Java代码

  1. mkdir -p /some/other/place/
  2. chown -R ganglia:ganglia /some/other/place/
  3. chmod -R 777 /some/other/place/

5,如何卸载组件?

Java代码

  1. sudo yum remove -y ganglia-web ganglia-gmetad

主节点启动

Java代码

  1. sudo service gmetad start
  2. sudo service gmond start
  3. sudo service httpd start

从节点

Java代码

  1. sudo service gmond start

出现错误后,可以查看系统log的日志 sudo tail -f /var/log/messages 大部分错误,在这里都能看到提示 (五)Hadoop和Hbase的监控 修改hadoop-metrics2.properties文件,在行末添加如下配置:

Java代码

  1. *.sink.ganglia.class=org.apache.hadoop.metrics2.sink.ganglia.GangliaSink31
  2. *.sink.ganglia.period=10
  3. *.sink.ganglia.supportsparse=true
  4. *.sink.ganglia.slope=jvm.metrics.gcCount=zero,jvm.metrics.memHeapUsedM=both
  5. *.sink.ganglia.dmax=jvm.metrics.threadsBlocked=70,jvm.metrics.memHeapUsedM=40
  6. namenode.sink.ganglia.servers=192.168.1.187:8649 #当有多个ganglia监控系统时,以逗号分隔
  7. datanode.sink.ganglia.servers=192.168.1.187:8649 #都指定ganglia服务器
  8. resourcemanager.sink.ganglia.servers=192.168.1.187:8649
  9. nodemanager.sink.ganglia.servers=192.168.1.187:8649
  10. mrappmaster.sink.ganglia.servers=192.168.1.187:8649
  11. jobhistoryserver.sink.ganglia.servers=192.168.1.187:8649

修改hadoop-metrics2-hbase.properties文件,在行末添加如下配置:

Java代码

  1. *.sink.ganglia.class=org.apache.hadoop.metrics2.sink.ganglia.GangliaSink31
  2. *.sink.ganglia.period=10
  3. hbase.sink.ganglia.period=10
  4. hbase.sink.ganglia.servers=192.168.1.187:8649

完了分发hadoop和hbase的配置文件,到所有的机器上,然后重启集群 (六)访问http://192.168.1.187:80/ganglia 查看监控图

yarn监控

hbase的监控

至此,我们的监控系统就建立起来了,需要注意的是,当监控上hadoop的相关的指标时,rrds库的体积,膨胀比较大,所以这个库存的盘一定要大一点,或者在gmetad里面开启gzip压缩,否则把系统盘撑爆了,其他的程序有可能也会受到影响。 参考链接: https://sourceforge.net/projects/ganglia/?source=typ_redirect http://blog.cheyo.net/88.html http://www.cnblogs.com/smartloli/p/4519914.html http://lizhenliang.blog.51cto.com/7876557/1669312 http://www.cnblogs.com/zhengrunjian/p/4998334.html

本文分享自微信公众号 - 我是攻城师(woshigcs),作者:woshigcs

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-03-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Scala中的Map使用例子

    我是攻城师
  • ElasticSearch里面关于日期的存储方式

    我是攻城师
  • 在Scala里面如何使用元组

    我是攻城师
  • ganglia 启动命令

    https://github.com/ganglia/monitor-core/wiki/Ganglia-Configuration

    sanmutongzi
  • 现有Android项目引入ReactNative--九步大法

    为什么写这篇文章,因为很多时候我们是需要在原Android工程中添加ReactNative,而不是直接react-native init hello来创建工程,...

    先知先觉
  • 2D刚体动力学开源模拟器Dyna-Kinematics

    2D刚体动力学模拟器Dyna-Kinematics,具有很多可以生成炫酷动画的开源库。话不多说,先给出1个仿真案例

    ZC_Robot机器人技术
  • 秃头真的是程序员的标配吗?

    从事软件开发多年,主要在嵌入式领域,对浏览器内核,安卓框架层面研究的比较多,最近因为业务工作需要研究后台,程序员这个职业是高度的脑力劳动,几乎天天都盯在电脑屏幕...

    程序员互动联盟
  • 几种计算机语言的评价(修订版)

    编程新手都有一个同样的问题:"我应该学习哪一种语言?"。 《Unix编程艺术》(Eric Raymond著)第十四章,对各种语言进行了评价,正好可以用来回答这个...

    ruanyf
  • 智能合约中常见的漏洞总结复现#技术创作101训练营#

    一个小朋友,他可以数着手指运算十以内的运算,比如 1+1=2,他可以用两个手指算出来,但是如果你问他 5+6 等于多少,他数完十个手指之后发现手指不够用了,就会...

    yichen
  • 刘连响:小程序实时音视频在互动场景下的应用

    今天为大家带来的分享是:小程序实时音视频在互动教育场景下的应用。我个人一直在做基础方面的研究,接触音视频也比较早,2013年的时候就开始做包括直播在内的相关产品...

    云加社区技术沙龙

扫码关注云+社区

领取腾讯云代金券