Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。
当前Flume有两个版本Flume 0.9X版本的统称Flume-og,Flume1.X版本的统称Flume-ng。由于Flume-ng经过重大重构,与Flume-og有很大不同,使用时请注意区分。
Flume最早是Cloudera提供的日志收集系统,目前是Apache下的一个孵化项目,Flume支持在日志系统中定制各类数据发送方,用于收集数据。
Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力 。Flume提供了从console(控制台)、RPC(Thrift-RPC)、text(文件)、tail(UNIX tail)、syslog(syslog日志系统),支持TCP和UDP等2种模式),exec(命令执行)等数据源上收集数据的能力。
Flume-og采用了多Master的方式。为了保证配置数据的一致性,Flume引入了ZooKeeper,用于保存配置数据,ZooKeeper本身可保证配置数据的一致性和高可用,另外,在配置数据发生变化时,ZooKeeper可以通知Flume Master节点。Flume Master间使用gossip协议同步数据。
Flume-ng最明显的改动就是取消了集中管理配置的 Master 和 Zookeeper,变为一个纯粹的传输工具。Flume-ng另一个主要的不同点是读入数据和写出数据现在由不同的工作线程处理(称为 Runner)。 在 Flume-og 中,读入线程同样做写出工作(除了故障重试)。如果写出慢的话(不是完全失败),它将阻塞 Flume 接收数据的能力。这种异步的设计使读入线程可以顺畅的工作而无需关注下游的任何问题。
1. Flume可以将应用产生的数据存储到任何集中存储器中,比如HDFS,HBase
2. 当收集数据的速度超过将写入数据的时候,也就是当收集信息遇到峰值时,这时候收集的信息非常大,甚至超过了系统的写入数据能力,这时候,Flume会在数据生产者和数据收容器间做出调整,保证其能够在两者之间提供平稳的数据.
3. 提供上下文路由特征
4. Flume的管道是基于事务,保证了数据在传送和接收时的一致性.
5. Flume是可靠的,容错性高的,可升级的,易管理的,并且可定制的。
1. Flume可以高效率的将多个网站服务器中收集的日志信息存入HDFS/HBase中
2. 使用Flume,我们可以将从多个服务器中获取的数据迅速的移交给Hadoop中
3. 除了日志信息,Flume同时也可以用来接入收集规模宏大的社交网络节点事件数据,比如facebook,twitter,电商网站如亚马逊,flipkart等
4. 支持各种接入资源数据的类型以及接出数据类型
5. 支持多路径流量,多管道接入流量,多管道接出流量,上下文路由等
6. 可以被水平扩展
Agent主要由:source,channel,sink三个组件组成.
Source:
从数据发生器接收数据,并将接收的数据以Flume的event格式传递给一个或者多个通道channel,Flume提供多种数据接收的方式,比如Avro,Thrift,twitter1%等
Channel:
channel是一种短暂的存储容器,它将从source处接收到的event格式的数据缓存起来,直到它们被sinks消费掉,它在source和sink间起着一共桥梁的作用,channal是一个完整的事务,这一点保证了数据在收发的时候的一致性. 并且它可以和任意数量的source和sink链接. 支持的类型有: JDBC channel , File System channel , Memort channel等.
sink:
sink将数据存储到集中存储器比如Hbase和HDFS,它从channals消费数据(events)并将其传递给目标地. 目标地可能是另一个sink,也可能HDFS,HBase.
百度百科 词条 https://baike.baidu.com/item/flume/6250098
熟悉软件的原理和应用场景
1.几种写的模式 监控文件,目录,数据流的写入
2.安装软件 各种配置文件捣鼓一片
3.搭建一套日志收集的系统 比如分析用户行为
flume+mongoDB收集日志的系统
https://wenku.baidu.com/view/66f1e436ba68a98271fe910ef12d2af90242a81b.html
flume+kafka+hdfs
http://www.cnblogs.com/tianjipeng/p/5528936.html
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1.安装软件
官网下载flume1.8.0,
#tar -zxvf apache-flume-1.8.0.tar.gz -C /home/michael/tool
#cd /home/michael/tool
#mv apache-flume-1.8.0-bin flume1.8.0
#cd flume1.8.0/conf
#mv flume-env.sh.template flume-env.sh
#vi flume-env.sh
shift+G 到文件最后一行,添加Java home 路径
JAVA_HOME=/home/michael/tool/jdk1.8.0_201
按Esc退出
#:qw #保存退出
检查安装成功
#bin/flume-ng version
Flume 1.8.0
Source code repository: https://git-wip-us.apache.org/repos/asf/flume.git
Revision: 99f591994468633fc6f8701c5fc53e0214b6da4f
Compiled by denes on Fri Sep 15 14:58:00 CEST 2017
From source with checksum fbb44c8c8fb63a49be0a59e27316833d
案例分析
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/home/michael/tool/flume1.8.0/conf
1.启动服务
#/home/michael/tool/flume1.8.0/bin/flume-ng agent -c . -f /home/michael/tool/flume1.8.0/conf/jobconf/avro.conf -n a1 -Dflume.root.logger=INFO,console
2.追加内容
#echo "hello world" > /home/michael/tool/flume1.8.0/bin/log.00
3.发送文件到flume 注意 bigdata111 为主机名
#/home/michael/tool/flume1.8.0/bin/flume-ng avro-client -c . -H bigdata111 -p 4141 -F /home/michael/tool/flume1.8.0/bin/log.00
我们来看看这个工具提供哪些指令?
#bin/flume-ng help
Usage: bin/flume-ng [options]...
commands:
help display this help text
agent run a Flume agent
avro-client run an avro Flume client
version show Flume version info
global options:
--conf,-c use configs in directory
--classpath,-C append to the classpath
--dryrun,-d do not actually start Flume, just print the command
--plugins-path colon-separated list of plugins.d directories. See the
plugins.d section in the user guide for more details.
Default: $FLUME_HOME/plugins.d
-Dproperty=value sets a Java system property value
-Xproperty=value sets a Java -X option
agent options:
--name,-n the name of this agent (required)
--conf-file,-f specify a config file (required if -z missing)
--zkConnString,-z specify the ZooKeeper connection to use (required if -f missing)
--zkBasePath,-p specify the base path in ZooKeeper for agent configs
--no-reload-conf do not reload config file if changed
--help,-h display help text
avro-client options:
--rpcProps,-P RPC client properties file with server connection params
--host,-H hostname to which events will be sent
--port,-p port of the avro source
--dirname directory to stream to avro source
--filename,-F text file to stream to avro source (default: std input)
--headerFile,-R File containing event headers as key/value pairs on each new line
--help,-h display help text
Either --rpcProps or both --host and --port must be specified.
Note that if directory is specified, then it is always included first
in the classpath.
spool案例分析
1.添加配置文件 /home/michael/tool/flume1.8.0/conf/jobconf/spool.conf
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# Describe/configure the source
a1.sources.r1.type = spooldir
a1.sources.r1.channels = c1
a1.sources.r1.spoolDir = /home/michael/tool/flume1.8.0/logs
a1.sources.r1.fileHeader = true
# Describe the sink
a1.sinks.k1.type = logger
# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
2.启动服务
#/home/michael/tool/flume1.8.0/bin/flume-ng agent -c . -f /home/michael/tool/flume1.8.0/conf/jobconf/spool.conf -n a1 -Dflume.root.logger=INFO,console
3.追加内容给到logs目录的文件
#echo "666666" >777.log
root@m1:/home/hadoop# vi /home/michael/tool/flume1.8.0/conf/jobconf/exec_tail.conf
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# Describe/configure the source
a1.sources.r1.type = exec
a1.sources.r1.channels = c1
a1.sources.r1.command = tail -F /home/michael/tool/flume1.8.0/log_exec_tail
# Describe the sink
a1.sinks.k1.type = logger
# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
启动服务
#/home/michael/tool/flume1.8.0/bin/flume-ng agent -c . -f /home/michael/tool/flume1.8.0/conf/jobconf/exec_tail.conf -n a1 -Dflume.root.logger=INFO,console
生成内容
# for i in {1..100};do echo "exec tail$i" >> /home/michael/tool/flume1.8.0/log_exec_tail;echo $i;sleep 0.1;done