Flume常用组件配置(二)

Flume框架学习一

Flume、Kafka、Hdfs整合

一、Flume开发中常用组件source,channel,sink等配置

agent  代理

1、channel通道

file 将事件存储在本地文件系统上的事务日志中,具有持久性:只要事件被写入channel,即使使用了代理,代理重新启动,事件也不会丢失。agent1.channnels.channel1.type=file
memory

将事件缓存到内存中,不具有持久性存储能力,如果代理重新启动,事件就会丢失。在有些时候这种情况允许。和file channel相比,memory channel 速度快,吞吐量较高

agent1.channnels.channel1.type=memory

jdbc 将事件存储在数据库中

2、sink

 

 

 

sink

目地

HDFS

以文本,序列化文件,Avro或定制格式写入到HDFS中。

HBASE

使用某种序列化工具将数据写入到HBASE中

Logger

使用SLF4J记录INFO级别的事件,主要用来测试

kafka

将事件写入到kafka消息缓存对列

Elasticcsearch

使用Logstash格式将事件写入到Elasticsearch集群中

NULL

丢弃所有事件

Avro

通过Avro RPC发送事件到一个Avro source群中

File roll

将事件写入到本地文件系统

Hive

将事件按固定的格式导入到hive表中或者对应的分区里。

IRC

将事件发送给IRC通道

 

3、source

 

 

 

 

source

数据源

Avro

监听由Avro sink 或Flume SDK 通过Avro RPC发送的事件所抵达的端口

Exec

运行一个Unix命令(例如 tail -F /path/to/file),并且把从标准输出上读取的行转化为事件。但是要注意,此source不一定能保证把事件传送到channel,更好的选择可以参考spooling directory source 或者Flume SDK.

HTTP

监听一个端口,并且使用可插拔句柄,比如JSON处理程序或者二进制数据处理程序,把HTTP请求转换成事件

JMS

读取来自JMS Queue或者Topic的消息并将其转换成事件

Spooling directory

/spooldir

按行读取保存在缓冲目录中的文件,并将其转换为事件。

Netcat

监听一个端口,并把每行文本转换为一个事件

Syslog

从日志中读取行,并将其转换为事件

Thrift

监听由Thrift sink或Flume SDK通过Thrift RPC发送的事件所抵达的窗口

Squence genetartor

依据增量计数器来生成事件,主要用来测试用

kafka

监听kafka的Topic,当成事件

4、interceptor

 

 

 

拦截器

interce-ptor

 

Timestamp

给特定source传递过来的事件加一个时间戳header.其中包含的是代理处理事件的时间,以ms为单位。具体参考博客Flume拦截器那篇

   agent1.sources.souce1.interceptors = interceptor1

   agent1.sources.source1.interceptors.interceptor1.type = timestamp。

UUID

在所有的事件上设置一个ID header,它是一个全局的唯一标识符,对将来删除重复数据有用。

agent1.sources.source1.interceptors.interceptor1.type

=

org.apache.flume.sink.solr.morphline.UUIDInterceptor$Builder

 static

将所有的事件上设置一个固定的header及其值。具体参考官网

 Host

将所有事件上设置一个包含代理主机名或IP地址的主机header

二、事务和可靠性

flume有两个独立的事务:从source到channel、channel到sink

spooling directory source为文件的每一行创建一个事件、,一旦事务中所有事件提交到channel,那么source就把这个文件标记为完成。

事务类似的方式,从channel到sink,如果无法记录事件,将会回滚,所有的事件保存在channel中

三、分区和拦截器

大型数据常常被组织为分区,好处是查询涉及到数据的某个子集,查询范围就被限制在特定的分区范围内。flume事件的数据通常按时间来分区。(例如删除重复事件)

需要更改配置文件hdfs.path设置:

agent1.sinks.sink1.hdfs.path = /temp/flume/year=%Y/mouth=%m/day=%d

source 的header并没有设置时间戳(timestamp()),需要flume拦截器完成

souece1添加一个时间拦截器,会在传入到channel之前为每个事件增加一个timestamp header

agent1.sources.source1.interceptors = interceptor1
agent1.sources.source1.interceptors.interceptor1.type = timestamp

四、扇出

从一个source向多个channel,亦即向多个sink传递事件。

案例:spooling directory source扇出到hdfs sink和logger sink的flume配置

#spooling directory source扇出到hdfs sink和logger sink的flume配置
ag1.sources = source1
ag1.sinks = sink1a sink1b
ag1.channels =channel1a channerl1b

ag1.sources.source1.channels = channel1a channerl1b
ag1.sinks.sink1.channela = channel1a
ag1.sinks.sink1.channelb = channel1b

ag1.sources.source1.type = spooldir
ag1.sources.source1.spoolDir = /root/log

ag1.sinks.sink1a.type=hdfs
ag1.sinks.sink1a.hdfs.path = /temp/flume
ag1.sinks.sink1a.hdfs.filePrefix = events
ag1.sinks.sink1a.hdfs.fileSuffix = .log
ag1.sinks.sink1a.hdfs.fileType = DataStream

ag1.sinks.sink1b.type=logger

ag1.channels.channel1a.type = file
ag1.channels.channel1b.type = memory

 

你可能感兴趣的:(Hadoop生态圈)