上篇: 用户行为数据采集 第4 节 完全分布式的 zk、 xcall、dt、lg脚本编写
1、Flume采集
安装Flume
- 上传Flume压缩包
[root@hadoop1 hadoop]# ll
total 54408
-rw-r--r--. 1 root root 55711670 Apr 3 06:25 apache-flume-1.7.0-bin.tar.gz
- 解压Flume
[root@hadoop1 hadoop]# tar -zxvf apache-flume-1.7.0-bin.tar.gz -C module/
- 配置Flume
//进入flume安装目录
[root@hadoop1 hadoop]# cd module/flume-1.7.0/
[root@hadoop1 flume-1.7.0]# cd conf/
[root@hadoop1 conf]# vim flume-env.sh
//添加参数
export JAVA_HOME=/usr/local/etc/java/moduce/jdk1.8.0_221
- 分发到其他机器上,分发之前三台机器都需要关闭防火墙
systemctl stop firewalld.service
[root@hadoop1 module]# scp -r flume-1.7.0/ hadoop2.x:/usr/local/etc/hadoop/module/
[root@hadoop1 module]# scp -r flume-1.7.0/ hadoop3.x:/usr/local/etc/hadoop/module/
集群规划:
服务器hadoop1.x | 服务器hadoop2.x | 服务器hadoop3.x | |
---|---|---|---|
Flume(采集日志) | Flume | Flume |
2、项目经验之Flume组件
-
Source
(1)Taildir Source相比Exec Source、Spooling Directory Source的优势
TailDir Source:断点续传、多目录。Flume1.6以前需要自己自定义Source记录每次读取文件位置,实现断点续传。
Exec Source可以实时搜集数据,但是在Flume不运行或者Shell命令出错的情况下,数据将会丢失。
Spooling Directory Source监控目录,不支持断点续传。
(2)batchSize大小如何设置?
答:Event 1K左右时,500-1000合适(默认为100) -
Channel
采用Kafka Channel,省去了Sink,提高了效率。
3、日志采集Flume配置
- Flume配置分析
日志采集Flume
Flume直接读log日志的数据,log日志的格式是app-yyyy-mm-dd.log。 - Flume的具体配置如下:
(1)在module/flume/conf目录下创建file-flume-kafka.conf文件
[root@hadoop1 module]# cd flume-1.7.0/conf/
[root@hadoop1 conf]# vim file-flume-kafka.conf
//添加参数
a1.sources=r1
a1.channels=c1 c2
# configure source
a1.sources.r1.type = TAILDIR
a1.sources.r1.positionFile = /opt/test/log_position.json
a1.sources.r1.filegroups = f1
a1.sources.r1.filegroups.f1 = /tmp/logs/app.+
a1.sources.r1.fileHeader = true
a1.sources.r1.channels = c1 c2
#interceptor
a1.sources.r1.interceptors = i1 i2
a1.sources.r1.interceptors.i1.type = com.study.flume.interceptor.LogETLInterceptor$Builder
a1.sources.r1.interceptors.i2.type = com.study.flume.interceptor.LogTypeInterceptor$Builder
a1.sources.r1.selector.type = multiplexing
a1.sources.r1.selector.header = topic
a1.sources.r1.selector.mapping.topic_start = c1
a1.sources.r1.selector.mapping.topic_event = c2
# configure channel
a1.channels.c1.type = org.apache.flume.channel.kafka.KafkaChannel
a1.channels.c1.kafka.bootstrap.servers = hadoop1.x:9092,hadoop2.x:9092,hadoop3.x:9092
a1.channels.c1.kafka.topic = topic_start
a1.channels.c1.parseAsFlumeEvent = false
a1.channels.c1.kafka.consumer.group.