一、安装Flume
1. 解压Flume安装包到/usr/local中
$>sudo tar -zxf apache-flume-1.7.0-bin.tar.gz -C/usr/local
2. 给Flume文件夹改名
$>cd /usr/local
$>sudo mv apache-flume-1.7.0-bin/ flume
3. 修改flume文件夹的拥有者
$> sudo chown -R hadoop:hadoop flume
4. 将flume路径添加到环境变量中,并使文件立即生效
$>vim~/.bashrc
$>source~/.bashrc
添加:
# flumeinstall
exportFLUME_HOME=/usr/local/flume
export PATH=$PATH:$FLUME_HOME/bin
5. 配置flume
$>cd flume
$>mv ./conf/flume-env.sh.template ./conf/flume-env.sh
$> vim ./conf/flume-env.sh
添加:
export JAVA_HOME=/usr/locla/jdk
6. 验证flume是否安装成功
$>flume-ng version
二、应用Flume的两个实例
1. 使用Flume接收来自AvroSource的信息
案例:AvroSource 可以发送一个给定的文件给Flume,Flume接收到以后可以进行相应的处理,例如显示到屏幕上
a. 创建agent配置文件
在/usr/local/flume/conf目录下创建一个新文件avro.conf
$>cd /usr/local/flume
$>gedit./conf/avro.conf
并添加以下信息:
a1.sources= r1
a1.sinks= k1
a1.channels= c1
#Describe/configure the source
a1.sources.r1.type=avro
a1.sources.r1.channels= c1
a1.sources.r1.bind= 0.0.0.0
a1.sources.r1.port= 4141
#Describe the sink
a1.sinks.k1.type=logger
# Use achannel which buffers events in memory
a1.channels.c1.type=memory
a1.channels.c1.capacity= 1000
a1.channels.c1.transactionCapacity= 100
# Bindthe source and sink to the channel
a1.sources.r1.channels= c1
a1.sinks.k1.channel= c1
b. 启动服务 flumeagent a1
$> flume-ngagent -c . -f /usr/local/flume/conf/avro.conf -n a1 -Dflume.root.logger=INFO,console
c. 创建指定文件
打开另一个Linux终端,使用如下命令在/usr/local/flume目录下新建一个文件log.00,并在文件中加入一行内容"hello world" 。
$>sh–c ‘echo “hello world” > /usr/local/flume/log.00’
d. 使用avro-client发送文件
再打开另一个Linux终端,执行如下命令:
$> flume-ng avro-client --conf conf -H localhost -p 4141 -F/usr/local/flume/log.00
命令:
e. 在m1的控制台,可以看到以下信息,注意最后一行: hello world
结果:
2. 使用Flume接收来自NetcatSource的信息
NetcatSource可以把用户实时输入的信息不断地发送给Flume,Flume接收到以后可以进行相应的处理,例如显示到屏幕上。
a. 在/usr/local/flume/conf目录下创建一个新文件example.conf
$>cd/usr/local/flume
$>gedit./conf/example.conf
配置以下内容:
# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# Describe/configure the source
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444
# Describe the sink
a1.sinks.k1.type = logger
# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
#Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
b. 开启两个linux终端,在第一个终端中输入
$>/usr/local/flume/bin/flume-ngagent --conf ./conf --conf-file ./conf/example.conf --name a1 -Dflume.root.logger=INFO,console
命令截图:
结果截图:
c. 在第二个终端中输入
$> telnet localhost 44444
这样,在第二个终端命令行输入的信息,就可以实时显示在第一个终端界面了。
结果:
总结:
遇到的问题:再实例2使用Flume接收来自NetcatSource的信息中,开启服务命令:$>/usr/local/flume/bin/flume-ngagent --conf ./conf --conf-file ./conf/example.conf --name a1 -Dflume.root.logger=INFO,console
,最初给的是错误的,给的命令是把--conf写成了—conf,还有--name 写成了—name 这是word的原因。
提示的错误是:org.apache.commons.cli.UnrecognizedOptionException:Unrecognized option: -conf。一般这种错误是,参数写错了。
由于图片不能复制过来,该博客有很多详细步骤的截图没有,如果需要详细版的Flume安装与使用,可以点击此处下载链接:https://download.csdn.net/download/weixin_42006411/10468879