Flume入门
1、Flume是什么?
○ Flume是由cloudera开发的实时日志收集系统
○ 核心概念是由一个叫做Agent(代理节点)的java进程运行在日志收集节点
○ Flume在0.94.0版本以前(包含0.94.0版本)称为Cloudera Flume OG,由于0.94.0版本以前存在各种缺陷,因此不得不重新设计Flume并更名为Apache Flume NG(1.0.0开始)
○ Flume NG VS Flume OG
- 目前版本都是Flume NG(1.0.0版本之后)
架构方面:
□ Flume OG有三种角色的节点:代理节点agent、收集节点collector、主节点master
□ agent负责从各个数据源收集日志数据、将收集到的数据集中到collector,再由collector节点汇总存入到HDFS.而master负责管理agent\collector的活动
□ agent、collector都称为node,node的角色根据配置的不同分为逻辑节点和物理节点,对于逻辑节点的区分、配置、使用非常复杂.
□ agent、collector由source、sink组成,表示当前节点的数据从source传送到sink
以上相对于Flume NG来说:
□ Flume NG只有一种角色节点:代理节点agent
□ 没有collector、master节点,这是最核心的变化.
□ 去除逻辑节点和物理节点的概念和内容
□ agent节点的组成发生变化,由source 、sink、channel三个组件组成
Zookeeper方面:
□ Flume OG的稳定性依赖zookeeper,它需要zookeeper对其多类节点的工作进行管理,虽然OG可以使用内存的方式对各类节点进行管理,但需要用户忍受机器出现故障时信息丢失的出现.
□ Flume NG的节点角色数量由原来的3个缩减为1个,不存在多类角色的问题,所以不再需要zookeeper对各类节点协调的作用,由此脱离了对zookeeper的依赖.
2、Flume的三个组件
一个Agent进程包含了三个组件:Source组件、Channel组件、Sink组件,Source组件负责收集日志文件并发送给Channel组件,Channel组件形成一个管道,再由Sink组件读取Channel组件中的日志文件并发送给其他目标或者文件系统
Source组件:专门收集日志文件,可以处理各种类型的日志数据,如:Avro、Thrift、Exec、JMS、Spooling Directory、Twitter、Kafka、NetCat、Sequence Generator、Syslog、HTTP、Stress、Legacy、Custom(自定义格式)、Scribe
Channel组件:专门用于存放临时文件,存储的位置可以是Memory、JDBC、Kafka、File、Spillable Memory、Pseudo Transaction、Custom(自定义)
Sink组件:专门用于发送存放在Channel组件中的数据,发送的目标包括:HDFS、Hive、Logger、Thrift、IRC、File Roll、Null、HBase、MorphlineSolr、ElasticSearch、Kite Dataset、Kafka、Custom(自定义)
Note:
○ 具体各种使用请参官方文档:http://flume.apache.org/FlumeUserGuide.html#flume-sink-processors
○ Channel中的数据只有在Sink组件发送成功后才会被删除
○ 在整个数据的传输过程中流动的是event,event可以理解为是flume中数据传输的基本单位,event表现为一条条的数据,其事务保证是event级别.
○ flume支持多级flume的agent,支持扇入(fan-in)\扇出(fan-out)
Note:
○ Sink支持发送多个目标
3、Flume的安装与配置
○ 下载
apache-flume-1.6.0-bin.tar.gz
JDK版本:1.6+
○ 解压FLUME_HOME
tar
-zxvf apache-flume-1.6.0-bin.
tar
.gz
○ 安装JDK、配置JAVA_HOME、FLUME_HOME.
1
2
3
|
vi /etc/profile export FLUME_HOME= /home/app/flume export PATH=.:$FLUME_HOME /bin |
○ 一个简单的例子,监控/home/data/logs目录,一旦有发现文件立即上传到hdfs中
□ 首先编写一个配置文件,文件名为:example.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
#agent1表示代理名称 agent1.sources=source1 agent1.sinks=sink1 agent1.channels=channel1 #Spooling Directory是监控指定文件夹中新文件的变化,一旦新文件出现,就解析该文件内容,然后写入到channle。写入完成后,标记该文件已完成或者删除该文件。 #配置source1 agent1.sources.source1.type=spooldir #指定监控的目录 agent1.sources.source1.spoolDir=/home/data/logs agent1.sources.source1.channels=channel1 agent1.sources.source1.fileHeader = false agent1.sources.source1.interceptors = i1 agent1.sources.source1.interceptors.i1.type = timestamp #配置sink1 agent1.sinks.sink1.type=hdfs agent1.sinks.sink1.hdfs.path=hdfs: //master:9000/flume/data agent1.sinks.sink1.hdfs.fileType=DataStream agent1.sinks.sink1.hdfs.writeFormat=TEXT agent1.sinks.sink1.hdfs.rollInterval= 1 agent1.sinks.sink1.channel=channel1 agent1.sinks.sink1.hdfs.filePrefix=%Y-%m-%d #配置channel1 agent1.channels.channel1.type=file #channel数据存放的备份目录 agent1.channels.channel1.checkpointDir=/home/data/channel_data.backup #channel数据存放目录 agent1.channels.channel1.dataDirs=/home/data/channel_data |
□ 将example.conf文件放到$FLUME_HOME/conf文件夹下
□ 启动agent进程命令:需要指定agent的名字、指定配置目录和配置文件
官方格式:
1
|
bin/flume-ng agent -n $agent_name -c conf -f conf/flume-conf.properties.template |
在例子中编写成如下↓↓
1
2
|
bin/flume-ng agent -n agent1 -c conf -f conf/example.conf -Dflume.root.logger=DEBUG,console -Dflume.root.logger=DEBUG,console是在控制台打印信息 |
□ 重新打开一个终端,上传一个文件到/home/data/logs
□ /home/data/logs中的文件被更名为.COMPLETED,查看HDFS文件存在,配置完毕
待续更新...
来自:http://my.oschina.net/u/2377453/blog/473150
posted on 2015-11-06 22:22 ilinux_one 阅读(322) 评论(0) 编辑 收藏 举报