[Flume] 01 - 安装与配置(目前只在master节点上操作)

本文介绍了在Windows和CentOS7虚拟机环境下Flume 1.6.0的安装与配置。包括将压缩包放共享目录、复制解压、修改环境变量和配置文件、安装telnet和xinetd等准备工作,还对NetCat、Exec、Avro三种类型进行配置和验证,实现日志采集。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境:Windows 64位、VMware 12 Pro下安装了3台CentOS7虚拟机、SecureCRT 7.3、Hadoop 2.6.5、JDK 1.8、flume 1.6.0

其中,flume 1.6.0是在2015年5月20日发布的。目前(20190525)最新版本是2019年1月8日发布的1.9.0。

0、准备工作

0.0、在win上将Flume压缩包放在win下的共享目录下

镜像网站下载flume
在这里插入图片描述

0.1、将共享目录下的Flume压缩包复制到虚拟机Master节点中需要的目录下

[root@master cyg]# vmware-hgfsclient 查看当前有哪些共享的目录

[root@master hgfs]# vmhgfs-fuse .host:/ /mnt/hgfs 手动挂载(mount)。
手动挂载后,得cd退一下当前目录,再进去,才能看到,类似于刷新目录。

[root@master /]# cd /mnt/hgfs/share_folder 进入共享目录

[root@master share_folder]# pwd 查看所在哪个工作目录
/mnt/hgfs/share_folder

[root@master share_folder]# ls
apache-flume-1.6.0-bin.tar.gz            hadoop-2.6.5.tar.gz
...

[root@master share_folder]# cp apache-flume-1.6.0-bin.tar.gz /usr/local/src
复制Flume压缩包 到目标路径下

PS:也可以不通过共享目录的方式,直接在终端用wget URL命令下载安装包。

0.2、解压Flume压缩包

有数据源的节点就需要安装Flume。

在SecureCRT-Sessions另开一个Master节点窗口,以root身份进入Flume压缩包所在目录,并解压它

[root@master src]# pwd
/usr/local/src
[root@master src]# ls
apache-flume-1.6.0-bin.tar.gz
....

[root@master src]# tar zxvf apache-flume-1.6.0-bin.tar.gz 解压该压缩包
....
......

解压完之后,可使用rm -f [文件名]删除它。

0.3、环境变量

vim /etc/profile

尾部添加如下内容:

export FLUME_HOME=/usr/local/src/apache-flume-1.6.0-bin
export FLUME_CONF_DIR=$FLUME_HOME/conf
export PATH=.:$PATH::$FLUME_HOME/bin

0.4、Flume配置文件修改

[root@master conf]# pwd
/usr/local/src/apache-flume-1.6.0-bin/conf

[root@master conf]# cp flume-env.sh.template flume-env.sh

[root@master conf]# vim flume-env.sh  添加下方这句
export JAVA_HOME=/usr/local/src/jdk1.8.0_172

0.5、安装telnet和xinetd

因为是在本地netcat测试,所以需要连接telnet。若本地没有安装telnet则需要安装好。

安装telnet和xinetd-参考链接

Telnet协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式。
它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个telnet会话,必须输入用户名和密码来登录服务器。Telnet是常用的远程控制Web服务器的方法。

开机自启动

[root@master ~]# systemctl enable xinetd.service
[root@master ~]# systemctl enable telnet.socket
Created symlink from /etc/systemd/system/sockets.target.wants/telnet.socket to /usr/lib/systemd/system/telnet.socket.

启动这两个服务:

[root@master ~]# systemctl start telnet.socket
[root@master ~]# systemctl start xinetd

开启端口 23时,报错:

[root@master ~]# firewall-cmd --zone=public --add-port=23/tcp --permanent
Traceback (most recent call last):
  File "/usr/bin/firewall-cmd", line 24, in <module>
    from gi.repository import GObject
ImportError: No module named 'gi'

参考文档
解决:

第一步,vim /usr/bin/firewall-cmd, 将#!/usr/bin/python -Es 改为 #!/usr/bin/python2.7 -Es
第二步,vim /usr/sbin/firewalld,  将#!/usr/bin/python -Es 改为 #!/usr/bin/python2.7 -Es

接着查询端口(23)是否开放,报错:

[root@master ~]# firewall-cmd --query-port=23/tcp                        
FirewallD is not running

解决方案:链接,开启防火墙。

思路:根据数据采集的需求配置采集方案,描述在配置文件中(文件名可任意自定义)。指定采集方案配置文件,在相应的节点上启动flume agent。

其实,下方主要是配置Flume sources(即所采集数据的来源上),除了下方3种数据来源(netcat/exec/avro)配置,更多可参看官网(如:thrift、JMS、spooling directory等)

1、配置和验证

[root@master conf]# pwd
/usr/local/src/apache-flume-1.6.0-bin/conf
[root@master conf]# ls
flume-conf.properties.template  flume-env.ps1.template  flume-env.sh.template  log4j.properties

使用Flume的关键就是写配置文件,主要是配置三种组件(Source、Channel、Sinks),五部曲:

  • 1、命名当前使用的Agent名称;
  • 2、命名Agent下Source名称;
  • 3、命名Agent下Channel名称;
  • 4、命名Agent下Sink名称;
  • 5、将Source和Sink通过Channel绑定起来。

参考:Agent/source/Channel/Sink配置详解(包括多Agent/n个sink/m个channel等配置)

下方均是 单Agent、单sink、单channel配置

在这里插入图片描述

1.0、【NetCat类型】配置、验证

Flume配合telnet从指定网络端口(23)采集数据输出到控制台。

source类型为 netcat,信息来自本地,抽取到日志。

[root@master conf]# pwd
/usr/local/src/apache-flume-1.6.0-bin/conf

[root@master conf]# vim flume-netcat.conf

内容如下:

# Name the components on this agent 指定Agent的组件名称。a1,可以看做是flume服务的名称,也可以命名为其他。每个flume服务 都由sources、channels、sinks三部分组成。
# sources 数据源头、channels 中间转存的渠道、sinks 数据后面的去向
a1.sources = r1 #定义一个source:r1
a1.sinks = k1 #定义一个sink:k1
a1.channels = c1 #定义一个channel:c1

# 配置Source:指定Flume source(要监听的路径)
a1.sources.r1.type = netcat #a1的r1的类型
a1.sources.r1.bind = master
#a1.sources.r1.bind = 127.0.0.1
#a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444

# 配置sinks:日志形式
a1.sinks.k1.type = logger

# 配置Channel:指定Flume channel
a1.channels.c1.type = memory #a1的channel类型:存在 内存
a1.channels.c1.capacity = 1000 #a1的容量
a1.channels.c1.transactionCapacity = 100 #交互容量

# Bind the source and sink to the channel 绑定source 和sink到channel上
# 将指定source(r1)和channel(c1)绑定;再将sink(k1)和channel(c1)绑定。则-->source(r1)和sink(k1)已联通
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

验证:

终端1-Server:

[root@master bin]# pwd
/usr/local/src/apache-flume-1.6.0-bin/bin
[root@master bin]# ./flume-ng agent --name a1 --conf /usr/local/src/apache-flume-1.6.0-bin/conf --conf-file /usr/local/src/apache-flume-1.6.0-bin/conf/flume-netcat.conf -Dflume.root.logger=INFO,console

最好是输入conf目录、.conf文件的绝对路径!!!
其中,a1是刚才配置的agent名,
...
......
....
2019-05-25 05:37:56,486 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO - org.apache.flume.sink.LoggerSink.process(LoggerSink.java:94)] Event: { headers:{} body: 48 65 6C 6C 6F 20 77 6F 72 6C 64 0D             Hello world. }

也可以写成这种形式,便于理解:而且与当前所在哪个目录无关了

$FLUME_HOME/bin/flume-ng agent \
--name a1 \
--conf $FLUME_HOME/conf \
--conf-file $FLUME_HOME/conf/flume-netcat.conf \
-Dflume.root.logger=INFO,console

上述命令各参数详解:

  • $FLUME_HOME/bin/flume-ng agent 启动flume-ng的agent服务
  • --name a1 指定flume服务名。与-n等价
  • --conf $FLUME_HOME/conf Flume配置文件目录flume-env.sh。与-c等价
  • --conf-file $FLUME_HOME/conf/flume-netcat.conf 编写的配置文件的目录。与-f等价
  • -Dflume.root.logger=INFO,console 在控制台输出日志。指定日志级别和显示方式

然后在终端2-Client:

[root@master ~]# telnet master 44444
Trying 192.168.71.10...
Connected to master.
Escape character is '^]'.
Hello world
OK

输入Hello world,此时,在flume-ng agent的控制台(终端1)可以看到输出了

Event: { headers:{} body: 48 65 6C 6C 6F 20 77 6F 72 6C 64 0D             Hello world. }

其中,

  • Event:是Flume传输数据的基本单元;
  • Event = 可选的header + byte array

1.1、Exec 配置和验证

[root@master conf]# pwd
/usr/local/src/apache-flume-1.6.0-bin/conf
[root@master conf]# vim flume-exec.conf
# Name the components on this agent
a2.sources = r2
a2.sinks = k2
a2.channels = c2

#Describe/configuration the source
a2.sources.r2.type = exec
a2.sources.r2.command = tail -F /usr/local/src/apache-flume-1.6.0-bin/test_flume-exec.log

#Describe the sink
a2.sinks.k2.type = logger

# Use a channel which buffers events in memory
a2.channels.c2.type = memory
a2.channels.c2.capacity = 1000
a2.channels.c2.transactionCapacity = 100


#Bind the source and sink to the channel
a2.sources.r2.channels = c2
a2.sinks.k2.channel = c2

验证:

终端1-Server:

[root@master apache-flume-1.6.0-bin]# pwd
/usr/local/src/apache-flume-1.6.0-bin

[root@master apache-flume-1.6.0-bin]# ./bin/flume-ng agent --name a2 --conf /usr/local/src/apache-flume-1.6.0-bin/conf --conf-file /usr/local/src/apache-flume-1.6.0-bin/conf/flume-exec.conf -Dflume.root.logger=INFO,console

然后在终端2-Client:

[root@master apache-flume-1.6.0-bin]# while true;do echo `date` >> /usr/local/src/apache-flume-1.6.0-bin/test_flume-exec.log;sleep 1;done

[root@master apache-flume-1.6.0-bin]# for i in {1..100};do echo "exec tail$i" >> /usr/local/src/apache-flume-1.6.0-bin/test_flume-exec.log;echo $i;sleep 0.1;done

此时,终端1-Server:可以看到打印

2019-05-27 04:50:05,882 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO - org.apache.flume.sink.LoggerSink.process(LoggerSink.java:94)] Event: { headers:{} body: 4D 6F 6E 20 4D 61 79 20 32 37 20 31 39 3A 35 30 Mon May 27 19:50 }

2019-05-27 04:49:30,763 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO - org.apache.flume.sink.LoggerSink.process(LoggerSink.java:94)] Event: { headers:{} body: 65 78 65 63 20 74 61 69 6C 31                   exec tail1 }

1.2、Avro配置和验证

[root@master conf]# pwd
/usr/local/src/apache-flume-1.6.0-bin/conf
[root@master conf]# vim flume-avro.conf
a3.sources = r3
a3.sinks = k3
a3.channels = c3


a3.sources.r3.type= avro
a3.sources.r3.bind = 0.0.0.0
a3.sources.r3.port = 4141

a3.sinks.k3.type= logger

a3.channels.c3.type= memory
a3.channels.c3.capacity = 1000
a3.channels.c3.transactionCapacity = 100

a3.sources.r3.channels = c3
a3.sinks.k3.channel = c3

终端1-Server:启动flume-ng a3

[root@master apache-flume-1.6.0-bin]# pwd
/usr/local/src/apache-flume-1.6.0-bin
                                        
[root@master apache-flume-1.6.0-bin]# ./bin/flume-ng agent --name a3 --conf /usr/local/src/apache-flume-1.6.0-bin/conf --conf-file /usr/local/src/apache-flume-1.6.0-bin/conf/flume-avro.conf -Dflume.root.logger=INFO,console

然后在终端2-Client:1)创建指定文件;2)使用avro-client发送文件

[root@master apache-flume-1.6.0-bin]# pwd
/usr/local/src/apache-flume-1.6.0-bin
[root@master apache-flume-1.6.0-bin]# echo "hello world" > /usr/local/src/apache-flume-1.6.0-bin/test_flume-avro.log

[root@master apache-flume-1.6.0-bin]# ./bin/flume-ng avro-client --conf /usr/local/src/apache-flume-1.6.0-bin/conf -H master -p 4141 -F /usr/local/src/apache-flume-1.6.0-bin/test_flume-avro.log

此时,终端1-Server:可以看到打印

2019-05-27 05:24:39,373 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO - org.apache.flume.sink.LoggerSink.process(LoggerSink.java:94)] Event: { headers:{} body: 68 65 6C 6C 6F 20 77 6F 72 6C 64                hello world }

flume 1.6 安装及配置 日志采集配置:采集配置文件将采集结果存入hdfs

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值