【译文】:Flume是一种分布式、可靠和可用的服务,可以有效地收集、聚集和移动大量的日志数据。它有一个基于流数据流的简单而灵活的体系结构。它具有可调可靠性机制和许多故障转移和恢复机制的健壮性和容错能力。它使用一个简单的可扩展的数据模型,允许在线分析应用程序。
flume的核心概念模型如上图。flume在web server和hdfs之间担任代理角色,source端作为输入负责与web server交互监控收集数据,sink端作为输出负责向hdfs写数据。channel作为管道连接source和sink供两者传输数据。
Source常用类型
Avro Source:
在Avro端口上监听并接收来自外部Avro客户流的事件;属于远程调用的方式
Exec Source:
基于linux命令,将该命令的输出作为source
Spooling Directory Source :
这个Source将监视指定目录是否有新文件,如果有新文件的话,就解析这个新文件;在文件的内容所有的都读取 到Channel之后,Spooling Directory Source会重名或者是删除该文件以表示文件已经读取完成。
1.文件在读入spooling目录后不允许再次写;
2.文件不允许重复使用;
Kafka Source: 一种实时框架
Sink常用类型
Avro Sink
HDFS Sink
Hive Sink
Logger Sink
Kafka Sink
Channels常用类型
Memory: 内存存储
JDBC:数据库存储
Kafka
示例配置
a1.sources = r1
a1.channels = c1
a1.sink = k1
# Describe/configure the source:exec source
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /var/log/secure
# Describe the sink :hdfs sink
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = /flume/events/%y-%m-%d/%H%M/%S
a1.sinks.k1.hdfs.filePrefix = events-
a1.sinks.k1.hdfs.round = true
a1.sinks.k1.hdfs.roundValue = 10
a1.sinks.k1.hdfs.roundUnit = minute
a1.sinks.k1.hdfs.rollInterval = 30
a1.sinks.k1.hdfs.rollSize = 30
a1.sinks.k1.hdfs.rollCount = 30
a1.sinks.k1.hdfs.idleTimeout = 3
# Use a channel which buffers events in memory: memory channels
a1.channels.c1.type = memory
a1.channels.c1.capacity = 10000
a1.channels.c1.transactionCapacity = 10000
a1.channels.c1.byteCapacityBufferPercentage = 20
a1.channels.c1.byteCapacity = 800000
# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
安装
flume安装很简单,上传压缩包后解压然后修改conf/flume-env.sh中的JAVA_HOME即可。安装成功后最好配置一下flume环境变量;
命令flume-ng version验证安装结果