下图是Flume NG的架构图,如下所示:
二.单点Flume NG搭建、运行
搭建环境
之前搭好的单节点hadoop环境
1.下载最新版的flume
apache-flume-1.9.0-bin.tar.gz
cd /data
tar -zxvf apache-flume-1.9.0-bin.tar.gz
2.配置java环境变量
cd /data/apache-flume-1.9.0-bin/conf
cp flume-env.sh.template flume-env.sh
vim flume-env.sh
export JAVA_HOME=/usr/local/jdk1.8.0_261
3.单节点flume配置文件
cp flume-conf.properties.template
vim flume.conf
注释之前的配置
这个配置文件定义了一个单agent名字叫agent1,agent1有一个source在采集一个目录下的日志文件,agent1的channel是file,sink是直接输送hdfs,由于是测试,在本机提前创建好一个日志目录/data/testdir/logdfs,创建数据通道的目录/data/apache-flume-1.9.0-bin/dir/logdfstmp/point
#agent1 name
agent1.sources=source1
agent1.sinks=sink1
agent1.channels=channel1
#Spooling Directory
#set source1
agent1.sources.source1.type=spooldir
agent1.sources.source1.spoolDir=/data/testdir/logdfs
agent1.sources.source1.channels=channel1
agent1.sources.source1.fileHeader = false
agent1.sources.source1.interceptors = i1
agent1.sources.source1.interceptors.i1.type = timestamp
#set sink1
agent1.sinks.sink1.type=hdfs
agent1.sinks.sink1.hdfs.path=hdfs://190.168.3.98:9000/flume/logdfs
agent1.sinks.sink1.hdfs.fileType=DataStream
agent1.sinks.sink1.hdfs.writeFormat=TEXT
agent1.sinks.sink1.hdfs.rollInterval=1
agent1.sinks.sink1.channel=channel1
agent1.sinks.sink1.hdfs.filePrefix=%Y-%m-%d
agent1.sinks.sink1.hdfs.fileSuffix=.txt
#set channel1
agent1.channels.channel1.type=file
agent1.channels.channel1.checkpointDir=/data/apache-flume-1.9.0-bin/dir/logdfstmp/point
agent1.channels.channel1.dataDirs=/data/apache-flume-1.9.0-bin/dir/logdfstmp
4.启动flume服务
指定配置文件和用户
./flume-ng agent --conf conf --conf-file /data/apache-flume-1.9.0-bin/conf/flume.conf --name agent1 -Dflume.super.logger=INFO,console
这里有一个报错:
ERROR hdfs.HDFSEventSink: process failed
java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
经过查询,参考百度找到的解决方法http://www.coder55.com/article/81764, 是jar版本不一致或者是flume里的guava比hadoop库里的guava版本低
我们查看hadoop库里的guava版本
ll /data/hadoop-3.2.1/share/hadoop/common/lib/guava-27.0-jre.jar
再查看flume里面的guava版本
ll /data/apache-flume-1.9.0-bin/lib/guava-11.0.2.jar
版本比hadoop的版本低,将hadoop库里的guava-27.0-jre.jar包替换flume里面的guava-11.0.2.jar包
[super@hadoop lib]$ mv guava-11.0.2.jar guava-11.0.2.jar.bak
[super@hadoop lib]$ cp -rp /data/hadoop-3.2.1/share/hadoop/common/lib/guava-27.0-jre.jar .
再次启动,没有报错
多了个Application
三.单节点flume效果预览
我们在模拟的日志目录里创建个几个文件,flume立马采集完成COMPLETED
在HDFS里查看写入的数据
[super@hadoop logdfs]$ hdfs dfs -ls /flume/logdfs
原文:https://blog.51cto.com/anfishr/2538128