Hadoop连载系列之六:数据收集分析系统Chukwa

系列几篇文章中介绍了分布式存储和计算系统Hadoop以及Hadoop集群的搭建、Zookeeper集群搭建、HBase分布式部署等。当Hadoop集群的数量达到1000+时,集群自身的信息将会大量增加。Apache开发出一个开源的数据收集和分析系统—Chukwa来处理Hadoop集群的数据。Chukwa有几个非常吸引人的特点:它架构清晰,部署简单;收集的数据类型广泛,具有很强的扩展性;与 Hadoop 无缝集成,能完成海量数据的收集与整理。
1 Chukwa简介

--------------------------------------------------------------------------------
  在Chukwa的官网https://chukwa.apache.org/ 上,Chukwa被描述为:Chukwa是一个开源的监控大型分布式系统的数据收集系统,它构建于HDFS和Map/Reduce框架之上,并继承了Hadoop优秀的扩展性和健壮性。在数据分析方面,Chukwa拥有一套灵活、强大的工具,可用于监控和分析结果来更好的利用所收集的数据结果。
  为了更加简单直观的展示 Chukwa,我们先来看一个假设的场景。假设我们有一个规模很大 ( 牵扯到 Hadoop 的总是很大。。。。) 的网站,网站每天产生数量庞大的日志文件,要收集,分析这些日志文件可不是件容易的事情,读者可能会想了,做这种事情 Hadoop 挺合适的,很多大型网站都在用,那么问题来了,分散在各个节点的数据怎么收集,收集到的数据如果有重复数据怎么处理,如何与 Hadoop 集成。如果自己编写代码完成这个过程,一来需要花费不小的精力,二来不可避免的会引入 Bug。这里就是我们 Chukwa 发挥作用的时候了,Chukwa 是一个开源的软件,有很多聪明的开发者在贡献着自己的智慧。它可以帮助我们在各个节点实时监控日志文件的变化,增量的将文件内容写入 HDFS,同时还可以将数据去除重复,排序等,这时 Hadoop 从 HDFS 中拿到的文件已经是 SequenceFile 了。无需任何转换过程,中间繁杂的过程都由 Chukwa 帮我们完成了。是不是很省心呢。这里我们仅仅举了一个应用的例子,它还可以帮我们监控来自 Socket 的数据,甚至定时执行我们指定的命令获取输出数据,等等,具体的可以参看 Chukwa 官方文档。如果这些还不够,我们还可以自己定义自己的适配器来完成更加高级的功能。


2 Chukwa的架构

--------------------------------------------------------------------------------
Chukwa旨在为分布式数据收集和大数据处理提供一个灵活、强大的平台,这个平台不仅现时可用,而且能够与时俱进的利用更新的存储技术(比如HDFS、HBase等),当这些存储技术变得成熟时。为了保持这种灵活性,Chukwa被设计成收集和处理层级的管道线,在各个层级之间有非常明确和狭窄的界面,下图为Chukwa架构示意图:

Hadoop连载系列之六:数据收集分析系统Chukwa
其中主要的部件为:
1. Agents : 负责采集最原始的数据,并发送给 Collectors
2. Adaptors : 直接采集数据的接口和工具,一个 Agent 可以管理多个 Adaptor 的数据采集
3. Collectors :负责收集 Agent 收送来的数据,并定时写入集群中
4. Map/Reduce Jobs: 定时启动,负责把集群中的数据分类、排序、去重和合并
5. HICC(Hadoop Infrastructure Care Center)负责数据的展示


3 主要部件的具体设计

--------------------------------------------------------------------------------

3.1 Adaptors、Agents

--------------------------------------------------------------------------------
在每个数据的产生端(基本上是集群中每一个节点上), Chukwa 使用一个Agent 来采集它感兴趣的数据,每一类数据通过一个 Adaptor 来实现, 数据的类型(Data Model)在相应的配置中指定. 默认地, Chukwa 对以下常见的数据来源已经提供了相应的 Adaptor : 命令行输出、log 文件和 httpSender等等. 这些 Adaptor 会定期运行(比如每分钟读一次 df 的结果)或事件驱动地执行(比如 kernel 打了一条错误日志). 如果这些 Adaptor 还不够用,用户也可以方便地自己实现一个 Adaptor 来满足需求。

为防止数据采集端的 Agent 出现故障,Ahukwa 的 Agent 采用了所谓的 ‘watchdog’ 机制,会自动重启终止的数据采集进程,防止原始数据的丢失。
另一方面, 对于重复采集的数据, 在 Chukwa 的数据处理过程中,会自动对它们进行去重. 这样,就可以对于关键的数据在多台机器上部署相同的 Agent,从而实现容错的功能。

3.2 Collectors

--------------------------------------------------------------------------------
agents 采集到的数据,是存储到 hadoop 集群上的。hadoop 集群擅长于处理少量大文件,而对于大量小文件的处理则不是它的强项,针对这一点,chukwa 设计了 collector 这个角色,用于把数据先进行部分合并,再写入集群,防止大量小文件的写入。
另一方面,为防止 collector 成为性能瓶颈或成为单点,产生故障, chukwa 允许和鼓励设置多个 collector, agents 随机地从 collectors 列表中选择一个 collector 传输数据,如果一个 collector 失败或繁忙,就换下一个 collector. 从而可以实现负载的均衡,实践证明,多个 collector 的负载几乎是平均的。

3.3 demux、archive

--------------------------------------------------------------------------------
放在集群上的数据,是通过 map/reduce 作业来实现数据分析的. 在 map/reduce 阶段, chukwa 提供了 demux 和 archive 任务两种内置的作业类型.
demux 作业负责对数据的分类、排序和去重. 在 agent 一节中,我们提到了数据类型(DataType?)的概念.由 collector 写入集群中的数据,都有自己的类型. demux 作业在执行过程中,通过数据类型和配置文件中指定的数据处理类,执行相应的数据分析工作,一般是把非结构化的数据结构化,抽取中其中的数据属性.由于 demux 的本质是一个 map/reduce 作业,所以我们可以根据自己的需求制定自己的 demux 作业,进行各种复杂的逻辑分析. chukwa 提供的 demux interface 可以用 java 语言来方便地扩展.
而 archive 作业则负责把同类型的数据文件合并,一方面保证了同一类的数据都在一起,便于进一步分析, 另一方面减少文件数量, 减轻 hadoop 集群的存储压力。

3.4 dbadmin

--------------------------------------------------------------------------------
放在集群上的数据,虽然可以满足数据的长期存储和大数据量计算需求,但是不便于展示。为此, chukwa 做了两方面的努力:
1. 使用 mdl 语言,把集群上的数据抽取到 mysql 数据库中,对近一周的数据,完整保存,超过一周的数据,按数据离现在的时间长短作稀释,离现在越久的数据,所保存的数据时间间隔越长.通过 mysql 来作数据源,展示数据.
2. 使用 hbase 或类似的技术,直接把索引化的数据在存储在集群上
到 chukwa 0.4.0 版本为止, chukwa 都是用的第一种方法,但是第二种方法更优雅也更方便一些。

3.5 hicc

--------------------------------------------------------------------------------
hicc 是 chukwa 的数据展示端的名字。在展示端, chukwa 提供了一些默认的数据展示 widget,可以使用“列表”、“曲线图”、“多曲线图”、“柱状图”、“面积图式展示一类或多类数据,给用户直观的数据趋势展示。而且,在 hicc 展示端,对不断生成的新数据和历史数据,采用 robin 策略,防止数据的不断增长增大服务器压力,并对数据在时间轴上“稀释”,可以提供长时间段的数据展示
从本质上, hicc 是用 jetty 来实现的一个 web 服务端,内部用的是 jsp 技术和 javascript 技术.各种需要展示的数据类型和页面的局都可以通过简直地拖拽方式来实现,更复杂的数据展示方式,可以使用 sql 语言组合出各种需要的数据.如果这样还不能满足需求,不用怕,动手修改它的 jsp 代码就可以了。

3.6 其它数据接口

--------------------------------------------------------------------------------
如果对原始数据还有新的需要,用户还可以通过 map/reduce 作业或 pig 语言直接访问集群上的原始数据,以生成所需要的结果。chukwa 还提供了命令行的接口,可以直接访问到集群上数据。


3.7 默认数据支持

--------------------------------------------------------------------------------
对于集群各节点的cpu使用率、内存使用率、硬盘使用率、集群整体的 cpu 平均使用率、集群整体的内存使用率、集群整体的存储使用率、集群文件数变化、作业数变化等等 hadoop 相关数据,从采集到展示的一整套流程, chukwa 都提供了内建的支持,只需要配置一下就可以使用.可以说是相当方便的.
可以看出,chukwa 从数据的产生、收集、存储、分析到展示的整个生命周期都提供了全面的支持。下图为Chukwa完整架构图:

Hadoop连载系列之六:数据收集分析系统Chukwa

相关阅读

相关推荐