您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 浅谈chukwa在数据收集处理方面的应用
谈chukwa在数据收集处理方面的应用数据收集一直以来都是一个很重要的话题,在各行各业中,有各种方式在进行着数据收集工作,而本篇将要介绍的是与Hadoop集成的数据收集工具Chukwa,它有几个非常吸引人的特点:它架构清晰,部署简单;收集的数据类型广泛,具有很强的扩展性;与Hadoop无缝集成,能完成海量数据的收集与整理。本文将从最基本的概念讲起,随后将逐步介绍如何搭建一个功能强大的数据收集平台。相信对大家在日后的工作中能带来很大的帮助。李平2011年9月23日Chukwa简介Chukwa的架构设计Chukwa环境搭建与部署基本命令介绍内部数据处理时序介绍如何支持新的数据类型如何自定义数据处理模块结束语参考资料Chukwa简介什么是Chukwa,简单的说它是一个数据收集系统,它可以将各种各样类型的数据收集成适合Hadoop处理的文件保存在HDFS中供Hadoop进行各种MapReduce操作。Chukwa本身也提供了很多内置的功能,帮助我们进行数据的收集和整理。Chukwa应用场景介绍为了更加简单直观的展示Chukwa,我们先来看一个假设的场景。假设我们有一个规模很大(牵扯到Hadoop的总是很大。。。。)的网站,网站每天产生数量庞大的日志文件,要收集,分析这些日志文件可不是件容易的事情,读者可能会想了,做这种事情Hadoop挺合适的,很多大型网站都在用,那么问题来了,分散在各个节点的数据怎么收集,收集到的数据如果有重复数据怎么处理,如何与Hadoop集成。如果自己编写代码完成这个过程,一来需要花费不小的精力,二来不可避免的会引入Bug。这里就是我们Chukwa发挥作用的时候了,Chukwa是一个开源的软件,有很多聪明的开发者在贡献着自己的智慧。它可以帮助我们在各个节点实时监控日志文件的变化,增量的将文件内容写入HDFS,同时还可以将数据去除重复,排序等,这时Hadoop从HDFS中拿到的文件已经是SequenceFile了。无需任何转换过程,中间繁杂的过程都由Chukwa帮我们完成了。是不是很省心呢。这里我们仅仅举了一个应用的例子,它还可以帮我们监控来自Socket的数据,甚至定时执行我们指定的命令获取输出数据,等等,具体的可以参看Chukwa官方文档。如果这些还不够,我们还可以自己定义自己的适配器来完成更加高级的功能。稍后我们将看到如何定义自己的适配器来做自己想做的事情。怎么样,是不是有些心动了呢。Chukwa的架构设计前面我们简单说了他的一些用途,讲的比较概括,大家不一定能明白,它到底是怎么帮助我们完成功能的,下来我们就先从他的架构设计角度来看看。我们依然先看一张图。图1.架构示意图我们还是以刚才提到的日志的例子来看。这里我们先介绍几个新名词:Agent什么是Agent,agent是驻守在各个节点上的负责收集数据的程序。Agent又由若干adapter组成。adapter运行在Agent进程以内,执行实际收集数据的工作,而Agent则负责adapter的管理。Collector什么是Collector,Collector收集各个Agent传来的数据,并将这些数据写入HDFS。了解了这两个关键的名词之后,也许有读者已经在脑海中有了大致的数据流程图了。是的,它就是这么简单:数据被Agent收集,并传送到Collector,由Collector写入HDFS,然后由Map-Reducejob进行数据的预处理。Chukwa环境搭建与部署这里我们介绍一下如何安装,部署,应用Chukwa1.前提条件Linux环境这里我们使用RedHatJDK使用1.6JDK系统中需要支持SSH其他要求2.下载chukwa这里给出的是其中一个镜像的下载地址wget这里的链接是0.4.0版本的chukwa.其他版本可以从官方网站下载。官网地址:下载HadoopHadoop的下载,安装不是本文重点,这里省略。当前的0.20.2版是比较稳定的版本。开发中的0.21.0版,由于jar包结构上的改变以及配置的改变,与当前版本的chukwa的不兼容。所以建议使用stable版本的Hadoop。4.安装tar-xzfchukwa-0.4.0.tar.gztar-xzfhadoop-0.20.2.tar.gz解压之后,假设目录名称分别chukwa-0.4.0和Hadoop-0.20.2Hadoop的配置可以参考Hadoop官方网站的教程,限于篇幅,我们这里省略。Chukwa的配置这里我们将以最简单的步骤完成agent和collector的配置,使读者可以快速的了解它。配置Agent1.编辑$CHUKWA_HOME/conf/chukwa-env.sh文件,这里需要设置JAVA_HOME注释掉HADOOP_HOME,HADOOP_CONF_DIR,因为agent仅仅是用来收集数据,所以不需要HADOOP的参与。注释掉CHUKWA_PID_DIR,CHUKWA_LOG_DIR,如果不注释的话,那么他指定的位置是在/tmp临时目录下,这会导致,PID和LOG文件被无故删除。会在后续的操作中导致异常。注释之后,系统会使用默认路径,默认会在Chukwa安装目录下创建PID和LOG文件。2.编辑$CHUKWA_HOME/conf/collectors文件,这里需要将collectors的地址写在这里,格式为这里可以写多个collector,每个占一行。Agent通常会随机选择一个作为collector将数据发送给这个collector,如果当前的collector失败,则会继续选择下一个继续尝试。collector是有loadbalance功能的,不会说所有的Agent都将数据写入到一个Collector,从而导致失败。3.编辑$CHUKWA_HOME/conf/initial_adapters文件,这里默认带的配置文件initial_adapters.template,修改名称为initial_adapters,里面默认带了几个adapter的例子。很容易理解。这个配置文件的名称,顾名思义是默认初始的adapter,当agent启动的时候,这些adapter就会工作。配置Collector1.编辑$CHUKWA_HOME/conf/chukwa-env.sh文件,修改JAVA_HOME,HADOOP_HOME,HADOOP_CONF_DIR,指定为合适的值。同样的道理,我们需要注释掉CHUKWA_PID_DIR,CHUKWA_LOG_DIR启动1.启动hadoopbin/start-all.sh2.启动collectorbin/chukwacollector3.启动agentbin/chukwaagent可以看到的结果清单1.Agent端日志片段2010-12-2310:20:28,315INFOTimer-1ExecAdaptor-callingexec2010-12-2310:20:28,377INFOTimer-1ExecAdaptor-callingexec2010-12-2310:20:28,438INFOTimer-1ExecAdaptor-callingexec2010-12-2310:20:28,451INFOHTTPpostthreadChukwaHttpSender-collected14chunksforpost_269232010-12-2310:20:28,452INFOHTTPpostthreadChukwaHttpSender-HTTPpost_26923to=177882010-12-2310:20:28,459INFOHTTPpostthreadChukwaHttpSender-HTTPGotsuccessbackfrom:20:28,459INFOHTTPpostthreadChukwaHttpSender-post_26923sent0chunks,gotback14acks2010-12-2310:20:28,500INFOTimer-1ExecAdaptor-callingexec从这里我们能看到Timer-1ExecAdaptor-callingexec已经被定时执行,而且我们还能看到Agent将信息发送给了我们指定的Collector:清单2.Collector端日志2010-12-2310:30:22,207INFOTimer-4SeqFileWriter-rotatingsinkfile/chukwa/logs/201023102522181_xipli_15db999712d1106ead87ffe.chukwa2010-12-2310:30:22,784INFOTimer-1root-stats:ServletCollector,numberHTTPConnection:15,numberchunks:11102010-12-2310:30:23,220INFOTimer-3SeqFileWriter-stat:datacollection.writer.hdfsdataSize=797670dataRate=26587从日志我们可以看到Collector已经通过writer将收集到的数据写入了文件/chukwa/logs/201023102522181_xipli_15db999712d1106ead87ffe.chukwa那么怎么知道数据已经被写入HDFS了呢。我们可以通过执行hadoop的命令来查看HDFS清单3.察看日志bin/hadoopfs-ls/chukwa/logs如果不出意外,我们已经能看到数据已经被写入了HDFS。清单4.检查文件Found205items-rw-r--r--3hadoopsupergroup6763952010-12-2217:12/chukwa/logs/201022171225851_xipli_18f1ec1212d0d4c13067ffa.done-rw-r--r--3hadoopsupergroup60463662010-12-2217:17/chukwa/logs/201022171725877_xipli_18f1ec1212d0d4c13067ff8.chukwa-rw-r--r--3hadoopsupergroup83524202010-12-2217:32/chukwa/logs/201022173249756_xipli_1f33c45712d0d6c7cdd8000.done如果想要将agent部署到多个节点去,只需要在其他节点上也做相应的配置即可。但是随着节点数目的增多,我们会发现管理agent的难度越来越高。这时我们可以使用单一的节点来批量管理所有的Agents。第一个我们需要编辑的文件是conf目录下的agents文件,默认情况下,它是一个模板文件,名称为agents.template,我们需要把它改名为agents。将agent的hostname/IP逐个添加进这个文件中,每行一个节点。这时通过调用bin/start-agents.sh和bin/stop-agents.sh可以批量的管理agents的启动和关闭。如果有遇到不能正常关闭agent的情况,那么一个可用的临时解决方法是将各个节点的chukwa脚本中的kill-1修改为kill-9。Collector也是类似的控制方式。基本命令介绍在bin目录下有很多的可执行文件。我们这里只关注以下一些文件:chukwach
本文标题:浅谈chukwa在数据收集处理方面的应用
链接地址:https://www.777doc.com/doc-2312478 .html