全部博文(247)
分类: 大数据
2014-10-31 22:19:54
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连在一起,形成前后相连的多级跳。
(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
# set channel for source
# set channel for sink
# properties for sources
# properties for channels
# properties for sinks
点击(此处)折叠或打开
点击(此处)折叠或打开
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之后