flume
一、理性认知
1、flume在集群中扮演的角色
flume、kafka用来实时的进行数据收集,spark、storm用来实时处理数据,impala用来实时查询
2、flume框架简介
1)flume提供一个分布式的,可靠的,对大数据量的日志进行高效收集、聚集、移动的服务,flume只能在Unix环境下运行
2)flume基于流式框架,容错性强,也很灵活简单,主要用于在线实时分析
3)角色
source:用于采集数据,source是产生数据流的地方,同时source会将产生的数据流传输到channel
channel:用于桥接source和sinks,类似于一个队列
sink:从channel中收集数据将数据写到目标源(可以使下一个source也可以是HDFS或者HBASE)
4)传输单元
event:flume数据传输的基本单元,以事件的形式将数据从源头送至目的地
5)传输过程
source监控某个文件,文件产生新的数据,拿到该数据后,将数据封装在一个event中,并put到channel后commit提交,channel队列先进先出,sink去channel中拉取数据,然后写到hdfs或者HBase中
6)tail -F hive.log -> Flume 大量的数据流,拆分成一个个的event,每个event事件又分为Header和Body
二、安装配置
flume-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_131
flume-conf.properties
source可以对接多个channel,但是一个channel只能对接一个sink
三、常用参数解读
sinks
1、上传文件的前缀
a1.sinks.k1.hdfs.filePrefix = event-hive-
2、是否按照时间滚动文件夹
hdfs.round = true
3、多少时间单位创建一个新的文件夹
hdfs.roundValue = 1
4、重新定义时间单位
hdfs.roundUnit = hour
5、是否使用本地时间戳
hdfs.useLocalTimeStamp = true
6、积攒多少个Event才flush到HDFS一次
hdfs.batchSize = 1000
7、设置文件类型,可支持压缩
hdfs.fileType = DataStream
8、多久生成一个新的文件
hdfs.rollInterval = 600
9、设置每个文件的滚动大小
hdfs.rollSize = 134217700
10、文件的滚动与Event数量无关
hdfs.rollCount = 0
11、最小冗余数
hdfs.minBlockRelicas = 1
执行语句
bin/flume-ng agent --conf conf/ --name a1 --conf-file conf/监控路径flume-dir.conf &
四、总结
在使用spooling Directory Source注意事项
1、不要在监控目录中创建并持续修改文件
2、上传完成的文件会以.COMPLETED结尾
3、被监控文件夹每600毫秒扫描一次变动