简介
Flume是一个分布式,可靠的,可以用来有效的收集,聚合和移动大的日志数据的可用服务。它是一个基于数据流的简单且灵活的框架。采用可调可靠性机制和多种故障转移及恢复机制保证很好的稳健性和容错性。它使用了一个简单的可扩展的数据模型,允许在线分析应用。data flow(数据流)是Flume最重要的抽象,data flow描述了从数据产生,传输、处理并最终写入目标路径。下图描述了Flume重要的几个组件:
结合上图,Flume的一些核心组件
组件
|
功能
|
Web Server
|
数据产生的源头。
|
Agent
|
Flume的核心就是Agent 。Agent是一个Java进程,且运行在日志收集端,通过Agent接收日志,然后暂存起来,再发送到目的地。
|
Source
|
Agent核心组件之一,Source(源)用于从Web Server收集数据,然后发送到Channel(通道)。
|
Channel
|
Agent核心组件之一,Channel(通道)可以用来从Source接收数据,然后发送到Sink,Channel存放零时数据,有点类似队列一样。
|
Sink
|
Agent核心组件之一,Sink(接收器)用来把数据发送的目标地点,如上图放到HDFS中。
|
Event
|
整个数据传输过程中,流动的对象都是实现了org.apache.flume.Event接口的对象。Event也是事务保证的级别。
|
Flow |
Event从源点到达目的点的迁移的抽象 |
注:Flume支持多个Agent,支持扇入(fan-in)、扇出(fan-out)。
系统要求
1,java运行时环境--Java 1.6或者更晚的(建议Java 1.7)
2,内存 - 使用Sources,Channels或者Sinks要配置足够的内存。
3,硬盘空间 - 使用Channels和Sinks要配置足够的硬盘空间。
4,目录权限 - 被Agent使用的目录必须要有读和写的权限。
官方网站:http://flume.apache.org/
用户文档:http://flume.apache.org/FlumeUserGuide.html
开发文档:http://flume.apache.org/FlumeDeveloperGuide.html
数据流模型
Flume Event被定义为一个字节的有效载荷以及以及一个可选的字符串属性集。Flume Source接收来自外部源的数据(比如:Web Server)。Flume的数据流由Event贯穿始终。事件是Flume的基本数据单元,当Source捕获事件后会进行特定的格式化,然后Source会把Event推送到一个或多个Channel中,可以把Channel看作是一个缓冲区或者一个队列,它将保存事件直到Sink处理完该事件。Sink负责持久化日志或者把事件推向另一个Source。
Flume提供了大量内置的Source、Channel和Sink类型。不同类型的Source,Channel和Sink可以自由组合。也可以自定义Source,Channel和Sink。关于这三者的组合关系是很灵活的,下面我们看下几幅图:
多级代理:
multi-hop模式:事件在到达最终目的地之前通过多个Agent
合并:
Multiplexing:
Flume支持multiplexing Event到一个或者多个目的地,它通过多路复用器将Event复制或者选择性的路由到一个或多个Channel。
上图的示例,名称为“foo”的Agent,Source会Fan out到三个Channel中,Fan out的方式分为replicating和multiplexing。如果采用replicating方式,那么每个Event会发到这三个Channel中,如果采用multiplexing方式,它是根据Event的属性来路由,然后发送到指定的Channel中。
注:一个sink只能接收一个Channel发过来的数据
下面我们分别举两个例子:
replicating:
# List the sources, sinks and channels for the agent
<Agent>.sources = <Source1>
<Agent>.sinks = <Sink1> <Sink2>
<Agent>.channels = <Channel1> <Channel2>
# set list of channels for source (separated by space)
<Agent>.sources.<Source1>.channels = <Channel1> <Channel2>
# set channel for sinks
<Agent>.sinks.<Sink1>.channel = <Channel1>
<Agent>.sinks.<Sink2>.channel = <Channel2>
<Agent>.sources.<Source1>.selector.type = replicating
replicating是将Event发送到所有的Channel。
multiplexing:
# Mapping for multiplexing selector
<Agent>.sources.<Source1>.selector.type = multiplexing
<Agent>.sources.<Source1>.selector.header = <someHeader>
<Agent>.sources.<Source1>.selector.mapping.<Value1> = <Channel1>
<Agent>.sources.<Source1>.selector.mapping.<Value2> = <Channel1> <Channel2>
<Agent>.sources.<Source1>.selector.mapping.<Value3> = <Channel2>
#...
<Agent>.sources.<Source1>.selector.default = <Channel2>
multiplexing是根据header的值来路由的,根据上面的例子,如果Event header的<someHeader>属性值为Value1的话,就发送Channel1,如果属性值为Value2的话就发送到Channel1,和Channel2,如果属性值为Value3的话,就发送到Channel2中,其他的都发送到Channel2.
可靠性
Event是分阶梯传送的,从Source->Channel->Sink的,Event最终传送到下一个Agent或下一个终端资源库(例如HDFS,文件系统等),在传送打到后,Event在Channel中删除。
end-to-end指的是:在删除Channel中的Event时,保证Event已经传递到了下一个Agent或者终端资源库,但是这里没有提到Source进入到Channel之前如果保证不丢失。具体的可以看下每个Source的实现。
Flume采用了事务的方式来保证Event的可靠性传输,保证Event集合在点对点的传输是可靠的。
可恢复性
事件在Channel是分阶梯,管理从失败中恢复。Flume支持持久化到本地文件系统中(即:FileChannel,但是性能不佳)。Memory Channel只是存储Event到内存的队列中,性能很好,但是当Agent挂掉,内存中的Event是不能够被恢复的。
安装第三方插件
Flume是完全基于插件的框架,Flume有多种Sources,Channels,Sinks,Serializers。
虽然可以包括自定义Flume组件,但是加入他们所需的jars到conf/flume-env.sh文件中FLUME_CLASSPATH变量中,Flume现在支持一种特殊的目录结构叫做:plugins.d,它有特殊的格式,这样的话Flume可以自动的启用插件。这样就可以很容易的管理插件包装的问题,也方便调试和排除故障,特别是Lib包冲突的问题。
plugins.d目录
plugins.d目录位于$FLUME_HOME/plugins.d。在启动的时候,flume-ng启动脚本会检查 plugins.d 目录的插件确保符合下面的格式,并且包含了正确的路径。
插件目录布局
每个在 plugins.d 内的插件,最多包含三个子目录。
1,lib - 插件的JAR。
2,libext - 插件依赖JAR(S)
3,native - 任何所需的本地库,例如:.so文件
下面是两个插件在 plugins.d 目录中的位置:
plugins.d/
plugins.d/custom-source-1/
plugins.d/custom-source-1/lib/my-source.jar
plugins.d/custom-source-1/libext/spring-core-2.5.6.jar
plugins.d/custom-source-2/
plugins.d/custom-source-2/lib/custom.jar
plugins.d/custom-source-2/native/gettext.so
基于Zookeeper的配置
Flume支持Agent的配置信息通过Zookeeper,但是这个是一个实验性的功能,不建议在生产环境使用。这个配置文件需要上传到Zookeeper中,这个配置文件将储存在Zookeeper的节点下,下面看Agent a1和a2在zookeeper的结构:
- /flume
|- /a1 [Agent config file]
|- /a2 [Agent config file]
配置文件上传后,使用如下参数启动Agent:
$ bin/flume-ng agent –conf conf -z zkhost:2181,zkhost1:2181 -p /flume –name a1 -Dflume.root.logger=INFO,console
参数名称
默认
描述
z
|
– |
Zookeeper服务器列表,格式是hostname:port,用逗号分隔 |
p
|
/flume |
Zookeeper存储Agent配置文件的路径。 |
详情查看:Flume采用zookeeper管理配置
Flume Sources
名称
|
描述
|
Avro Source
|
监听Avro端口并且从外部Avro客户端接收Event。
|
Thrift Source
|
监听Thrift端口并且从外部Thrift客户端接收Event。
|
Exec Source
|
运行Unix命令,预计能产生持续的输出()
|
JMS Source
|
从JMS的queue或者topic读取数据
|
Spooling Directory Source
|
监测配置的目录下新增的文件,并将文件中的数据读取出来,可实现准实时。
|
Kafka Source
|
作为一个消费者,从Apache Kafka的topic读取消息。
|
NetCat Source
|
监听指定端口,将每一行封装成一个Event。
|
Sequence Generator Source
|
一个简单的序列生成器,从0开始,每次增加1,主要用于测试。
|
Syslog TCP Source
|
读取syslog消息并且生成Flume的Event,TCP每个Event用'n'分割
|
Multiport Syslog TCP Source
|
这个是最新,最快,多端口版本的Syslog TCP Source。
|
Syslog UDP Source
|
读取syslog消息并且生成Flume的Event,每个输入信息当成一个Event
|
HTTP Source
|
接受HTTP的GET或者POST数据,GET是实验性质的,不建议使用。支持JSON、BLOB表示形式
|
Stress Source
|
是一个内部负载生成源,用来做压力测试是非常有用的
|
Avro Legacy Source
|
允许Flume 1.x的Agent从Flume 0.9.4的Agent中获取数据,它接受0.9.4的Event,并且转化成1.x
|
Thrift Legacy Source
|
和Avro Legacy Source雷同
|
Scribe Source
|
|
Flume Sinks
名称
|
描述
|
HDFS Sink
|
将数据写入到HDFS
|
Hive Sink
|
将文本或者JSON数据用分隔符分割,直接变成Hive的表,或者是分区
|
Logger Sink
|
记录Event的Info级别日志,通常用于测试或调试。
|
Avro Sink
|
采用Avro Sink接收到的Event,发送到另外一个Avro Source
|
Thrift Sink
|
采用Thrift Sink接收到的Event,发送到另外一个Thrift Source
|
IRC Sink
|
从附加的Channel获取数据,转发到配置中的IRC的目的地。IRC(类似于网络聊天室的服务)
|
File Roll Sink
|
将Event存放到本地文件系统,根据时间或者大小生成文件。
|
Null Sink
|
丢弃所有从Channel获取的Event。
|
HBaseSink
|
写入数据到Hbase
|
AsyncHBaseSink
|
采用异步的形式写入数据到Hbase
|
MorphlineSolrSink
|
将数据写入Solr集群
|
ElasticSearchSink
|
将数据写入ElasticSearch集群
|
Kafka Sink
|
将数据写入Kafka集群
|
Flume Channels
名称
|
描述
|
Memory Channel
|
储存Event在内存队列中,如果宕机可能会造成数据的丢失,具有很高的吞吐量。
|
JDBC Channel
|
将Event储存在持久化的数据库中,目前支持嵌入式的Derby。
|
Kafka Channel
|
将Event储存在Kafka集群(必须单独部署),Kafka提供了高可用和复制性,所以Kafka或者Agent崩溃,数据也不会丢失。
|
File Channel
|
将Event持久化在本地文件系统里(性能较差),但是可以保证数据不丢失。
|
Spillable Memory Channel
|
Event数据存储在内存中和磁盘上,当内存队列满了,会持久化到磁盘文件(当前试验性的,不建议生产环境使用)
|
Pseudo Transaction Channel
|
仅用于单元测试,不能用于生产环境。
|
分享到:
相关推荐
flume-ng-extends Flume NG的源,用于在目录中拖尾文件 配置 物业名称 默认 描述 频道数 -- 类型 -- ...对于解析器,有两个模块类实现了DirectoryTailParserModulable SingleLineParserModule M
目录.NICK.path —— 目录路径dirs.NICK.file-pattern —— 目标文件的模式,例如) '^(.*)$' 适用于所有文件对于解析器,有两个模块类实现了 DirectoryTailParserModulable 单行解析器模块多行解析器
5.使用什么脚本可以查看flume有没有往Kafka传输数据做软件开发的都知道模块化思想,这样设计的原因有两方面:一方面是可以模块化,功能划分更加清晰,从“数据采集--数据接入--流失计算--数据输出
flume-sources模块: etl-samples模块: hdp-sandbox-access模块: lastfm-morphlines-etl模块: hdp-sandbox-access模块: mapreduce-morphline模块: 纱线队列测试模块:纱线 tez-dag-jobs模块:Tez一起 纱线...
Hadoop数据导入导出 :Flume收集数据-安装讲课
* 安装python parser所用到的第三方模块 * 安装MySQLdb * `sudo yum install -y mysql-devel MySQL-python` * 安装ua-parser * `sudo easy_install ua-parser` * 安装concurrent futures * `sudo easy_...
电商推荐系统项目启动组件:Rediskafkaflume ./bin/flume-ng agent --conf conf --conf-file ./conf/recommend-kafka-flume.conf --name a1 -Dflume.root.logger=info,consoleMongoDBKafkaStreamApplication //不需要...
flume example config文件,作为帮助文档,可以参考一下
结合电信客服项目,将数据存储模块独立成项目,欢迎下载
第一天 hadoop的基本概念 伪分布式hadoop集群安装 hdfs mapreduce 演示 ... 03-flume介绍及演示.avi 04-行为轨迹增强处理流程.avi 05-样本url筛选模块开发.avi 06-行为轨迹增强模块1.avi 07-行为轨迹增强模块2.avi
包含爬虫,Scala代码,Spark,Hadoop,ElasticSearch,logstash,Flume,echarts,log4j emotional_analysis_spider 爬虫模块 emotional_analysis_web 数据处理模块(Scala代码) emotional_analysis_...
ETL模块:加载原始数据,清洗,加工,为模型训练模块 和 推荐模块 准备所需的各种数据。 模型训练模块:负责产生模型,以及寻找最佳的模型。 推荐模块:包含离线推荐和实时推荐,离线推荐负责把推荐结果存储到存储...
ETL模块:加载原始数据,清洗,加工,为模型训练模块 和 推荐模块 准备所需的各种数据。 模型训练模块:负责产生模型,以及寻找最佳的模型。 推荐模块:包含离线推荐和实时推荐,离线推荐负责把推荐结果存储到存储...
## ocr_ui文件夹:百度OCR图文识别工程模块 ## 一些功能: > * 图文识别,联网翻译,可选择IT词意风格翻译、IT词库实时匹配推荐 > * 提供APP外部文本选中文本,跳转到本APP翻译。 > * 提供单用户词汇答题训练...
(2) 使用WebMagic爬虫技术爬取B站视频数据信息,将采集到的数据导入kafka中,使用Flume框架技术从kafka采集数据到Hdfs并将数据导入到Hive中,然后使用Hue操作Hive进行离线数据分析,最后利用sqoop导入mysql,整个...
emsite快速开发框架 ### 框架简介 - emsite框架是众多是基于众多优秀的开源项目,高度整合封装而成的高效,高性能,强安全性的开源Java EE分布式全自动快速开发框架平台。...以上各大功能将作为模块化集成到本项
emsite框架是一个分布式的后台全自动快速开发框架,采用dubbo作为服务层框架,后台将集成单点登录、Auth2.0、storm+kafka消息处理系统、kafka+ flume+storm+hdfs+hadoop作为日志分析系统、配置中心、分布式任务调度...
(2) 使用WebMagic爬虫技术爬取B站视频数据信息,将采集到的数据导入kafka中,使用Flume框架技术从kafka采集数据到Hdfs并将数据导入到Hive中,然后使用Hue操作Hive进行离线数据分析,最后利用sqoop导入mysql,整个...
Python使用技巧,实战应用...详细介绍了一些Python框架的各种功能和模块,以及如何使用Python进行GUI开发、网络编程和跨平台应用开发等。 适用于初学者和有经验的开发者,能够帮助你快速上手JPython并掌握其高级特性。
本文总结java 、大数据有关基础技术知识,可用于面试前的查漏补缺;包含java集合、多线程、...在《java大数据面试基础v2》的基础上进行了完善补充和丰富,增加flume模块,完善版本管理模块,部分章节进行了补充和完善。