Flume是一个分布式、可靠和高可用的海量日志采集、聚合和传输的系统,支持在日志系统中定制各类数据发送方,用于收集数据,Flume提供对数据进行简单处理,并写到各种数据接受方(如文本、HDFS、HBase等)的能力。
Flume的核心组件
1、Agent:使用JVM运行Flume,每台机器运行一个agent,但可以在一个agent中包含多个sources和sinks。
2、Source:从Client收集数据,传递给Channel。
3、Channel:连接sources和sinks,这个有点像一个队列。
4、Sink:收集数据,运行在一个独立线程。
5、Event:可以是日志记录、avro对象等。
Flume的特点
1、可靠性:当节点出现故障时,日志能够被传送到其他节点上而不会丢失,Flume提供了三种级别的可靠性保障,从强到弱依次分别为:endtoend(收到数据agent首先将event写到磁盘上,当数据传送成功后,再删除;如果数据发送失败,可以重新发送),Store on failure(这也是scribe采用的策略,当数据接收方crash时,将数据写到本地,待恢复后,继续发送),Besteffort(数据发送到接收方后,不会进行确认)。
2、可扩展性:Flume采用了三层架构,分别为agent,collector和storage,每一层均可以水平扩展,所有agent和collector由master统一管理,这使得系统容易监控和维护,且master允许有多个(使用ZooKeeper进行管理和负载均衡),这就避免了单点故障问题。
3、可管理性:所有agent和colletor由master统一管理,这使得系统便于维护,多master情况,Flume利用ZooKeeper和gossip,保证动态配置数据的一致性,用户可以在master上查看各个数据源或者数据流执行情况,且可以对各个数据源配置和动态加载,Flume提供了web 和shell script command两种形式对数据流进行管理。
4、可恢复性:还是靠Channel,推荐使用FileChannel,事件持久化在本地文件系统里(性能较差)。
Flume的安装和配置
1、下载Flume:可以从官方网站http://flume.apache.org/下载Flume。
2、解压Flume包:将下载的flume包,解压到/home/hadoop目录中,你就已经完成了50%:)简单吧。
3、修改配置文件:主要是JAVA_HOME变量设置(可根据自己的java_home进行配置)。
FAQs
1、问题一:Flume的可靠性是如何实现的?
答案:Flume提供了三种级别的可靠性保障,从强到弱依次分别为:endtoend(收到数据agent首先将event写到磁盘上,当数据传送成功后,再删除;如果数据发送失败,可以重新发送),Store on failure(这也是scribe采用的策略,当数据接收方crash时,将数据写到本地,待恢复后,继续发送),Besteffort(数据发送到接收方后,不会进行确认)。
2、问题二:Flume的可扩展性是如何实现的?
答案:Flume采用了三层架构,分别为agent,collector和storage,每一层均可以水平扩展,所有agent和collector由master统一管理,这使得系统容易监控和维护,且master允许有多个(使用ZooKeeper进行管理和负载均衡),这就避免了单点故障问题。
Flume环境部署和配置详解及案例大全
目录
1、引言
2、Flume
3、Flume环境部署
3.1 系统要求
3.2 安装Flume
3.3 配置Flume
4、Flume配置详解
4.1 Agent配置
4.2 Source配置
4.3 Channel配置
4.4 Sink配置
5、Flume案例大全
5.1 案例一:日志收集
5.2 案例二:数据传输
5.3 案例三:数据存储
1. 引言
Flume是一个分布式、可靠且高效的日志收集系统,用于有效地收集、聚合和移动大量日志数据,它被广泛用于处理大数据环境中的日志数据收集。
2. Flume
Flume的主要特点包括:
分布式:可以在多个节点上部署Flume,以处理大规模数据。
可靠性:Flume提供容错机制,确保数据不丢失。
高效性:Flume支持高吞吐量,适合处理大量日志数据。
3. Flume环境部署
3.1 系统要求
操作系统:Linux或Unix
Java环境:Java 1.6或更高版本
硬件要求:取决于数据量,一般需要一定的CPU和内存资源
3.2 安装Flume
1、下载Flume安装包
2、解压安装包
3、将Flume的bin目录添加到系统环境变量中
3.3 配置Flume
1、创建Flume配置文件(flumeconf.properties)
2、配置Agent信息(包括Agent名称、Source、Channel、Sink等)
3、配置Source(SyslogSource)
4、配置Channel(MemoryChannel)
5、配置Sink(HDFSsink)
4. Flume配置详解
4.1 Agent配置
Agent名称 agent.name = agent1 Agent属性 agent.attr1 = value1 agent.attr2 = value2 Source配置 agent.sources = source1 agent.sources.source1.type = exec agent.sources.source1.command = tail F /path/to/logfile Channel配置 agent.channels = channel1 agent.channels.channel1.type = memory agent.channels.channel1.capacity = 1000 agent.channels.channel1.transactionCapacity = 100 Sink配置 agent.sinks = sink1 agent.sinks.sink1.type = hdfs agent.sinks.sink1.hdfs.path = /user/hadoop/flume/data/ agent.sinks.sink1.hdfs.filePrefix = flume agent.sinks.sink1.hdfs.round = true agent.sinks.sink1.hdfs.roundValue = 10 agent.sinks.sink1.hdfs.roundUnit = minute
4.2 Source配置
exec:执行外部命令,如tail命令
jdbc:从数据库中读取数据
netcat:从网络端口读取数据
syslog:从syslog服务器接收数据
4.3 Channel配置
memory:内存Channel,适用于小规模数据
file:文件Channel,适用于大规模数据
4.4 Sink配置
hdfs:将数据写入HDFS
logger:将数据写入日志文件
http:将数据发送到HTTP服务器
5. Flume案例大全
5.1 案例一:日志收集
目标:收集服务器日志文件,并存储到HDFS中。
配置:
Agent名称 agent.name = log_collector Source配置 agent.sources = source1 agent.sources.source1.type = exec agent.sources.source1.command = tail F /path/to/logfile Channel配置 agent.channels = channel1 agent.channels.channel1.type = memory agent.channels.channel1.capacity = 1000 agent.channels.channel1.transactionCapacity = 100 Sink配置 agent.sinks = sink1 agent.sinks.sink1.type = hdfs agent.sinks.sink1.hdfs.path = /user/hadoop/flume/data/ agent.sinks.sink1.hdfs.filePrefix = flume agent.sinks.sink1.hdfs.round = true agent.sinks.sink1.hdfs.roundValue = 10 agent.sinks.sink1.hdfs.roundUnit = minute
5.2 案例二:数据传输
目标:从日志文件中读取数据,并通过HTTP协议发送到另一个服务器。
配置:
Agent名称 agent.name = data_transmitter Source配置 agent.sources = source1 agent.sources.source1.type = exec agent.sources.source1.command = tail F /path/to/logfile Channel配置 agent.channels = channel1 agent.channels.channel1.type = memory agent.channels.channel1.capacity = 1000 agent.channels.channel1.transactionCapacity = 100 Sink配置 agent.sinks = sink1 agent.sinks.sink1.type = http agent.sinks.sink1.http.host = 192.168.1.10 agent.sinks.sink1.http.port = 8080
5.3 案例三:数据存储
目标:从多个源收集数据,并将数据存储到数据库中。
配置:
Agent名称 agent.name = data_storer Source配置 agent.sources = source1, source2 agent.sources.source1.type = jdbc agent.sources.source1.driver = com.mysql.jdbc.Driver agent.sources.source1.url = jdbc:mysql://192.168.1.11:3306/dbname agent.sources.source1.user = user agent.sources.source1.password = password agent.sources.source1.query = SELECT * FROM table1 agent.sources.source2.type = jdbc agent.sources.source2.driver = com.mysql.jdbc.Driver agent.sources.source2.url = jdbc:mysql://192.168.1.11:3306/dbname agent.sources.source2.user = user agent.sources.source2.password = password agent.sources.source2.query = SELECT * FROM table2 Channel配置 agent.channels = channel1 agent.channels.channel1.type = memory agent.channels.channel1.capacity = 1000 agent.channels.channel1.transactionCapacity = 100 Sink配置 agent.sinks = sink1 agent.sinks.sink1.type = jdbc agent.sinks.sink1.driver = com.mysql.jdbc.Driver agent.sinks.sink1.url = jdbc:mysql://192.168.1.11:3306/dbname agent.sinks.sink1.user = user agent.sinks.sink1.password = password agent.sinks.sink1.table = stored_table
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1172321.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复