Chinaunix首页 | 论坛 | 博客
  • 博客访问: 829878
  • 博文数量: 247
  • 博客积分: 166
  • 博客等级: 入伍新兵
  • 技术积分: 2199
  • 用 户 组: 普通用户
  • 注册时间: 2012-11-15 16:10
文章分类

全部博文(247)

文章存档

2017年(1)

2015年(63)

2014年(80)

2013年(94)

2012年(9)

分类: 大数据

2014-10-31 22:19:54

概述:

1.flume是什么?
这里简单介绍一下,它是Cloudera的一个产品。是分布式的日志收集系统,把收集来的数据传送到目的地去。其设计理念非常易用,简洁。并且是一个项目,基于Java语言开发,可以进行一些自定义的功能开发。运行Flume时,机器必须安装装JDK6.0以上的版本,并且,Flume目前只有Linux系统的启动脚本,没有Windows环境的启动脚本。  
2.flume是干什么的?
收集日志的
3.flume如何搜集日志?
我们把flume比作情报人员
(1)搜集信息
(2)获取记忆信息
(3)传递报告间谍信息
flume是怎么完成上面三件事情的,三个组件:
source: 搜集信息
channel:传递信息
sink:存储信息

 详解 :

      flume里面有个核心概念,叫做agent。agent是一个java进程,运行在日志收集节点。

       agent里面包含3个核心组件:source、channel、sink。
       source组件是专用于收集日志的,可以处理各种类型各种格式的日志数据,包括avro、thrift、exec(命令行)、jms、spooling directory(文件系统)、netcat(网络)、sequence generator、syslog、http、legacy、自定义。source组件把数据收集来以后,临时存放在channel中。
        channel组件是在agent中专用于临时存储数据的,可以存放在memory、jdbc、file、自定义。channel中的数据只有在sink发送成功之后才会被删除。
        sink组件是用于把数据发送到目的地的组件,目的地包括hdfs、logger、avro、thrift、ipc、file、null、hbase、solr、自定义。
        在整个数据传输过程中,流动的是event。事务保证是在event级别。
        flume可以支持多级flume的agent,支持扇入(fan-in)、扇出(fan-out)。


        flume的核心是把数据从数据源收集过来,再送到目的地。为了保证输送一定成功,在送到目的地之前,会先缓存数据,待数据真正到达目的地后,删除自己缓存的数据。flume传输的数据的基本单位是event,如果是文本文件,通常是一行记录,这也是事务的基本单位。flume运行的核心是agent。它是一个完整的数据收集工具,含有三个核心组件,分别是source、channel、sink。通过这些组件,event可以从一个地方流向另一个地方,如下图所示。



       source可以接收外部源发送过来的数据。不同的source,可以接受不同的数据格式。比如有目录池(spooling directory)数据源,可以监控指定文件夹中的新文件变化,如果目录中有文件产生,就会立刻读取其内容。

       channel是一个存储地,接收source的输出,直到有sink消费掉channel中的数据。channel中的数据直到进入到下一个channel中或者进入终端才会被删除。当sink写入失败后,可以自动重启,不会造成数据丢失,因此很可靠。

        sink会消费channel中的数据,然后送给外部源或者其他source。如数据可以写入到HDFS或者HBase中。

        flume允许多个agent连在一起,形成前后相连的多级跳。

安装:

1.从官网下载

(flume1.5与hadoop1.1.2不兼容)
      2.分别解压,然后把src项目中的所有内容复制到bin项目中

3.删除src项目,把bin项目重命名为flume

4.配置到环境变量中

5.书写agent配置

使用flume的核心是如何配置agent文件。agent的配置是一个普通文本文件,使用键值对形式存储配置信息,可以设置多个agent信息。配置的内容包括source、channel、sink等。组件source、channel、sink都有名称、类型和很多个性化的属性配置。

配置文件应该这么写

# list the sources, sinks and channels for the agent

.sources =

.sinks =

.channels =

# set channel for source

.sources..channels = ...

# set channel for sink

.sinks..channel =

# properties for sources

.sources.. =

# properties for channels

.channel.. =

# properties for sinks

.sources.. =

   例子:
   
 首先我们建立一个 example文件   

点击(此处)折叠或打开

  1. vi example
      然后把下面内容,粘帖到里面就可以了,注意不要有乱码,有乱码的话,可以直接创建一个文件,然后上传。方法也有很多,能解决就好。

点击(此处)折叠或打开

  1. #agent1表示代理名称
  2. agent1.sources=source1
  3. agent1.sinks=sink1
  4. agent1.channels=channel1

  5. #Spooling Directory是监控指定文件夹中新文件的变化,一旦新文件出现,就解析该文件内容,然后写入到
  6. #channle。写入完成后,标记该文件已完成或者删除该文件。
  7. #配置source1
  8. agent1.sources.source1.type=spooldir
  9. agent1.sources.source1.spoolDir=/root/hmbbs
  10. agent1.sources.source1.channels=channel1
  11. agent1.sources.source1.fileHeader = false
  12. agent1.sources.source1.interceptors = i1
  13. agent1.sources.source1.interceptors.i1.type = timestamp

  14. #配置sink1
  15. agent1.sinks.sink1.type=hdfs
  16. agent1.sinks.sink1.hdfs.path=hdfs://hadoop0:9000/hmbbs
  17. agent1.sinks.sink1.hdfs.fileType=DataStream
  18. agent1.sinks.sink1.hdfs.writeFormat=TEXT
  19. agent1.sinks.sink1.hdfs.rollInterval=1
  20. agent1.sinks.sink1.channel=channel1
  21. agent1.sinks.sink1.hdfs.filePrefix=%Y-%m-%d

  22. #配置channel1
  23. agent1.channels.channel1.type=file
  24. agent1.channels.channel1.checkpointDir=/root/hmbbs_tmp/123
  25. agent1.channels.channel1.dataDirs=/root/hmbbs_tmp/

6.启动代理的脚本是flume-ng agent,需要指定agent name、配置目录、配置文件

-n 指定agent名称

-c 指定配置文件目录

-f 指定配置文件

-Dflume.root.logger=DEBUG,console

因此完整的启动命令应该这么写

bin/flume-ng agent –n agent1 –c conf –f /root/flume/conf/example –Dflume.root.logger=DEBUG,console

启动成功后,可以向目录/root/hmbbs中放入文件,flume会感知到新文件,然后上传到hdfs的/flume目录下。

       7.我们启动flume之后
       会看到下面信息------------监控的信息输出。
 
    
       一旦有文件输入,便会变化。


阅读(2490) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~