初探Flume—又一个分布式日志收集系统
以前一直在使用Facebook开源的Scribe作为项目中的日志收集系统,Scribe能够满足我们需求,不过前段时间看到了几种分布式日志收集系统的比对之后,发现Cloudera的Flume从实现上来说更加完善,最近有时间探索了一下。1 安装,作为Cloudera发行版的一大优势,安装从来不是什么麻烦的问题,只要我们将CDH的源(目前支持Ubuntu,CentOS,OpenSUSE等)加
以前一直在使用Facebook开源的Scribe作为项目中的日志收集系统,Scribe能够满足我们需求,不过前段时间看到了几种分布式日志收集系统的比对之后,发现Cloudera的Flume从实现上来说更加完善,最近有时间探索了一下。
1 安装,作为Cloudera发行版的一大优势,安装从来不是什么麻烦的问题,只要我们将CDH的源(目前支持Ubuntu,CentOS,OpenSUSE等)加入到系统中,就可以通过系统的包管理工具来安装了,具体请参见:https://ccp.cloudera.com/display/CDH4DOC/Flume+Installation
2. 使用,首先我们要了解Flume的几个组件的概念:Source,Channel和Sink。
source:顾名思义,就是数据的来源,这个来源可以来自Web Service中封装的客户端(AVRO客户端),可以是NETCAT服务,也可以是一个不断增长的日志文件(tail -f)。
channel:提供了一层缓冲机制,来实现数据的事务性传输,最大限度保证数据的安全传输。这层缓冲可以在内存中,可以在文件中、数据库中,当然也可以是自定义的实现。
sink:将数据转发到目的地,或者继续将数据转发到另外一个source,实现接力传输。可以通过AVRO Sink来实现。
下面是一个已经测试通过的Flume的配置实例:
syslog-agent.sources = Syslog
syslog-agent.channels = MemoryChannel-1
syslog-agent.sinks = HDFS-LAB
# For each one of the sources, the type is defined
syslog-agent.sources.Syslog.type = exec
syslog-agent.sources.Syslog.command = tail -f /var/log/hadoop/hadoop-hadoop-namenode-test00.log
# The channel can be defined as follows.
syslog-agent.sources.Syslog.channels = MemoryChannel-1
# Each sink's type must be defined
syslog-agent.sinks.HDFS-LAB.type = hdfs
#Specify the channel the sink should use
syslog-agent.sinks.HDFS-LAB.channel = MemoryChannel-1
syslog-agent.sinks.HDFS-LAB.hdfs.path = hdfs://test00:9000/flumetest/
syslog-agent.sinks.HDFS-LAB.hdfs.filePrefix = data
syslog-agent.sinks.HDFS-LAB.hdfs.file.rollInterval = 60
syslog-agent.sinks.HDFS-LAB.hdfs.fileType = DataStream
syslog-agent.sinks.HDFS-LAB.hdfs.rollSize = 1073741824
syslog-agent.sinks.HDFS-LAB.hdfs.rollCount = 0
syslog-agent.sinks.HDFS-LAB.hdfs.rollInterval = 10
# Each channel's type is defined.
syslog-agent.channels.MemoryChannel-1.type = memory
# Other config values specific to each type of channel(sink or source)
# can be defined as well
# In this case, it specifies the capacity of the memory channel
syslog-agent.channels.MemoryChannel-1.capacity = 1000
其中的syslog-agent是我们启动时需要指定的agent的name:
flume-ng agent --conf-file flume.conf --name syslog-agent
然后我们指定了agent的source,channel和sink。我们的source,也就是数据的来源,来自于对一个日志文件的追踪,这里我们执行了tail -f命令来追踪hadoop namenode的日志;
我们指定使用内存来作为channel的存储媒介,其存储容量是1000条日志;
最后就是我们数据写入的sink——HDFS sink,它将我们的数据以DataStream(也就是原始文本)的形式写入我们指定的HDFS路径下。
具体的配置说明信息可以参见:http://archive.cloudera.com/cdh4/cdh/4/flume-ng/FlumeUserGuide.html
更多推荐
所有评论(0)