flume 1.4的介绍及使用示例

时间:2022-09-26 18:11:02

flume 1.4的介绍及使用示例

本文将介绍关于flume 1.4的使用示例,如果还没有安装flume的话可以参考:http://blog.csdn.net/zhu_xun/article/details/16958385

在进行使用示例说明之前,先请大家先明确flume中的Source和Sink以及Channel的概念。

flume-ng是flume的新版本的意思,其中“ng”意为new generate(新一代),目前来说,flume 1.4(也就是flume-ng)是最新的版本。

一、flume介绍

flume是个日志收集系统,这个日志收集系统由一个或多个agent(代理)构成,每个agent由三部分构成:Source、Channel、Sink,如下图:

flume 1.4的介绍及使用示例

agent结构图

source为水源,是aent获取数据的入口;
channel为管道,是数据(由resource获得)流动的通道,主要作用是用来传输和存储数据;
sink为水槽,用来接收channel传入的数据并将数据输出到指定地方。
大家可以把agent看作一个水管,source就是水管的入口,sink就是水管的出口,把数据当作水来看,数据流也就意味着水流。数据由source获得流经channel,最后传给sink。下图演示了一个完整的agent流程,由webserver获取数据,数据经channel流向sink,最后由sink将数据存储在hdfs里面。

flume 1.4的介绍及使用示例
上面说到了一个flume系统可以由一个或多个agent组成,多个agent只要做一些简单的配置就可以串在一起,比如将两个agent(foo、bar)串在一起工作,只要将bar的source(入口)接在foo的sink(出口)上就可以了。如下图:
flume 1.4的介绍及使用示例
再看看下图,下图是将4个agent串在一起,agent1、agent2和agent3都是获取web服务器的数据,然后将各自获得到的数据统一地发送给agent4,最后由agent4将收集到的数据存储在hdfs里面。怎么样,agent的使用是不是很灵活,扩展性也很高,就行拼图一样,想怎么拼就怎么拼。
flume 1.4的介绍及使用示例
其实在1个agent里面,对source、channel、sink的个数是无限制的,可以有多个,只要他们能够正确匹配就行。请看下图,这个例子中source获取到的数据被分发给了3个channel,其中sink1将数据输出到hdfs里面,sink2将数据作为jms输出。
flume 1.4的介绍及使用示例


agent本质上是一个jvm进程,agent各组件间的工作是通过event事件来触发和协调的。使用agent时候,我们需要在agent的配置文件中设置好配置信息,source、channel、sink都有各自不同的配置选项。

二、flume使用示例

1.通过avro-client客户端向agent发送数据,并打印在屏幕上(也就是输出至日志中):

注意:

a.本文中,以$FLUME代表flume的安装目录。

b.本文中的每个使用示例的配置文件名称皆为:source_sourceType-sink_sinkType.properties。

其中,sourceType表示source的类型,sinkType表示sink的类型。

比如,配置文件source_avro-sink_filerole.properties表示此例中的source类型为avro,sink的类型为filerole,即接收avro客户端传来的数据并将数据输出值本地文件。

c.本文中的channel的类型默认为memory,意为将数据存储至内存。

(1).在$FLUME目录下新建目录test,并在test目录下新建文件source_avro-sink_logger.properties,文件内容如下:

[java] 
view plain
copy
flume 1.4的介绍及使用示例
flume 1.4的介绍及使用示例
 
  1. <span style="font-family:Tahoma;font-size:14px;">#为agent的各个组件命名
  2. #本例中,agent的名称为"a1"
  3. a1.sources = r1
  4. a1.sinks = k1
  5. a1.channels = c1
  6. #source配置信息
  7. #r1的type为avro表示该source接收的数据协议为avro,且接收数据由avro客户端事件驱动
  8. #(也就是说resource要通过avro-cliet向其发送数据)
  9. a1.sources.r1.type = avro
  10. a1.sources.r1.bind = localhost
  11. a1.sources.r1.port = 44444
  12. #sink配置信息
  13. # type为logger意将数据输出至日志中(也就是打印在屏幕上)
  14. a1.sinks.k1.type = logger
  15. #channel配置信息
  16. #type为memory意将数据存储至内存中
  17. a1.channels.c1.type = memory
  18. a1.channels.c1.capacity = 1000
  19. a1.channels.c1.transactionCapacity = 100
  20. #将source和sink绑定至该channel上
  21. a1.sources.r1.channels = c1
  22. a1.sinks.k1.channel = c1</span>

(2).生成测试源数据:

新建文件file01.txt,并向其中写入如下数据;

hello world 1
hello world 2
hello world 3
hello world 4
hello world 5
hello world 6
hello world 7
hello world 8
hello world 9
hello world 10
(3)启动agent代理:

flume-ng agent -n a1 -f source_avro-sink_logger.properties

(4). 启动avro-client客户端向agent代理发送数据:

flume-ng avro-client -H localhost -p 44444 -F file01

注:启动avro-client客户端要重新开一个会话框

(5).这是可以看到aent的输出信息:

flume 1.4的介绍及使用示例

2.通过avro-client客户端向agent发送数据,并将数据输出至本地文件中:

(1).在$FLUME目录下新建目录test,并在test目录下新建文件source_avro-sink_filerole.properties,文件内容如下:

[java] 
view plain
copy
flume 1.4的介绍及使用示例
flume 1.4的介绍及使用示例
 
  1. <span style="font-family:Tahoma;font-size:14px;">#为agent的各个组件命名
  2. #本例中,agent的名称为"a1"
  3. a1.sources = r1
  4. a1.sinks = k1
  5. a1.channels = c1
  6. #source配置信息
  7. #r1的type为avro表示该source接收的数据协议为avro,且接收数据由avro客户端事件驱动
  8. #(也就是说resource要通过avro-cliet向其发送数据)
  9. a1.sources.r1.type = avroa1.sources.r1.bind = localhosta1.sources.r1.port = 44444
  10. #sink配置信息
  11. #"file_roll"表示将数据存入本地文件系统
  12. a1.sinks.k1.type = file_roll
  13. #指定数据存放目录
  14. a1.sinks.k1.sink.directory = $FLUME/test/result
  15. #设置滚动时间(即每隔一段你设置的时间,系统会生成一个新的文件存放数据
  16. #(如果不指定,系统会默认生成N个文件,将数据分别存入N个文件中),
  17. #为0时表示只有一个文件存放数据)
  18. a1.sinks.k1.sink.rollInterval = 0
  19. #channel配置信息
  20. #type为memory意将数据存储至内存中
  21. a1.channels.c1.type = memory
  22. a1.channels.c1.capacity = 1000
  23. a1.channels.c1.transactionCapacity = 100
  24. #将source和sink绑定至该channel上
  25. a1.sources.r1.channels= c1
  26. a1.sinks.k1.channel = c1</span>

同时在$FLUME/test下新建目录result,用来存放agent写入的数据。
(2).生成测试源数据:
同上
(3)启动agent代理:
flume-ng agent -n a1 -f source_avro-sink_filerole.properties
(4). 启动avro-client客户端向agent代理发送数据:
flume-ng avro-client -H localhost -p 44444 -F file01
注:启动avro-client客户端要重新开一个会话框
(5)进入$FLUME/test/result目录:
  这是可以看到新生成的文件"1386378213670-1",这是打开文件看到内容如下:

flume 1.4的介绍及使用示例

3.通过avro-client客户端向agent发送数据,并将数据输出至hdfs中:
(1).在$FLUME目录下新建目录test,并在test目录下新建文件source_avro-sink_hdfs.properties,文件内容如下:

[java] 
view plain
copy
flume 1.4的介绍及使用示例
flume 1.4的介绍及使用示例
 
  1. <span style="font-family:Tahoma;font-size:14px;">#为agent的各个组件命名
  2. #本例中,agent的名称为"a1"
  3. a1.sources = r1
  4. a1.sinks = k1
  5. a1.channels = c1
  6. #source配置信息
  7. #r1的type为avro表示该source接收的数据协议为avro,且接收数据由avro客户端事件驱动
  8. #(也就是说resource要通过avro-cliet向其发送数据)
  9. a1.sources.r1.type = avro
  10. a1.sources.r1.bind = localhost
  11. a1.sources.r1.port = 44444
  12. #加入时间戳拦截器,要不运行时会报异常
  13. a1.sources.r1.interceptors = i1
  14. a1.sources.r1.interceptors.i1.type = timestamp
  15. #sink配置信息
  16. #type为"hdfs"表示将数据存入分布式文件系统(hdfs)
  17. a1.sinks.k1.type = hdfs
  18. a1.sinks.k1.channel = c1
  19. a1.sinks.k1.hdfs.path = /flume/events/%y-%m-%d/%H%M/%S
  20. a1.sinks.k1.hdfs.filePrefix = events-
  21. #a1.sinks.k1.hdfs.round = true
  22. #a1.sinks.k1.hdfs.roundValue = 0
  23. #a1.sinks.k1.hdfs.roundUnit = minute
  24. #a1.sinks.k1.hdfs.srollSize = 4000000
  25. #a1.sinks.k1.hdfs.rollCount = 0
  26. a1.sinks.k1.hdfs.writeFormat = Text
  27. a1.sinks.k1.hdfs.fileType = DataStream
  28. #a1.sinks.k1.hdfs.batchSize = 10
  29. #channel配置信息
  30. #type为memory意将数据存储至内存中
  31. a1.channels.c1.type = memory
  32. a1.channels.c1.capacity = 1000
  33. a1.channels.c1.transactionCapacity = 100
  34. #将source和sink绑定至该channel上
  35. a1.sources.r1.channels = c1
  36. a1.sinks.k1.channel = c1</span>

(2).生成测试源数据:
同上
(3).启动hadoop环境
启动hadoop:start-all.sh
删除output目录:hadoop fs -rmr output
为了防止hadoop的安全性问题,可以把hadoop的安全模式关闭掉:hadoop dfsadmin -safemode leave
(4)启动agent代理:
flume-ng agent -n a1 -f source_avro-sink_hdfs.properties
(5). 启动avro-client客户端向agent代理发送数据:
flume-ng avro-client -H localhost -p 44444 -F file01
注:启动avro-client客户端要重新开一个会话框
(6)进入hadoop的output目录:
hadoop fs -cat /flume/events/13-12-07/1220/58/events-.1386390061690
可以看到输出如下:

flume 1.4的介绍及使用示例

注:在进入hdfs目录下查看文件时,agent在hdfs里创建的目录和文件名和我上面输入的会不一样,自己注意辨别。
4.将两个agent串起来:
这个示例是将agent01和agent02串起来工作的,agent01获取数据后向agent02输入。
(1).在$FLUME目录下新建目录test,并在test目录下新建文件agent01.properties和agent02.properties,文件内容如下:
 agent01.properties内容如下:

[java] 
view plain
copy
flume 1.4的介绍及使用示例
flume 1.4的介绍及使用示例
 
  1. <span style="font-family:Tahoma;font-size:14px;">#为agent的各个组件命名
  2. #本例中,agent的名称为"a1"
  3. a1.sources = r1
  4. a1.sinks = k1
  5. a1.channels = c1
  6. #source配置信息
  7. #r1的type为avro表示该source接收的数据协议为avro,且接收数据由avro客户端事件驱动
  8. #(也就是说resource要通过avro-cliet向其发送数据)
  9. a1.sources.r1.type = avro
  10. a1.sources.r1.bind = localhost
  11. a1.sources.r1.port = 44444
  12. # Describe the sink
  13. #a1.sinks.k1.type = logger
  14. #sink配置信息
  15. #k1的type为avro表示该sink将通过avro-client客户端以avro协议通过5555端口发送数据
  16. a1.sinks.k1.type = avro
  17. a1.sinks.k1.hostname = localhost
  18. a1.sinks.k1.port = 55555
  19. #channel配置信息
  20. #type为memory意将数据存储至内存中
  21. a1.channels.c1.type = memory
  22. a1.channels.c1.capacity = 1000
  23. a1.channels.c1.transactionCapacity = 100
  24. #将source和sink绑定至该channel上
  25. a1.sources.r1.channels = c1
  26. a1.sinks.k1.channel = c1</span>

agent02.properties内容如下:

[java] 
view plain
copy
flume 1.4的介绍及使用示例
flume 1.4的介绍及使用示例
 
  1. <span style="font-family:Tahoma;font-size:14px;">#为agent的各个组件命名
  2. #本例中,agent的名称为"a2"
  3. a2.sources = r1
  4. a2.sinks = k1
  5. a2.channels = c1
  6. #source配置信息
  7. #r1的type为avro表示该source接收的数据协议为avro,且接收数据由avro客户端事件驱动
  8. #(也就是说resource要通过avro-cliet向其发送数据)
  9. a1.sources.r1.type = avro
  10. a1.sources.r1.bind = localhost
  11. a1.sources.r1.port = 55555
  12. #sink配置信息
  13. #type为"file_roll"表示将数据存入本地文件系统
  14. a1.sinks.k1.type = file_roll
  15. #指定数据存放目录
  16. a1.sinks.k1.sink.directory = $FLUME/test/log
  17. #设置滚动时间(即每隔一段你设置的时间,系统会生成一个新的文件存放数据
  18. #(如果不指定,系统会默认生成N个文件,将数据分别存入N个文件中),
  19. #为0时表示只有一个文件存放数据)
  20. #a2.sinks.k1.sink.rollInterval = 0
  21. #channel配置信息
  22. #type为memory意将数据存储至内存中
  23. a1.channels.c1.type = memory
  24. a1.channels.c1.capacity = 1000
  25. a1.channels.c1.transactionCapacity = 100
  26. #将source和sink绑定至该channel上
  27. a1.sources.r1.channels = c1
  28. a1.sinks.k1.channel = c1</span>

(2).生成测试源数据:
同上
(3).启动agent代理:
  先启动agent02:flume-ng agent -n a2 -f agent02.properties 
  再启动agent01:flume-ng agent -n a1 -f agent01.properties 
注意:要注意启动顺序,先启动agent02,在启动agent01,要分别在不同的窗口启动
(4). 启动avro-client客户端向agent01代理发送数据:
flume-ng avro-client -H localhost -p 44444 -F file01
注:启动avro-client客户端要重新开一个会话框
(5)进入$FLUME/test/result目录:
  这是可以看到新生成的文件"1386378213670-1",这是打开文件看到内容如下:

flume 1.4的介绍及使用示例

未完待续。。。。。。

关于flume-ng的详细介绍和使用说明,希望大家去参考它的官方网址:http://flume.apache.org/FlumeUserGuide.html,在这里我只是做一下简单的使用示例介绍。

flume 1.4的介绍及使用示例的更多相关文章

  1. flume安装及配置介绍&lpar;二&rpar;

    注: 环境: skylin-linux Flume的下载方式: wget http://www.apache.org/dyn/closer.lua/flume/1.6.0/apache-flume-1 ...

  2. 基于&period;NET CORE微服务框架 -surging的介绍和简单示例 (开源)

    一.前言 至今为止编程开发已经11个年头,从 VB6.0,ASP时代到ASP.NET再到MVC, 从中见证了.NET技术发展,从无畏无知的懵懂少年,到现在的中年大叔,从中的酸甜苦辣也只有本人自知.随着 ...

  3. 【python】-- 协程介绍及基本示例、协程遇到IO操作自动切换、协程(gevent)并发爬网页

    协程介绍及基本示例 协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是协程:协程是一种用户态的轻量级线程. 协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和栈保存到其他 ...

  4. asp&period;net core系列 39 Razor 介绍与详细示例

    原文:asp.net core系列 39 Razor 介绍与详细示例 一. Razor介绍 在使用ASP.NET Core Web开发时, ASP.NET Core MVC 提供了一个新特性Razor ...

  5. 关于 AutoResetEvent 的介绍的简单示例

    关于 AutoResetEvent 的介绍的简单示例 直接贴代码了: class Program { static void Main(string[] args) { string result = ...

  6. 四种生成和解析XML文档的方法详解(介绍&plus;优缺点比较&plus;示例)

    众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml- ...

  7. 分布式日志收集系统Apache Flume的设计详细介绍

    问题导读: 1.Flume传输的数据的基本单位是是什么? 2.Event是什么,流向是怎么样的? 3.Source:完成对日志数据的收集,分成什么打入Channel中? 4.Channel的作用是什么 ...

  8. DOM4J介绍与代码示例

    DOM4J是dom4j.org出品的一个开源XML解析包.Dom4j是一个易用的.开源的库,用于XML,XPath和XSLT.它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JA ...

  9. asp&period;net core系列 40 Web 应用MVC 介绍与详细示例

    一. MVC介绍 MVC架构模式有助于实现关注点分离.视图和控制器均依赖于模型. 但是,模型既不依赖于视图,也不依赖于控制器. 这是分离的一个关键优势. 这种分离允许模型独立于可视化展示进行构建和测试 ...

随机推荐

  1. ruby 访问新浪微博API post方式和get方式

    require 'net/https' require 'uri' def post_api(api, args) uri = URI.parse api http = Net::HTTP.new(u ...

  2. &lbrack;转&rsqb;CSS Display&lpar;显示&rpar; 与 Visibility(可见性)

    CSS Display(显示) 与 Visibility(可见性) display属性设置一个元素应如何显示,visibility属性指定一个元素应可见还是隐藏. 隐藏元素 - display:non ...

  3. JavaWeb之response响应中文乱码问题

    response向页面响应中文乱码问题  字节流 * 有可能乱码,与中文转换成字节数组.浏览器打开的默认字符编码有关 * 解决方式:将中文转成字节数组的时候和浏览器默认打开的时候采用的字符集一致 re ...

  4. Linux中KVM桥接的配置

    Linux中KVM桥接的配置 1. 原理 1.1 说明 在安装一个拥有虚拟化功能的Linux操作系统(此处以CentOS为例),一般我们有两种方法: .在光盘安装的时候安装好虚拟化包或者PXE服务器上 ...

  5. Mysql中Join用法及优化

    Join的几种类型 笛卡尔积(交叉连接) 如果A表有n条记录,B表有m条记录,笛卡尔积产生的结果就会产生n*m条记录.在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者直接用f ...

  6. 用NBU无法还原数据库到ASM磁盘

    描述:用NBU无法还原数据库到ASM磁盘,却可以还原到数据库本地磁盘 错误提示: ORA-15025: could not open disk "/dev/mapper/DATA1&quot ...

  7. Photoshop和Halcon中的极坐标变换

    极坐标想必学过高中数学的人都听过,一般的坐标系中用(x, y)值来描述一个点的位置,而在极坐标系中,则使用到原点的距离ρ和夹角θ来描述该点的位置. 我很早就接触了Photoshop,知道Photosh ...

  8. Hadoop学习之路(十六)Hadoop命令hadoop fs -ls详解

    http://blog.csdn.net/strongyoung88/article/details/68952248

  9. QQ的全国地址编码

    D:\Program Files (x86)\Tencent\QQ\I18N\2052\LocList.xml

  10. python3发送邮件01(简单例子,不带附件)

    # -*- coding:utf-8 -*-import smtplibfrom email.header import Headerfrom email.mime.text import MIMET ...