概述
一、Flume基本概念
flume是分布式的、可靠的、高可用的,用于对不同来源的大量日志数据进行有效采集、聚集和移动,并以集中式的数据存储的系统
二、flume中重要的模型
1、flume Event:
flume 事件,被定义为一个具有有效荷载的字节数据流和可选的字符串属性集。
2、flume Agent:
flume 代理,是一个进程承载从外部源事件流到下一个目的地的过程。包含source channel 和 sink。
3、Source
数据源,消耗外部传递给他的事件,外部源将数据按照flume Source 能识别的格式将Flume 事件发送给flume Source。
4、Channel
数据通道,是一个被动的存储,用来保持事件,直到由一个flume Sink消耗。
5、Sink
数据汇聚点,代表外部数据存放位置。发送flume event到指定的外部目标。
三、Source详解–几种类型的source
1、Avro Source
监听AVRO端口来接受来自外部AVRO客户端的事件流。利用Avro Source可以实现多级流动、扇出流、扇入流等效果。另外也可以接受通过flume提供的Avro客户端发送的日志信息。
#描述/配置Source
a1.sources.r1.type
=
avro
a1.sources.r1.bind
=
0.0.0.0
a1.sources.r1.port
=
44444
修改配置文件,除了Source部分配置不同,其余部分都一样
通过flume提供的avro客户端向指定机器指定端口发送日志信息:
flume-ng avro-client --conf avro.conf --host 127.0.0.1 --port 44444 --filename /home/hdpbasic/data/logs/test1.txt
2、Spooling Directory Source
这个Source允许你将将要收集的数据放置到"自动搜集"目录中。这个Source将监视该目录,并将解析新文件的出现。事件处理逻辑是可插拔的,当一个文件被完全读入通道,它会被重命名或可选的直接删除。
要注意的是,放置到自动搜集目录下的文件不能修改,如果修改,则flume会报错。另外,也不能产生重名的文件,如果有重名的文件被放置进来,则flume会报错。
#描述/配置Source
a1.sources.r1.type
= spooldir
a1.sources.r1.spoolDir=/home/hdpbasic/data/logs
修改上面给出的配置文件,除了Source部分配置不同,其余部分都一样
启动flume后,向指定目录中传输文件,发现flume收集到了该文件
3、NetCat Source
一个NetCat Source用来监听一个指定端口,并将接收到的数据的每一行转换为一个事件。
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444
修改上面给出的配置文件,除了Source部分配置不同,其余部分都一样
4、HTTP Source
HTTP Source接受HTTP的GET和POST请求作为Flume的事件,其中GET方式应该只用于试验。
该Source需要提供一个可插拔的"处理器"来将请求转换为事件对象,这个处理器必须实现HTTPSourceHandler接口,该处理器接受一个 HttpServletRequest对象,并返回一个Flume Envent对象集合。
从一个HTTP请求中得到的事件将在一个事务中提交到通道中。因此允许像文件通道那样对通道提高效率。
如果处理器抛出一个异常,Source将会返回一个400的HTTP状态码。
如果通道已满,无法再将Event加入Channel,则Source返回503的HTTP状态码,表示暂时不可用。
#描述/配置Source
a1.sources.r1.type
= http
a1.sources.r1.port
= 66666
启动flume后,通过命令发送HTTP请求到指定端口:
curl -X POST -d '[{ "headers" :{"a" : "a1","b" : "b1"},"body" : "hello~http~flume~"}]' http://0.0.0.0:6666
四、channel详解–几种不同的channel
1、file channel
File Channel是一个持久化的隧道(channel),数据安全并且只要磁盘空间足够,它就可以将数据存储到磁盘上。
a1.channels.c1.type = file
a1.channels.c1.checkpointDir = /mnt/flume/checkpoint
a1.channels.c1.dataDirs = /mnt/flume/data
2、memory channel
事件存储在具有可配置最大大小的内存队列中。 它是需要更高吞吐量并准备在代理故障的情况下丢失上载数据的流的理想选择。 Memory Channel是一个不稳定的隧道,它在内存中存储所有事件。如果进程异常停止,内存中的数据将不能让恢复。受内存大小的限制。
a1.channels.c1.type = memory
a1.channels.c1.capacity = 10000
a1.channels.c1.transactionCapacity = 100
五、Sink—几种不同的sink
1、HDFS sink
此接收器将事件写入Hadoop分布式文件系统(HDFS)。 它目前支持创建文本和序列文件。 它支持两种文件类型的压缩。 可以基于经过的时间或数据大小或事件数量来周期性地滚动文件(关闭当前文件并创建新文件)。 它还通过属性(例如事件发生的时间戳或机器)来对数据进行桶/分区。 HDFS目录路径可能包含将由HDFS接收器替换的格式化转义序列,以生成用于存储事件的目录/文件名。 使用此接收器需要安装hadoop,以便Flume可以使用Hadoop jar与HDFS集群进行通信
# Describe the sink
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = hdfs://hdpbasic1:9000/flume/event2
a1.sinks.k1.hdfs.filePrefix = events-
a1.sinks.k1.hdfs.fileType = DataStream
参考文档:
https://blog.csdn.net/kumquatlemon/article/details/78528673
最后
以上就是专注小熊猫为你收集整理的hadoop(十二)、Flume基本介绍的全部内容,希望文章能够帮你解决hadoop(十二)、Flume基本介绍所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复