flume1.8的安装及环境配置

简介FLume

官网:http://flume.apache.org/

    A1.flume 作为 cloudera 开发的分布式、可靠、高可用的海量实时日志聚合系统,支持在系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据的简单处理,并写到各种数据接收方的能力。

    A2.它具有可靠的可靠性机制和许多故障转移和恢复机制,具有强大的容错能力

    A3.它使用简单的可扩展数据模型,允许在线分析应用程序。Flume可以将应用产生的数据存储到任何集中存储器中,比如HDFS,HBase等。

    B1.Flume 支持多种来源,如:

  • “tail”(从本地文件,该文件的管道数据和通过Flume写入 HDFS,类似于Unix命令“tail”)

  • 系统日志

  • Apache log4j (允许Java应用程序通过Flume事件写入到HDFS文件)。

   

    C1.工作结构图:

D1.Flume-ng 核心三大组建
(官网:http://flume.apache.org/)

     Flume-ng只有一个角色的节点:agent的角色,agent由source、channel、sink组成。

    Source:Source用于采集数据,Source是产生数据流的地方,同时Source会将产生的数据流传输到Channel

    Channel:连接 sources 和 sinks ,这个有点像一个队列。

    Sink:从Channel收集数据,将数据写到目标源,可以是下一个Source也可以是HDFS或者HBase。

 

    Event是Flume数据传输的基本单元

    source监控某个文件,将数据拿到,封装在一个event当中,并put/commit到channel当中,channel是一个队列,队列的优点是先进先出,放好后尾部一个个event出来,sink主动去从channel当中去拉数据,sink再把数据写到某个地方,比如HDFS上面去。

学习方向:

一 .安装FLume  

  1.1  对Flume有了解的都知道,Flume是依赖JDK的,如果没有安装JDK的请看我的另一篇随笔:https://www.cnblogs.com/KdeS/p/11526907.html ,简单易懂,

 1.2  切换root权限,装备下载Flume,这里我下载的是1.8的版本的,详细如下:

1 wget http://apache.fayea.com/flume/1.8.0/apache-flume-1.8.0-bin.tar.gz

1.3 解压

1 tar zxvf apache-flume-1.8.0-bin.tar.gz

1.4 为了方便管理,我们在opt目录下新建一个文件文件名字就叫flume,把解压后的Flume放到放到flume目录下,为了方便记录把解压后的'-bin'这一部分去掉,如下:

1 mv apache-flume-1.8.0-bin   /opt/flume/apache-flume-1.8.0

二.环境配置

     2.1 为了运行方便,我们把bin目录加到Path中,如下:

    

1 vim /etc/profile
1 export FLUME_HOME=/opt/flume/apache-flume-1.8.0
2 export PATH=$PATH:$FLUME_HOME/bin

     2.2   source  /etc/profile

     2.3  .  /etc/profile(点的后面有个空格)

     2.4  测试一下是否安装成功:(bin/flume-ng.sh 查看flume的flume-ng命令相关命令)

三.根据官网上的配置运行官网上的一个配置案例:从指定网络端口采集数据输出到控制台

 

 图片中的红框中的内容相当于配置一个Agent(代理)
3.1 创建flume-test.properties

1 cd /opt/flume/apache-flume-1.8.0/conf 
2 
3 touch flume-test.properties 
4 
5 vi  flume-test.properties 

复制官网上的案例进行更改

3.2 进入同级目录下的log4j.properties文件,更改log4j的日志级别,

flume.root.logger=INFO,LOGFILE 更改为flume.root.logger=INFO,console(在控制台输出)

四.安装telnet

1、检查是否安装telnet:

[root@localhost ~]# rpm -qa | grep telnet

若无输出内容,则表示没有安装。

2、进行telnet安装,客户端和服务器端:

yum -y install telnet

yum -y install telnet-server

3、查看是否安装xinetd (若安装则不安装):

rpm -qa | grep xinetd

4、安装xinetd服务:

yum -y install xinetd

5、telnet服务之后,默认是不开启服务,修改文件/etc/xinetd.d/telnet来开启服务:

注:如有则修改,第一次修改,此文件若不存在,可自己vim创建修改:
        修改 disable = yes 为 disable = no

修改后的telnet文件为:

# default: yes

# description: The telnet server servestelnet sessions; it uses 

#      unencrypted username/password pairs for authentication.
service telnet

{
  flags           = REUSE
  socket_type     = stream
  wait            = no
  user            = root
  server          =/usr/sbin/in.telnetd
  log_on_failure  += USERID
  disable         = no
}

6、安装后检查:

rpm -qa | grep telnet

rpm -qa | grep xinetd

7、启动telnet和依赖的xinetd服务:

在centos7之前:$ service xinetd restart 或 $ /etc/rc.d/init.d/xinetd restart

在centos7中(无xinetd的service启动项):service xinetd restart -----> systemctl restart xinetd.service 或 /bin/systemctl restart xinetd.service

8、查看xinetd服务启动:

ps -ef | grep xinetd

10、测试telent,

  在测试前在防火墙中开启对应的端口或者直接选择关闭防火墙,如下远程连接,

 五.测试运行flume-test.properties

bin/flume-ng agent --conf conf --name a1 --conf-file conf/flume-test.properties 

 

如上完成之后使用telnet链接或者使用netcat链接,连接成功后输入信息

telnet 192.168.142.167 44444 

 退出telnet:输入ctrl + ] 然后输入quit

六.根据官网上的配置运行官网上的一个配置案例:监控一个文件实时采集新增的数据输出到控制台

 6.1 创建 flume-apache-file.properties 

#为agent的各个组件命名  
#本例中,agent的名称为"a1"   
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# 描述/配置源
a1.sources.r1.type =exec
a1.sources.r1.command = tail -f /var/log/httpd/access_log 


# type为logger意将数据输出至日志中(也就是打印在屏幕上)  
a1.sinks.k1.type = logger

#channel配置信息  
#type为memory意将数据存储至内存中
a1.channels.c1.type = memory  
a1.channels.c1.capacity = 1000    
a1.channels.c1.transactionCapacity = 100  

#将源和汇绑定到通道
a1.sources.r1.channels = c1 
a1.sinks.k1.channel = c1 
# 与第一个案列不同之处变动在于这两点
a1.sources.r1.type =exec
#tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容 a1.sources.r1.command = tail -f /var/log/httpd/access_log

6.2  如上的配置有一个缺点,flume每次重启后都会重新从头消费,实际项目中我搭建的flume>>kafka>>elasticseach>>kibana,

数据都是百万级的,flume不小心挂了重启的话,重新消费后会在es中有两份重复的数据,所以推荐一下的另一种配置方式

p1_agent.sources = exec-source
p1_agent.channels = memoryChannel
p1_agent.sinks = kafka-sink


# sources define
p1_agent.sources.exec-source.type = TAILDIR
p1_agent.sources.exec-source.positionFile = /var/log/flume/taildir_position.json
p1_agent.sources.exec-source.filegroups = f1
p1_agent.sources.exec-source.filegroups.f1 = /opt/p1upgradebackstage/access_logs/localhost_access_log.*
p1_agent.sources.exec-source.headers.f1.logType = access_log
p1_agent.sources.exec-source.headers.f1.headerKey1 = value1
p1_agent.sources.exec-source.fileHeader = true
p1_agent.sources.exec-source.maxBatchCount = 1000

# sinks define
#p1_agent.sinks.kafka-sink.type = logger
p1_agent.sinks.kafka-sink.type = org.apache.flume.sink.kafka.KafkaSink
p1_agent.sinks.kafka-sink.brokerList = master59:9092,slave145:9092,slave113:9092
p1_agent.sinks.kafka-sink.topic = pd_p1upgradebackstage
p1_agent.sinks.kafka-sink.batchSize = 5
p1_agent.sinks.kafka-sink.requiredAcks = 1

# channels define
p1_agent.channels.memoryChannel.type = memory
p1_agent.channels.memoryChannel.capacity = 100


# bind sources to channels  and sinks to channels
p1_agent.sources.exec-source.channels = memoryChannel
p1_agent.sinks.kafka-sink.channel = memoryChannel                                                                                                                                          

6.3 启动

bin/flume-ng agent --name a1 --conf conf --conf-file flume-apache-file.properties

//后台启动 正式环境一般都是后台启动
nohup bin/flume-ng agent --name a1 --conf conf --conf-file flume-apache-file.properties  &

 

原文地址:https://www.cnblogs.com/KdeS/p/11528829.html