作为一名大数据运维工程师,你手下管理着批量的集群机器,并且同时这个集群的规模还会不定时的扩大,机器一旦变多,发生问题的频率和类型就会变多,所以这时,你靠人肉去分析某台机器上的日志,OK,1台机器,2台机器,尚且可以解决办法,但是100台,1000台呢,当然如果工程师还这么做的话,我想他会抓狂的.所以如何做到智能化发现问题,定位问题,就显得很关键了,最理想的结果是,你拥有你的集群机器中每天跑的job的各种指标数据,然后你动动鼠标,通过展示出来的图形界面,就迅速的发现了问题。
任何分布式系统在不断演变的过程中,必然都会经过有小变到大的过程,中间也必定会由不稳定到逐步稳定的过程.在所有的这些系统能够稳定运行的一个前提是,完整的监控和报警系统.这个模块是系统保持稳定最最基础的模块服务.只有在这块功能完善的情况下,才会让系统的维护者更高效的定位到问题所在,减少不必要的时间消耗,才会有更多的时间去做其他方面的一些优化。
我们要监控哪些指标,首先你要了解Hadoop这一整套的系统逻辑,大致了解即可,那么我们应该怎么做呢?个人认为监控主要分为两个层面:宏观层面监控和微观层面监控。宏观层面就是Node级别,拓扑结构级别,DataNode、NameNode、JournalNode、ResourceManager、NodeManager,HMaster、RegionServer、Hiveserver2,这几个组件,通过分析这些节点上的监控数据,一般你能够定位到慢节点,可能某台机器的网络出问题了,或者说某台机器执行的时间总是大于正常机器等等这样类似的问题。微观层面,指细粒度化的监控,基于User级别、Job级别、Task级别的监控,这类的监控指标在实际的使用场景中特别重要,一旦你的集群资源是开放给外面的用户使用,用户本身不了解你的这套机制原理,很容易会乱申请资源,造成严重拖垮集群整体运作效率的事情,所以这类监控的指标就是为了防止这样的事情发生。
方案一:采用成熟监控组件Cloudera Manager
Cloudera Manager是CDH市场领先的管理平台。作为业界第一的端到端Apache Hadoop的管理应用,Cloudera Manager对CDH的每个部件都提供了细粒度的可视化和控制,并设置了企业部署的标准。通过Cloudera Manager运维人员得以提高集群的性能,提升服务质量,降低管理成本。
具备如下功能:
(1)管理:对集群进行管理,如添加、删除节点等操作。
(2)监控:监控集群的健康情况,对设置的各种指标和系统运行情况进行全面监控。
(3)诊断:对集群出现的问题进行诊断,对出现的问题给出建议解决方案。
(4)集成:对hadoop的多组件进行整合。
架构如下:
方案二: 采用成熟组件 Ambari
Ambari 跟 Hadoop 等开源软件一样,也是 Apache Software Foundation 中的一个项目,并且是顶级项目。目前最新的发布版本是 2.0.1,未来不久将发布 2.1 版本。就 Ambari 的作用来说,就是创建、管理、监视 Hadoop 的集群,但是这里的 Hadoop 是广义,指的是 Hadoop 整个生态圈(例如 Hive,Hbase,Sqoop,Zookeeper 等),而并不仅是特指 Hadoop。用一句话来说,Ambari 就是为了让 Hadoop 以及相关的大数据软件更容易使用的一个工具。
Ambari主要取得了以下成绩:
- 通过一步一步的安装向导简化了集群供应。
- 预先配置好关键的运维指标(metrics),可以直接查看Hadoop Core(HDFS和MapReduce)及相关项目(如HBase、Hive和HCatalog)是否健康。
- 支持作业与任务执行的可视化与分析,能够更好地查看依赖和性能。
- 通过一个完整的RESTful API把监控信息暴露出来,集成了现有的运维工具。
- 用户界面非常直观,用户可以轻松有效地查看信息并控制集群。
Ambari使用 Ganglia 收集度量指标,用 Nagios 支持系统报警,当需要引起管理员的关注时(比如,节点停机或磁盘剩余空间不足等问题),系统将向其发送邮件。
此外,Ambari能够安装安全的(基于Kerberos)Hadoop集群,以此实现了对Hadoop 安全的支持,提供了基于角色的用户认证、授权和审计功能,并为用户管理集成了LDAP和Active Directory。
架构如下:
方案三:Ganglia
Ganglia是UC Berkeley发起的一个开源集群监视项目,设计用于测量数以千计的节点。Ganglia的核心包含gmond、gmetad以及一个Web前端。主要是用来监控系统性能,如:cpu 、mem、硬盘利用率, I/O负载、网络流量情况等,通过曲线很容易见到每个节点的工作状态,对合理调整、分配系统资源,提高系统整体性能起到重要作用。
每台计算机都运行一个收集和发送度量数据的名为 gmond 的守护进程。接收所有度量数据的 主机 可以显示这些数据并且可以将这些数据的精简表单传递到层次结构中。正因为有这种层次结构模式,才使得 Ganglia 可以实现良好的扩展。gmond 带来的系统负载非常少,这使得它成为在 集群 中各台计算机上运行的一段代码,而不会影响用户性能。所有这些数据多次收集会影响节点性能。网络中的 “抖动”发生在大量小消息同时出现时,可以通过将节点时钟保持一致,来避免这个问题。
gmetad可以部署在集群内任一台节点或者通过网络连接到集群的独立主机,它通过 单播路由 的方式与gmond通信,收集区域内节点的状态信息,并以XML数据的形式,保存在数据库中。
由RRDTool工具处理数据,并生成相应的的图形显示,以Web方式直观的提供给客户端。
架构如下:
方案四:自建运营平台Grafana+InfluxDB+Collectd+指标获取工具
架构如下:
其中:
Collected负责收集主机信息;
Influxdb时序数据库,作为数据存储。可以使用Mysql等关系数据库替换;
Grafana作为Web页面展示,通过简单配置即可快速实现页面展示,图像较丰富。
Hadoop指标工具需要开发,主要获取Yarn、Hbase、Datanode等监控指标;
优缺点:
方案一中CM可以和CDH版本完美融合,但未开源,有些功能需要收费,将来个性化监控项无法通过扩展实现;
方案二中Ambari是Hortonworks开源产品,完全开源,监控指标非常丰富,尤其是支持作业与任务的监控,个性化监控容易实现,但和CDH版本集成需要验证;
方案三中Ganglia开源产品,但缺少对作业任务的监控,不支持对Hadoop集群安装管理;
方案四完全自建平台,可根据实际需要定制功能,但产品成熟工作量难度较大;