Flume

Flume海量日志采集、聚合和传输的系统
不依赖hadoop,只依赖jdk
可以向外暴露地址和端口,让其他服务器将数据加密或者走内网发送到Flume上,然后再通过sink到hdfs上

Flume-Og
Flume_第1张图片
Flume-Og采用了分层架构:分别为agent,collector和storage。其中,agent和collector均由两部分组成:source和sink,source是数据来源,sink是数据去向。storage是存储系统,可以是一个普通file,也可以是HDFS,HIVE,HBase,分布式存储等。
Master是管理协调agent和collector的配置等信息,是flume集群的控制器。

Flume-Ng
Flume_第2张图片

Source:完成对日志数据的收集,分成 transtion 和 event 打入到channel之中。
Channel:主要提供一个队列的功能,对source提供中的数据进行简单的缓存。
Sink:取出Channel中的数据,进行相应的存储文件系统,数据库,或者提交到远程服务器。

数据采集基于多个agent

source:
spooldir 监听目录,只要目录中有新的数据,就会将目录中的数据采集
exec:会将命令的返回值给source,和tail -F 可以实时采集数据

Exec source
可通过写Unix command的方式组织数据,最常用的就是tail -F [file]。
可以实现实时传输,但在flume不运行和脚本错误时,会丢数据,也不支持断点续传功能。
Spooling Directory Source
SpoolSource:是监测配置的目录下新增的文件,并将文件中的数据读取出来,可实现准实时。需要注意:
1、拷贝到spool目录下的文件不可以再打开编辑。也就是说不能再次更改这个文件,否则会跑异常
2、spool目录下不可包含相应的子目录。在实际使用的过程中,可以结合log4j使用,使用log4j的时候,将log4j的文件分割机制设为1分钟一次,将文件拷贝到spool的监控目录。log4j有一个TimeRolling的插件,可以把log4j分割的文件到spool目录。基本实现了实时的监控。Flume在传完文件之后,将会修改文件的后缀,变为.COMPLETED(后缀也可以在配置文件中灵活指定)
3、spool在sink为hdfs的情况下,传完数据后,本地文件就会变成access_20160505_000001.log.COMPLETED,当从hdfs上转入hive后,hdfs上的数据就消失了

ExecSource,SpoolSource对比:ExecSource可以实现对日志的实时收集,但是存在Flume不运行或者指令执行出错时,将无法收集到日志数据,无法何证日志数据的完整性。SpoolSource虽然无法实现实时的收集数据,但是可以使用以分钟的方式分割文件,趋近于实时。如果应用无法实现以分钟切割日志文件的话,可以两种收集方式结合使用。

Channel有多种方式:有MemoryChannel, JDBC Channel, MemoryRecoverChannel, FileChannel。MemoryChannel可以实现高速的吞吐,但是无法保证数据的完整性。

flume 命令:
sh flume-ng 参数
global options:
–conf,-c 使用 目录下的配置
agent options:
–name,-n 这个Agent的名称(必需)
–conf-file,-f 指定一个配置文件 (如果有 -z 可以缺失)
–zkConnString,-z 指定使用的ZooKeeper的链接 (如果有 -f 可以缺失)
–zkBasePath,-p 指定agent config 在 ZooKeeper Base Path

启动
sh flume-ng agent –conf ./conf –conf-file ./conf/spool/data-log.conf –name data_agent -Dflume.root.logger=INFO,console >/letv/data/20160427.log 2>&1 &

(2>&1就是用来将标准错误2重定向到标准输出1中的。此处1前面的&就是为了让bash将1解释成标准输出而不是文件1。至于最后一个&,则是让bash在后台执行。)

配置:
/letv/data/apache-flume-1.6.0-bin/conf/spool/

data-log.conf:
sources:/letv/data/hadoop-2.6.0/logs
channels:内存
sinks:/letv/data/apache-flume-1.6.0-bin/dataconf/date.conf

resourcemanager-log.conf :
sources:/letv/data/hadoop-2.6.0/logs
channels:内存
sinks:/letv/data/apache-flume-1.6.0-bin/dataconf/resourcemanager-morphlines.conf

zkfc-log.conf:
sources:/letv/data/hadoop-2.6.0/logs
channels:内存
sinks:/letv/data/apache-flume-1.6.0-bin/dataconf/zkfc-morphlines.conf

参考:
http://www.cnblogs.com/cswuyg/p/4498804.html
http://andrewli.blog.51cto.com/7625043/1615155
http://my.oschina.net/leejun2005/blog/288136
http://www.cnblogs.com/lxf20061900/p/4012847.html
http://www.huyanping.cn/flumehive%E5%A4%84%E7%90%86%E6%97%A5%E5%BF%97/

你可能感兴趣的:(Flume)