linux 系统 flume 的安装与使用

linux系统flume的安装和使用

数据采集是大数据分析全流程中的重要环节,典型的数据采集工具包括ETL工具、日志采集工具(如Flume和Kafla)、数据迁移工具(如Sqoop)等。
本次选择了具有代表性的数据采集工具进行介绍,即日志采集工具Flume。详细介绍了这个工具的安装和使用方法,同时给出了实例。

Fllume又叫做日志收集系统,是一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume 支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。

安装Flume

下载安装Flume

登录Linux系统,通过Linux系统中的火狐浏览器,访问网址: https://www.apache.org/dyn/closer.lua/flume/1.7.0/apache-flume-1.7.0-bin.tar.gz,下载Flume安装文件。火狐浏览器会默认将下载文件保存在当前用户的下载目录。这里的文件位置是:“/home/hadoop/下载”

下载完安装文件后,需要对文件进行解压。将位于用户下载文件夹下的apache-flume-1.7.0-bin.tar.gz压缩包解压到/usr/local目录下,并改名为flume:

cd ~
sudo tar -zxvf ./下载/apache-flume-1.7.0-bin.tar.gz -C /usr/local
cd /usr/local
sudo mv ./apache-flume-1.7.0-bin ./flume

配置相关文件

配置环境变量

通过vim 打开环境变量的文件:

sudo vim ~/.bashrc

在文件顶部添加下列代码,配置环境变量:

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64;
export FLUME_HOME=/usr/local/flume
export FLUME_CONF_DIR=$FLUME_HOME/conf
export PATH=$PATH:$FLUME_HOME/bin

输入source ~/.bashrc使环境变量生效,由此完成了环境变量的配置。

配置文件

进入/usr/local/flume目录通过管理员权限将flume-env.sh.template改名为flume-env.sh,并打开编辑:

cd /usr/local/flume
sudo mv flume-env.sh.template flume-env.sh
sudo vim flume-env.sh

会发现出现如图1的错误:
flume-env.sh修改错误

通过ls查看flume内各个文件夹发现flume-env.sh.template实际上存在于conf文件夹中,进入该文件夹:

cd /usr/local/flume/conf
sudo mv flume-env.sh.template flume-env.sh
sudo vim flume-env.sh

在flume-env.sh开头输入下列代码:

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64;

至此完成了flume的文件配置。

启动FLame

进入/usr/local/flume目录启动flume:

cd /usr/local/flume
./bin/flume-ng version

若在flume安装之前安装过HBase,则会出现无法加载主类的问题,我们可以通过修改hbase-evn.sh 文件来解决这个错误,使用sudo vim 打开hbase-evn.sh:

cd /usr/local/hbase/conf
sudo vim hbase-env.sh

找到下列内容并使用#将该行注释:

export HBASE_CLASSPATH=/home/hadoop/hbase/conf

修改效果应如图2所示:
修改hbase-evn.sh

保存退出hbase-evn.sh文件,回到/usr/local/flume目录,再通过./bin/flume-ng version启动flume。

实例

使用Flume接收来自AvroSource的信息

AvroSource可以发送一个指定的文件给Flume日志控制台,Flume接收后可以将文件内容显示到屏幕上。

(1)创建Agent配置文件:

进入/usr/local/hbase/conf目录,使用管理员模式创建一个新文件avro.conf:

cd /usr/local/flume/conf
sudo vim avro.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 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

注意有中文注释那一行,在后续操作中会出现关于该行的错误,为避免出现不可测问题,将a1.sources.r1.port = 4141行后面的注释内容进行删除,#与4141之间的空格也应该删除,具体效果如图3:

avro.conf内容

(2)启动Flume Agent a1:

启动日志控制台:

/usr/local/flume/bin/flume-ng agent -c . -f /usr/local/flume/conf/avro.conf -n a1 -Dflume.root.logger=INFO,console

可能会出现启动失败,也可通过下列代码进行启动:

flume-ng agent --conf /usr/local/flume/conf --conf-file /usr/local/flume/conf/avro.conf --name a1 -Dflume.root.logger=INFO,console

本实验使用第一条启动代码,应显示“Avro source r1 started”,启动后效果如图4所示:

案例1启动日志控制台

启动之后sheel不会弹出新的命令行,这时不是死机了,这代表启动成功,所以需要新打开一个终端。

(3)创建指定文件:

另外打开一个终端,并打开/usr/local/flume目录,在此目录下创建log.00文件并加入一行内容“hello world”:

cd /usr/local/flume
sudo sh -c 'echo "hello world" > /usr/local/flume/log.00'

接着打开创建一个test.txt文件

sudo vim test.txt

并添加如下三行内容并保存,如图5:

hello wyz
你好
nice to meet you

创建test.txt

(4)使用AvroSource发送文件:

再打开第三个Linux终端:

发送log.00文件:

cd /usr/local/flume
./bin/flume-ng avro-client --conf conf -H localhost -p 4141 -F /usr/local/flume/log.00

此时在AvroSource终端上可能会报告./logs/flume.log (没有那个文件或目录),但不影响控制台接受内容,若要消除此警告需要在代码前天加管理员权限‘sudo’再运行,代码如下:

cd /usr/local/flume
sudo ./bin/flume-ng avro-client --conf conf -H localhost -p 4141 -F /usr/local/flume/log.00

回到日志控制台查看接收的内容,如图6:

查看接收的log.00内容

可以看到‘hello world’显示在了屏幕上,说明log.00文件发送成功。

回到第三个终端,发送test.txt文件:

cd /usr/local/flume
./bin/flume-ng avro-client --conf conf -H localhost -p 4141 -F /usr/local/flume/test.txt

再回到日志控制台查看接收的内容,如图7:

查看接收的test.txt内容

发现屏幕上显示了三行内容,说明test.txt文件发送成功,仔细对比文件内容后发现中文被…替换,能体现出Flume只能传递英文和字符,不能传递中文。

使用Flume接收来自NetcatSource的信息

(1)创建Agent配置文件:

进入/usr/local/hbase/conf目录,使用管理员模式创建一个新文件avro.conf:

cd /usr/local/flume
sudo vim ./conf/example.conf

在example.conf文件内写入以下内容:

#example.conf: A single-node Flume configuration
# 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

像之前的avro.conf文件一样,为避免出现不可测问题,将a1.sources.r1.port = 44444行后面的空格与注释内容进行删除,具体效果如图8:

example.conf内容
(2)启动Flume Agent a1:

通过课本上的代码,启动日志控制台:

/usr/local/flume/bin/flume-ng agent --conf ./conf --conf-file ./example.conf --name a1 -Dflume.root.logger=INFO,console

出现了不可预知的错误,于是通过网络查询,修改启动代码如下。

cd /usr/local/flume
flume-ng agent --conf /usr/local/flume/conf --conf-file /usr/local/flume/conf/example.conf --name a1 -Dflume.root.logger=INFO,console

启动效果如下图9:

案例2启动日志控制台

(3)再启动一个Linux终端:

将这个终端称为NetcatSource终端,输入如下命令,端口为上文example.conf内的端口号:

telnet localhost 44444

显示如下内容,如图10:

端口

在这个端口中输入任何字符,Flume日志控制台也会同步显示输入的内容,在这个端口输入“hello wyz”,会显示ok,如图11:

输入内容

同时在日志控制台会同时收到内容并显示,如图12:

日志控制台显示

在NetcatSource终端尝试输入中文内容,如图23:

输入中文

显示“外部主机关闭连接”,由此又可显示出Flume日志控制台并不包含传递中文的功能。

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值