介绍
Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。Flume提供了从console(控制台)、RPC(Thrift-RPC)、text(文件)、tail(UNIX tail)、syslog(syslog日志系统),支持TCP和UDP等2种模式),exec(命令执行)等数据源上收集数据的能力。
使用Flume,我们可以将从多个服务器中获取的数据迅速的移交给Hadoop中,可以高效率的将多个网站服务器中收集的日志信息存入HDFS/HBase中。
注意:flume只需要在主节点配置,不需要在其他节点配置
环境配置
解压 and 配置环境变量
[root@master software]# tar -zvxf apache-flume-1.8.0-bin.tar.gz -C /app/servers/
[root@master servers]# mv apache-flume-1.8.0-bin flume-1.8.0
#环境变量
[root@master servers]# vi /etc/profile
#Flume Env
export FLUME_HOME=/app/servers/flume/flume-1.8.0
export PATH=$PATH:$FLUME/bin
[root@master servers]# source /etc/profile
修改flume-conf.properties文件
[root@master flume-1.8.0]# cd conf/
[root@master conf]# cp flume-conf.properties.template flume-conf.properties
[root@master conf]# vi flume-conf.properties
# 最后一行添加下面内容
#agent1表示代理名称
agent1.sources=source1
agent1.sinks=sink1
agent1.channels=channel1
#配置source1
agent1.sources.source1.type=spooldir
agent1.sources.source1.spoolDir=/app/servers/flume/logs
agent1.sources.source1.channels=channel1
agent1.sources.source1.fileHeader = false
agent1.sources.source1.interceptors = i1
agent1.sources.source1.interceptors.i1.type = timestamp
#配置channel1
agent1.channels.channel1.type=file
agent1.channels.channel1.checkpointDir=/app/servers/flume/logs_tmp_cp
agent1.channels.channel1.dataDirs=/app/servers/flume/logs_tmp
#配置sink1
agent1.sinks.sink1.type=hdfs
agent1.sinks.sink1.hdfs.path=hdfs://master:9000/logs
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.sourrces.source1.spoolDir 监听文件夹是/app/servers/flume/logs,所以我们手动创建一下
[root@master flume-1.8.0]# mkdir -p data/logs
# 上面的配置文件中 agent1.sinks.sink1.hdfs.path=hdfs://master:9000/logs下,即将监听到的/app/servers/flume-1.8.0/data/logs下的文件自动上传到hdfs的/logs下,所以我们要手动创建hdfs下的目录
[root@master flume-1.8.0]# hdfs dfs -mkdir /logs
测试
# 启动服务
[root@master flume-1.8.0]# bin/flume-ng agent -n agent1 -c conf -f /app/servers/flume/flume-1.8.0/conf/flume-conf.properties -Dflume.root.logger=DEBUG,console &
# 在/app/servers/data/logs下随便创建个文件
[root@master logs]# vi flume_test.txt
hello
我是练习两坤年的
学生
# 然后我们会发现hdfs的logs下自动上传了我们刚创建的文件
[root@master logs]# hdfs dfs -ls /logs
至此 Flume安装配置完成
控制台输出
复制配置文件
cp flume-env.sh.template flume-env.sh
修改
vim flume-env.sh
最后面一行加上jdk路径
export JAVA_HOME=/app/servers/jdk1.8.0_191
新建 example.conf配置文件
touch example.conf
编辑
vim example.conf
a1.sources=r1
a1.sinks=k1
a1.channels=c1
a1.sources.r1.type=netcat
a1.sources.r1.bind=0.0.0.0
a1.sources.r1.port=514
#start
#控制台输出
a1.sinks.k1.type=logger
#存在logs文件夹中
#a1.sinks.k1.type=file_roll
#a1.sinks.k1.sink.directory=/app/servers/flume/logs
#end
a1.channels.c1.type=memory
a1.channels.c1.capacity=1000
a1.channels.c1.transactionCapacity = 1000
a1.sources.r1.channels=c1
a1.sinks.k1.channel=c1
a1.sources=r1
a1.sinks=k1
a1.channels=c1
a1.sources.r1.type=netcat
a1.sources.r1.bind=0.0.0.0
a1.sources.r1.port=514
#start
#控制台输出
a1.sinks.k1.type=logger
#存在logs文件夹中
#a1.sinks.k1.type=file_roll
#a1.sinks.k1.sink.directory=/app/servers/flume/logs
#end
a1.channels.c1.type=memory
a1.channels.c1.capacity=1000
a1.channels.c1.transactionCapacity = 1000
a1.sources.r1.channels=c1
a1.sinks.k1.channel=c1
启动
./bin/flume-ng agent --conf conf --conf-file conf/example.conf --name a1 -Dflume.root.logger=INFO,console
测试
另起一个控制台,用telnet 连接测试
telnet 127.0.0.1 514
输入字符串 回车
查看开启flume控制台是否有输出