浅谈chukwa在数据收集处理方面的应用.docx
- 文档编号:3103774
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:18
- 大小:81.51KB
浅谈chukwa在数据收集处理方面的应用.docx
《浅谈chukwa在数据收集处理方面的应用.docx》由会员分享,可在线阅读,更多相关《浅谈chukwa在数据收集处理方面的应用.docx(18页珍藏版)》请在冰点文库上搜索。
浅谈chukwa在数据收集处理方面的应用
谈chukwa在数据收集处理方面的应用
数据收集一直以来都是一个很重要的话题,在各行各业中,有各种方式在进行着数据收集工作,而本篇将要介绍的是与Hadoop集成的数据收集工具Chukwa,它有几个非常吸引人的特点:
它架构清晰,部署简单;收集的数据类型广泛,具有很强的扩展性;与Hadoop无缝集成,能完成海量数据的收集与整理。
本文将从最基本的概念讲起,随后将逐步介绍如何搭建一个功能强大的数据收集平台。
相信对大家在日后的工作中能带来很大的帮助。
李平
2011年9月23日
Chukwa简介
Chukwa的架构设计
Chukwa环境搭建与部署
基本命令介绍
内部数据处理时序介绍
如何支持新的数据类型
如何自定义数据处理模块
结束语
参考资料浅谈chukwa在数据收集处理方面的应用
数据收集一直以来都是一个很重要的话题,在各行各业中,有各种方式在进行着数据收集工作,而本篇将要介绍的是与Hadoop集成的数据收集工具Chukwa,它有几个非常吸引人的特点:
它架构清晰,部署简单;收集的数据类型广泛,具有很强的扩展性;与Hadoop无缝集成,能完成海量数据的收集与整理。
本文将从最基本的概念讲起,随后将逐步介绍如何搭建一个功能强大的数据收集平台。
相信对大家在日后的工作中能带来很大的帮助。
浅谈chukwa在数据收集处理方面的应用
数据收集一直以来都是一个很重要的话题,在各行各业中,有各种方式在进行着数据收集工作,而本篇将要介绍的是与Hadoop集成的数据收集工具Chukwa,它有几个非常吸引人的特点:
它架构清晰,部署简单;收集的数据类型广泛,具有很强的扩展性;与Hadoop无缝集成,能完成海量数据的收集与整理。
本文将从最基本的概念讲起,随后将逐步介绍如何搭建一个功能强大的数据收集平台。
相信对大家在日后的工作中能带来很大的帮助。
浅谈chukwa在数据收集处理方面的应用
数据收集一直以来都是一个很重要的话题,在各行各业中,有各种方式在进行着数据收集工作,而本篇将要介绍的是与Hadoop集成的数据收集工具Chukwa,它有几个非常吸引人的特点:
它架构清晰,部署简单;收集的数据类型广泛,具有很强的扩展性;与Hadoop无缝集成,能完成海量数据的收集与整理。
本文将从最基本的概念讲起,随后将逐步介绍如何搭建一个功能强大的数据收集平台。
相信对大家在日后的工作中能带来很大的帮助。
评论:
李平,软件开发工程师,IBM
关闭[x]
李平,具有6年从业经验的软件开发人员,现就职于IBMCDL。
从事多年J2EE及相关技术工作。
2011年9月23日
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环境搭建与部署
这里我们介绍一下如何安装,部署,应用Chukwa
1.前提条件
∙Linux环境
∙这里我们使用RedHat
∙JDK使用1.6JDK
∙系统中需要支持SSH
∙其他要求
2.下载chukwa
∙这里给出的是其中一个镜像的下载地址wget这里的链接是0.4.0版本的chukwa.其他版本可以从官方网站下载。
官网地址:
http:
//incubator.apache.org/chukwa/
3.下载Hadoop
∙Hadoop的下载,安装不是本文重点,这里省略。
当前的0.20.2版是比较稳定的版本。
开发中的0.21.0版,由于jar包结构上的改变以及配置的改变,与当前版本的chukwa的不兼容。
所以建议使用stable版本的Hadoop。
4.安装
∙tar-xzfchukwa-0.4.0.tar.gz
∙tar-xzfhadoop-0.20.2.tar.gz
∙解压之后,假设目录名称分别chukwa-0.4.0和Hadoop-0.20.2
Hadoop的配置
可以参考Hadoop官方网站的教程,限于篇幅,我们这里省略。
Chukwa的配置
这里我们将以最简单的步骤完成agent和collector的配置,使读者可以快速的了解它。
配置Agent
1.编辑$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的地址写在这里,格式为http:
//hostname:
port/.这里可以写多个collector,每个占一行。
Agent通常会随机选择一个作为collector将数据发送给这个collector,如果当前的collector失败,则会继续选择下一个继续尝试。
collector是有loadbalance功能的,不会说所有的Agent都将数据写入到一个Collector,从而导致失败。
3.编辑$CHUKWA_HOME/conf/initial_adapters文件,这里默认带的配置文件initial_adapters.template,修改名称为initial_adapters,里面默认带了几个adapter的例子。
很容易理解。
这个配置文件的名称,顾名思义是默认初始的adapter,当agent启动的时候,这些adapter就会工作。
配置Collector
1.编辑$CHUKWA_HOME/conf/chukwa-env.sh文件,修改JAVA_HOME,HADOOP_HOME,HADOOP_CONF_DIR,指定为合适的值。
同样的道理,我们需要注释掉CHUKWA_PID_DIR,CHUKWA_LOG_DIR
启动
1.启动hadoop
bin/start-all.sh
2.启动collector
bin/chukwacollector
3.启动agent
bin/chukwaagent
可以看到的结果
清单1.Agent端日志片段
2010-12-2310:
20:
28,315INFOTimer-1ExecAdaptor-callingexec
2010-12-2310:
20:
28,377INFOTimer-1ExecAdaptor-callingexec
2010-12-2310:
20:
28,438INFOTimer-1ExecAdaptor-callingexec
2010-12-2310:
20:
28,451INFOHTTPpostthreadChukwaHttpSender-
collected14chunksforpost_26923
2010-12-2310:
20:
28,452INFOHTTPpostthreadChukwaHttpSender-
>>>>>>HTTPpost_26923tohttp:
//xi-pli:
8080/length=17788
2010-12-2310:
20:
28,459INFOHTTPpostthreadChukwaHttpSender-
>>>>>>HTTPGotsuccessbackfromhttp:
//xi-pli:
8080/chukwa;responselength924
2010-12-2310:
20:
28,459INFOHTTPpostthreadChukwaHttpSender-
post_26923sent0chunks,gotback14acks
2010-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.chukwa
2010-12-2310:
30:
22,784INFOTimer-1root-
stats:
ServletCollector,numberHTTPConnection:
15,numberchunks:
1110
2010-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--3hadoopsupergroup
6763952010-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--3hadoopsupergroup
83524202010-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目录下有很多的可执行文件。
我们这里只关注以下一些文件:
chukwa
chukwa命令的帮助信息如下
清单5.基本命令
Usage:
chukwa[--configconfdir]COMMAND
whereCOMMANDisoneof:
agentrunaChukwaAgent
archiveruntheArchiveManager
collectorrunaChukwaCollector
demuxruntheDemuxManager
dprunthePostDemuxdataprocessors
hiccrunaHICCWebserver
drollrunadailyrollingjob(deprecated)
hrollrunahourlyrollingjob(deprecated)
versionprinttheversion
Utilities:
backfillrunabackfilldataloaderutility
dumpArchiveviewanarchivefile
dumpRecordviewarecordfile
tailstarttailingafile
Mostcommandprinthelpwheninvokedw/oparameters.
各参数的功能如下:
bin/chukwaagent启动本地agent
bin/chukwaagentstop关闭本地agent
bin/chukwacollector启动本地collector
bin/chukwacollectorstop关闭本地collector
bin/chukwaarchive定时运行archive,将文件整理成SequenceFile.并且会去除重复内容。
bin/chukwaarchivestop停止运行archive
bin/chukwademux启动demux管理器,相当于启动了一个M/RJob.默认情况是TsProcessor.我们也可以自己定义自己的数据处理模块,稍后提到。
bin/chukwademuxstop停止demux管理器
bin/chukwadp启动demuxpostprocessor用于定时排序,归并文件,剔除冗余数据。
bin/chukwadpstop停止dp运行
bin/chukwahicc这是一个有意思的东西,它类似一个portal,将数据以图形的方式展现出来。
但是在当前的0.4.0版本还有很多问题,读者要是有兴趣,可以试一下开发中的0.5.0版本。
后面的命令比较简单,根据提示也能正确运行,不做详细叙述。
slaves.sh
slaves.sh命令,很有用,尤其是当你有很多节点的时候,比如有50个节点,想要给每个节点下创建一个目录abc怎么办呢。
如果一个一个去机器上创建,那就太繁琐了。
幸好,有它可以帮我们,bin/slaves.shmkdir/home/hadoop/abc.它就会帮我们在各个节点上创建对应的目录。
start-agents.sh
该命令会启动所有注册在agents文件中的Agent
start-collectors.sh
该命令会启动所有注册在collectors文件中的Collector
stop-agents.sh
该命令会停止所有注册在agents文件中的Agent
stop-collectors.sh
该命令会停止所有注册在collectors文件中的Collector
start-data-processors.sh
该命令是以下三个命令的组合:
bin/chukwaarchive
bin/demux
bin/dp
他会将这三个命令依次启动,不用自己一个一个启动。
stop-data-processors.sh
依次停止archive/demux/dp三个服务
Agent端命令:
当Agent启动之后,我们还可以动态控制Agent中的adapter。
当Agent启动之后,每个Agent都会启动一个telnet服务,用于单独控制Agent。
默认端口是9093。
当运行了命令telnetlocalhost9093之后,会进入telnet控制台,显示如下:
清单6.Agent控制台信息
Trying:
:
1...
Connectedtolocalhost.
Escapecharacteris'^]'.
输入回车,并输入help命令,会显示详细的命令帮助信息
清单7.Agent控制台信息
you'retalkingtotheChukwaagent.Commandsavailable:
add[adaptorname][args][offset]--startanadaptor
shutdown[adaptornumber]--gracefulstop
stop[adaptornumber]--abruptstop
list--listrunningadaptors
close--closethisconnection
stopagent--stopthewholeagentprocess
stopall--stopalladaptors
reloadCollectors--reloadthelistofcollectors
help--printthismessage
Commandnamesarecase-blind.
此时输入list,则可以查看到当前正在运行的所有的adapter。
显示如下:
清单8.Agent控制台信息
adaptor_8567b8b00a5dc746ccd5b8d179873db1)
org.apache.hadoop.chukwa.datacollection.adaptor.ExecAdaptor
Top60/usr/bin/top-b-n1-c505728
adaptor_e69999b07d7023e6ba08060c85bd9ad7)
org.apache.hadoop.chukwa.datacollection.adaptor.ExecAdaptor
Df60/bin/df-l353792
其他命令都比较浅显易懂,我们下来仅仅看看add命令。
以下面一个例子来看:
清单9.Agent添加adapter
addfiletailer.LWFTAdaptordataType/foo/bar0
该命令将LWFTAdaptor这个adaptor加入到Agent中并运行,数据类型是dataType类型,这个类型将与后续的demux服务一起配合工作,/foo/barbar是adaptor的参数,最后的数字0则表示数据的偏移量。
目前chukwa0.4.0支持的adaptor大致分以下几种类型:
检测文件/目录变化的,监测UDP数据的,执行特定shell脚本的。
具体可以参考chukwa官方文档,有较详尽的描述。
需要指出的是在0.5版本中,adaptor被更加的强化和规范化。
有兴趣的读者可以看看。
如果要从telnet控制台退出,则可以通过输入close退出。
内部数据处理时序介绍
图2.内部数据处理时序
1.Collector将Agent发送的数据写入到logs/*.chukwa文件,直到文件大小达到64M或者达到一定的时间间隔之后,Collector会将*.chukwa文件重命名为*.done文件表明文件写入结束。
2.DemuxManager每隔
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 浅谈 chukwa 数据 收集 处理 方面 应用