介绍
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 配置环境变量
1 2 3 4 5 6 7 8 9
| [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文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| [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=
# 我们看到上面的配置文件中的代理 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
|
测试
1 2 3 4 5 6 7 8 9 10 11
| # 启动服务 [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安装配置完成
控制台输出
复制配置文件
1
| cp flume-env.sh.template flume-env.sh
|
修改
最后面一行加上jdk路径
1
| export JAVA_HOME=/app/servers/jdk1.8.0_191
|
新建 example.conf配置文件
编辑
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| 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
a1.sinks.k1.type=logger
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
a1.sinks.k1.type=logger
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
|
启动
1
| ./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控制台是否有输出