flume快速使用及简单配置

安装准备

java中有蛮多简单好用的工具类,flume作为一个轻便的集数据监控、传输、管理为一体的工具是非常常用的,这里简单对其作一个快速使用。

flume非常轻便,只要有jdk环境即可。

快速使用

做数据挖掘往往会接触各种不同来源的日志数据,比较高效的是将其定时写入如es、hdfs、hive等集群中进行统一分析,挖掘。

这里简单进行一个示例,为flume监控本地日志到hdfs。

#a1是agent的名称,a1中定义了一个叫r1的source,如果有多个,使用空格间隔
# 如 a1.sources = r1 r2 r3
a1.sources = r1
a1.sinks = k1
a1.channels = c1
#组名名.属性名=属性值
a1.sources.r1.type=exec
a1.sources.r1.command=tail -f /opt/module/hive/logs/hive.log

#定义chanel
a1.channels.c1.type=memory
a1.channels.c1.capacity=1000

#定义sink
a1.sinks.k1.type = hdfs
#一旦路径中含有基于时间的转义序列,要求event的header中必须有timestamp=时间戳,如果没有需要将useLocalTimeStamp = true
# 通过时间天、小时、分钟动态建立目录并上传文件
# 当然也可以不去回滚目录 a1.sinks.k1.hdfs.path = hdfs://hadoop101:9000/flume
# 这个目录是hdfs地址
a1.sinks.k1.hdfs.path = hdfs://hadoop101:9000/flume/%Y%m%d/%H/%M
#上传文件的前缀
a1.sinks.k1.hdfs.filePrefix = logs-

#以下三个和目录的滚动相关,目录一旦设置了时间转义序列,基于时间戳滚动
#是否将时间戳向下舍
a1.sinks.k1.hdfs.round = true
#多少时间单位创建一个新的文件夹
a1.sinks.k1.hdfs.roundValue = 1
#重新定义时间单位
a1.sinks.k1.hdfs.roundUnit = minute

#是否使用本地时间戳
a1.sinks.k1.hdfs.useLocalTimeStamp = true
#积攒多少个Event才flush到HDFS一次
a1.sinks.k1.hdfs.batchSize = 100

#以下三个和文件的滚动相关,以下三个参数是或的关系!以下三个参数如果值为0都代表禁用!
#60秒滚动生成一个新的文件
a1.sinks.k1.hdfs.rollInterval = 60
#设置每个文件到128M时滚动
a1.sinks.k1.hdfs.rollSize = 134217700
#每写多少个event滚动一次
a1.sinks.k1.hdfs.rollCount = 0


#连接组件 同一个source可以对接多个channel,一个sink只能从一个channel拿数据!
a1.sources.r1.channels=c1
a1.sinks.k1.channel=c1

可能flume在使用时,稍微需要我们细心的就是配置文件的书写了。使用的命令也非常简单。

flume-ng agent -c conf/ -n a1 -f myagents/hdfs-exec.conf

a1 是配置文件上的agent名,-f 指定配置文件路径。

更好的使用

上述配置可以让我们在简单的场景中使用,但是实际开发往往复杂。上述则有局限性。1. 往往生产环境监控的不是某个文件而是目录
2. exec是异步source,要考虑数据丢失的问题。

下面有一种更好的使用方式

你可能感兴趣的:(flume,hdfs,hadoop)