1.Flume介绍
1.1 概述
- Flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。
- Flume可以采集文件,socket数据包等各种形式源数据,又可以将采集到的数据输出到HDFS、hbase、hive、kafka等众多外部存储系统中
- 一般的采集需求,通过对flume的简单配置即可实现
- Flume针对特殊场景也具备良好的自定义扩展能力,因此,flume可以适用于大部分的日常数据采集场景
1.2 运行机制
- Flume分布式系统中最核心的角色是agent,flume采集系统就是由一个个agent所连接起来形成
- 每一个agent相当于一个数据传递员,内部有三个组件:
- Source:采集源,用于跟数据源对接,以获取数据
- Sink:下沉地,采集数据的传送目的,用于往下一级agent传递数据或者往最终存储系统传递数据
- Channel:agent内部的数据传输通道,用于从source将数据传递到sink.
1.3 Flume采集系统结构图
单个agent采集数据
多级agent之间串联
2.Flume实战案例
2.1 Flume的安装部署
flume版本为 apache-flume-1.6.0-bin.tar.gz 链接:https://pan.baidu.com/s/1itiTPysWgE-_kYfVbumfww
提取码:dzzl
放到HDFS下进行解压,然后进入flume的目录,修改conf下的flume-env.sh,在里面配置JAVA_HOME
tar -zxvf apache-flume-1.6.0-bin.tar.gz -C apps/
然后进入到flume 的conf目录下
用一个最简单的例子来测试一下程序环境是否正常
先在flume的conf目录下新建一个文件 vi netcat-logger.conf
#Name the components on this agent
a1.sources = r1 //给采集源起名 叫 r1
a1.sinks = k1 //给下沉地起名 叫 k1
a1.channels = c1 //给传输通道起名 叫 c1
#Describe/configure the source
a1.sources.r1.type = netcat //采集源的类型为网络端口 netcat
a1.sources.r1.bind = localhost //采集源绑定的地址IP
a1.sources.r1.port = 44444 //采集源绑定的地址端口
#Describe the sink
a1.sinks.k1.type = logger //下沉地要存储的类型为logger服务器
#Use a channel which buffers events in memory
a1.channels.c1.type = memory //传输通道的类型
a1.channels.c1.capacity = 1000 //传输通道的容量 指的是1000个事件(event)
a1.channels.c1.transactionCapacity = 100 //每次最大可以从source拿到或者送到sink中的event数量
#Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
上述保存之后,在flume目录下执行下面命令
[hadoop@mini1 apache-flume-1.6.0-bin]$ bin/flume-ng agent --conf conf --conf-file conf/netcat-logger.conf --name a1 -Dflume.root.logger=INFO,console
上面命令的具体含义:
1 bin/flume-ng // flume-ng 为 flume/bin/安装目录下的一个命令
2 agent --conf conf // 执行flume-ng命令,让启动一个agent ,agent下有一些配置文件 --conf 它所在的目录为conf
3 --conf-file conf/netcat-logger.conf // --conf-file为采集方案的配置 ,放在conf目录下的netcat-logger.conf里面
4 --name a1 // --name a1 指的是启动的agent 的名字 为 a1
5 -Dflume.root.logger=INFO,console // flume 传的参数
重新开启一个mini1窗口,然后输入 命令 如果命令没成功 说明你的虚拟机上没有安装telnet 直接输入yum install telnet 进行安装即可。 进去之后 你就可以在里面 先随便输些数据,查看之前启动的服务器的变化 它就会采集你输入的数据
telnet localhost 44444 // localhost 指的是连接本地 44444 指的是之前配置的端口号