flume的介绍以及配置

关于Flume的介绍

Flume 是一个日志收集系统 :

        Flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。是HADOOP生态圈的一个组件,主要应用与实时数据的流方式,比如一旦有某事件触发可以将实时的日志数据发向HADOOP文件系统HDFS中,

   Flume可以将数量庞大的数据从各项数据资源集中起来存储的工具/服务,或数集中机制,所以它还有较强的缓冲作用,

   Flume具有较高的容错性.例如当收集数据的速度超过将写入数据的时候,Flume会在数据生产者和数据收容器间作出调整,保证其能够在俩者直接提供可推送的平稳数据,

   Flume支持多路径流量,多管道接入流量.例如Flume的数据发出源及目的地可以是不同类别的比如社交媒体,HBASE HDFS ,Kafka,Spark Stream,甚至是其他的Flume.

   Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力 。Flume提供了从console(控制台)、RPC(Thrift-RPC)、text(文件)、tail(UNIX tail)、syslog(syslog日志系统),支持TCP和UDP等2种模式),exec(命令执行)等数据源上收集数据的能力。


flume的一些核心概念:

Agent代理使用JVM 运行Flume。每台机器运行一个agent,但是可以在一个agent中包含多个sources和sinks。
Client客户端生产数据,运行在一个独立的线程。
Source源从Client收集数据,传递给Channel。
Sink接收器从Channel收集数据,进行相关操作,运行在一个独立线程。
Channel通道连接 sources 和 sinks ,这个有点像一个队列。
Events事件传输的基本数据负载。

Flume的外部架构:


Flume的内部架构:

            Flume以agent为最小的独立运行单位。一个agent就是一个JVM。单agent由Source、Sink和Channel三大组件构成,如下图:


解释source,channel,sink:

  Agent主要由:三个组件组成.
    1. Source:        (它用来监控文件,监控目录,监控网络)
     从数据发生器接收数据,并将接收的数据以Flume的event格式传递给一个或者多个通道channal,Flume提供多种数据接收的方式,比如Avro,Thrift,twitter等
    2. Channel:
     channel是一种短暂的存储容器,它将从source处接收到的event格式的数据缓存起来,直到它们被sinks消费掉,它在source和sink间起着一共桥梁的作用,channal是一个完整的事务,这一点保证了数据在收发的时候的一致性. 并且它可以和任意数量的source和sink链接. 支持的类型有: JDBC channel , File System channel , Memort channel等.
    3. sink:
     sink将数据存储到集中存储器比如Hbase和HDFS,它从channals消费数据(events)并将其传递给目标地. 目标地可能是另一个sink,也可能HDFS,HBase.
Flume事件(EVENT):
    1. EVENT事件是flume传输数据流的基本单位
    2. 数据推送过程中flume事件(event)从source,流向channel,再到sink
    3. EVENT事件是由一个推送的字节数组(该数据组是从数据源接入点传入,并传输给sink设置的目的,比如HDFS).它是由event headers(头信息,) eventbody, event信息(flume收集到日记记录)组成

Flume的配置:

监控网络

1. 准备flume文件,并导入到linux里面,直接解压
2. 进入conf文件夹创建一个.conf文件,这个文件就是一个Agent,比如:
touch a1.conf

2. 编辑这个文件文件,在文件内写入

    这里是source监听一个指定的网络端口,只要应用程序向这个窗口里面写数据,这个source组件就可以获取信息然后写入到channle,sink从channle 里获取信息,完成后日志数据将被推送到控制台

# 定义agent的source,channel,sink的名字
# a1     就是我们当前文件的名字 即为 Agent的名字
# sr1    就是source的名字
# ch1    就是channel的名字
# log1   就是sink的名字

a1.sources = sr1
a1.channels = ch1
a1.sinks = log1

# 设置source的参数
a1.sources.sr1.type = netcat  # 监听的类型, netcat 为监听网络
a1.sources.sr1.bind = zhang   # 绑定ip 此时的zhang为一个静态ip 原为: 192.168.50.88
a1.sources.sr1.port = 44444   # 端口为 44444

# 设置channel(管道)的参数
a1.channels.ch1.type = memory # channel的存放位置, 此时存放在memory(内存中)

# 设置sink的参数
a1.sinks.log1.type = logger   # sink的传输类型, 这里传数据到logger

# 把source 和 sink 通过 channel 连接在一起
a1.sources.sr1.channels = ch1
a1.sinks.log1.channel = ch1


3. 启动flume

    进入flume的bin目录代码 :

    ./flume-ng agent -c conf -f Agent的文件路径 -n 给它一个名字 -Dflume.root.logger=INFO,console
    ./flume-ng agent -c ./conf -f /home/hadoop/opt/apache-flume-1.8.0-bin/conf/a1.conf -n a1 -Dflume.root.logger=INFO,console

4. 测试

        新建一个window窗口输入命令

telnet zhang 44444
        当 window 和你监听的网络建立连接后,你就可以在window发送消息,当你返回你的flume就会看到有提示消息


监控文件

1. 在conf文件夹里面创建一个.conf文件和.text文件,比如:

touch b1.conf
touch b1.text
2. 编辑该文件
# 定义agent的source,channel,sink
b2.sources = sr1
b2.channels = ch1
b2.sinks = log1

# 设置source的参数
b2.sources.sr1.type = exec    # 监控类型为文件
b2.sources.sr1.command = tail -f /home/hadoop/opt/apache-flume-1.8.0-bin/bin/a2.text # 监控文件地址

# 设置channel(管道)的参数
b2.channels.ch1.type = memory
# 不设置是因为有默认设置

# 设置sink的参数
b2.sinks.log1.type = logger
# 同上

# 把source 和 sink 通过 channel 连接在一起
b2.sources.sr1.channels = ch1
b2.sinks.log1.channel = ch1

3.  启动flume

        在bin目录下

 ./flume-ng agent -c ./conf -f /home/hadoop/opt/apache-flume-1.8.0-bin/conf/b1.text -n b1 -Dflume.root.logger=INFO,console

4. 测试(新建一个linux窗口)

echo aaaa >> /home/hadoop/opt/apache-flume-1.8.0-bin/conf/b1.text

   此时我通过重定向往测试的文件 b1.text 里输入内容,当然你也可以直接编辑这个文件

   做完上面几步后返回flume的窗口,你会看到新的提示

监控文件夹

步骤跟上面的一样,代码如下:

# 定义agent的source,channel,sink
b2.sources = sr1
b2.channels = ch1
b2.sinks = log1

# 设置source的参数
b2.sources.sr1.type = spooldir    # 监控类型为文件夹
b2.sources.sr1.spoolDir= /home/hadoop/opt # 监控的文件夹

# 设置channel(管道)的参数
b2.channels.ch1.type = memory
# 不设置是因为有默认设置

# 设置sink的参数
b2.sinks.log1.type = logger
# 同上

# 把source 和 sink 通过 channel 连接在一起
b2.sources.sr1.channels = ch1
b2.sinks.log1.channel = ch1
测试的方法同上!


上面三个例子的最后sink存储在logger,现在我们试着将它存储在给hdfs

代码只需要将上面的sink的参数进行修改

b1.sinks.log1.type = hdfs                                # 存储的类型
b1.sinks.log1.hdfs.path = /user/hadoop/event/%y-%m-%d/%H%M/%S # 存储的路径,后面正则为时间
b1.sinks.log1.hdfs.filePrefix = events-                  # 文件的前缀
b1.sinks.log1.hdfs.round = true                          # 对时间的处理
b1.sinks.log1.hdfs.roundValue = 10                       # 时间的值
b1.sinks.log1.hdfs.roundUnit = minute                    # 时间的单位
b1.sinks.log1.hdfs.useLocalTimeStamp = true                   # 获取本地时间
b1.sinks.log1.hdfs.fileType = DatasTream                   # 文件编码类型

存储的路径可以是本机的也可以是集群里面的,如果在另一个机子路径则输入:

b1.sinks.log1.hdfs.path = hdfs://python2:9000/user/hadoop/event/%y-%m-%d/%H%M/%S

例如:

    这是一个监控文件夹的,但存储的路径为hdfs:



启动:

./bin/flume-ng agent -c conf -f conf/b1.conf -n bl 
./bin/flume-ng agent -c conf -f conf/b1.conf -n bl -Dflume.root.logger=info,console

俩种方式都可以使用,第二种的会在控制台进行输出

测试:

    首先启动hadoop,查看是否存在event文件夹


    往被监控的那个文件夹发送移动一个文件,之后继续查看是否存在event

    存在的话通过cat 查看里面的文件:





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值