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官网用户手册)

原文地址:https://www.cnblogs.com/shay-zhangjin/p/7936384.html