02_Flume1.6.0安装及单节点Agent实践
Flume1.6.0的安装
1、上传Flume-1.6.0-tar.gz到待部署的所有机器
以我的为例: /usr/local/src/
2、解压得到flume文件夹
# tar -xzvf flume-1.6.0-tar.gz
3、修改文件夹名称,属主,及权限
# mv flume-1.6.0 flume
# chown -R root:root flume
# chmod 755 flume
4、安装完毕,解压后可以直接使用,通过flume/conf下的配置文件修改就可以各种调戏了~
实践1 - 单节点Agent
1、配置文件
# 01-flume-netcat-test # agent name: a1 # source: netcat # channel: memory # sink: logger, local console # 01 define source,channel,sink name a1.sources = r1 a1.channels = c1 a1.sinks = k1 # 02 define source a1.sources.r1.type = netcat a1.sources.r1.bind = localhost # ip地址也OK a1.sources.r1.port = 4444 # 03 define sink a1.sinks.k1.type = logger # flume sink将拉取到的信息,event形式打印到自己被启动时的终端 # 04 define channel a1.channels.c1.type = memory # number of events in memory queue 内存队列中的最大event数值 a1.channels.c1.capacity = 1000 # number of events for 1 commit(每次向memory queuet放入event,取出event的最大值),所以肯定是比内存队列中的event小 a1.channels.c1.transactioncapacity = 100 # 05 bind source,sink to channel a1.sources.r1.channels = c1 # 1个source可以有多个channel a1.sinks.k1.channel = c1 # 1个sink只能从1个channel取数据
2、启动本节点上的flume agent
# bin/flume-ng agent --conf conf --conf-file ./conf/flume-netcat.properties --name a1 -Dflume.root.logger=INFO,console
解读:使用conf目录下的flume-netcat.properties文件,启动agent, agent的名称为a1;
flume向console打印INFO级别及以上的日志信息
3、观察Flume agent的启动
flume启动过程中会向当前console打印INFO及以上级别的日志,在日志的最后可以看到a1启动,并且netcat source启动了1个serversocket,监听本机的4444端口
4、测试该Agent
再开启1个到telnet到Agent所在机器的命令行窗口,连接建立后输入数据,查看flume是否向console打印出了输入数据
1) telnet输入
2) Flume输出event到console
3) telnet输入16个以上字符
4) Flume的logger sink, 输出event只有16个字符
telnet退出:ctrl+], 然后quit
通过flume的Git源码发现,默认情况下logger sink能够输出的最大字符数为16,该问题已经被提交修改,但flume-1.6.0版本并没有解决该问题
实践2 - 单节点Agent
exec source:执行配置文件中给定的命令,监听命令的输出,输出的每一行被作为一个event
1、停止前一个flume agent进程
# ps -aux | grep flume 找到该进程的pid
# kill pid 不要kill -9 pid
2、配置文件
3、在agent运行的主机上创建测试用log文件,和配置文件中的路径及名称保持一致:/root/flume_test/server.log
4、启动本节点上的flume agent
# bin/flume-ng agent --conf conf --conf-file ./conf/flume-exec.properties --name a1 -Dflume.root.logger=INFO,console
解读:
使用conf目录下的flume-exec.properties文件,启动agent, agent的名称为a1;
flume向console打印INFO级别及以上的日志信息
5、根据flume agent启动时的日志,判断exec agent是否正常启动,执行给定命令,并监听输出(一行为一个event)
6、向flume agent机器上的测试log日志,写入内容,查看flume是否将新的输出转换为event,最终输出到终端
1)管道追加方式向server.log文件写入数据
2)flume输出event到自身被启动时的终端
3)再追加一次
4)查看flume是否输出event到自身被启动时的终端
5)查看server.log的文件结构,验证是否一行数据对应一个event
管道方式追加,在文件中生成了2行记录,分别对应一个flume event (命令执行结果的每一行输出,对应一个event)
实践3 - 单节点Agent
1、停止前一个flume agent进程
# ps -aux | grep flume 找到该进程的pid
# kill pid 不要kill -9 pid
2、配置文件
3、在HDFS上创建event落地的目录
# hadoop fs -mkdir /flume_hdfs_sink
4、启动本节点上的flume agent
# bin/flume-ng agent --conf conf --conf-file ./conf/flume-hdfs.properties --name a1 -Dflume.root.logger=INFO,console
解读:
使用conf目录下的flume-hdfs.properties文件,启动agent, agent的名称为a1;
flume向console打印INFO级别及以上的日志信息
5. 再开启1个到telnet到Agent所在机器的命令行窗口,连接建立后输入数据,查看flume是否在HDFS目录上生成文件,将event写入
1) telnet输入
2) Flume输出
HDFS上此时存在临时文件,数据还没有真正写入
3) telnet多次输入,第11次写入时,HDFS上落地生成新文件(rollCount=10此时满足)
查看HDFS文件的内容
落地到HDFS文件中的内容,将只保留实际数据,不再是event形式
HDFS Sink的配置项参考(来自flume官网用户手册)