1、Flume 简介
1) Flume 提供一个分布式的,可靠的,对大数据量的日志进行高效收集、聚集、移动的服务, Flume只能在Unix环境下运行。
2) Flume 基于流式架构,容错性强,也很灵活简单。
3) Flume、Kafka 用来实时进行数据收集,Spark、Storm 用来实时处理数据,impala 用来实 时查询。
2、Flume 角色
Flume的一些核心概念:
(1)Events:一个数据单元,带有一个可选的消息头,可以是日志记录、avro 对象等。
(2)Agent:JVM中一个独立的Flume进程,包含组件Source、Channel、Sink。
(3)Client:运行于一个独立线程,用于生产数据并将其发送给Agent。
(4)Source:用来消费传递到该组件的Event,从Client收集数据,传递给Channel。
(5)Channel:中转Event的一个临时存储,保存Source组件传递过来的Event,其实就是连接 Source 和 Sink ,有点像一个消息队列。
(6)Sink:从Channel收集数据,运行在一个独立线程。
Flume以Agent为最小的独立运行单位,一个Agent就是一个JVM。单Agent由Source、Sink和Channel三大组件构成。
值得注意的是,Flume提供了大量内置的Source、Channel和Sink类型。不同类型的Source、Channel和Sink可以自由组合。组合方式基于用户设置的配置文件,非常灵活。比如:Channel可以把事件暂存在内存里,也可以持久化到本地硬盘上;Sink可以把日志写入HDFS、HBase、ES甚至是另外一个Source等等。Flume支持用户建立多级流,也就是说多个Agent可以协同工作,如下图:
Source、Channel、Sink有哪些类型:
3、Flume 传输过程
source 监控某个文件或数据流,数据源产生新的数据,拿到该数据后,将数据封装在一个 Event 中,并 put 到 channel 后 commit 提交,channel 队列先进先出,sink 去 channel 队列中 拉取数据,然后写入到 HDFS 中。
4、Flume 部署及使用
4.1、安装及配置
解压安装包到指定目录:
重命名配置文件:
配置环境变量:
vi flume-env.sh:
验证是否安装成功:
4.2、案例
案例一:监控端口数据
目标:Flume 监控一端 Console,另一端 Console 发送消息,使被监控端实时显示。
1) 安装 telnet 工具:
2) 在job目录下创建 Flume Agent 配置文件 flume-telnet.conf:
3) 判断 44444 端口是否被占用
4) 先开启 flume 监听端口
5) 使用 telnet 工具向本机的 44444 端口发送内容
案例二:实时读取本地文件到 HDFS
目标:实时监控 hive 日志,并上传到 HDFS 中
1) 拷贝 Hadoop 相关 jar 到 Flume 的 lib 目录下(要学会根据自己的目录和版本查找 jar 包)
2) 在job目录下创建 flume-hdfs.conf 文件
3) 执行监控配置
4)查看hdfs文件
案例三:实时读取目录文件到 HDFS
目标:使用 flume 监听整个目录的文件
1) 创建配置文件 flume-dir.conf:
2) 执行测试:执行如下脚本后,请向 upload 文件夹中添加文件试试
3)查看结果:
案例四:Flume 与 Flume 之间数据传递:单 Flume 多 Channel、 Sink
目标:使用 flume-1 监控文件变动,flume-1 将变动内容传递给 flume-2,flume-2 负责存储到 HDFS。同时 flume-1 将变动内容传递给 flume-3,flume-3 负责输出到。 local filesystem。
1) 创建 flume-1.conf,用于监控 hive.log 文件的变动,同时产生两个 channel 和两个 sink 分 别输送给 flume-2 和 flume3:
2) 创建 flume-2.conf,用于接收 flume-1 的 event,同时产生 1 个 channel 和 1 个 sink,将数 据输送给 hdfs:
3) 创建 flume-3.conf,用于接收 flume-1 的 event,同时产生 1 个 channel 和 1 个 sink,将数 据输送给本地目录:
注:输出的本地目录必须是已经存在的目录,如果该目录不存在,并不会创建新的目 录。
4) 执行测试:分别开启对应 flume-job(依次启动 flume-3,flume-2,flume-1),同时产生 文件变动并观察结果:
5)查看结果:
案例五:Flume 与 Flume 之间数据传递,多 Flume 汇总数据 到单 Flume
目标:flume-1 监控文件 hive.log,flume-2 监控某一个端口的数据流,flume-1 与 flume-2 将 数据发送给 flume-3,flume3 将最终数据写入到 HDFS。
1) 创建 flume-1.conf,用于监控 hive.log 文件,同时 sink 数据到 flume-3:
2) 创建 flume-2.conf,用于监控端口 44444 数据流,同时 sink 数据到 flume-3:
3) 创建 flume-3.conf,用于接收 flume-1 与 flume-2 发送过来的数据流,最终合并后 sink 到 HDFS:
4) 执行测试:分别开启对应 flume-job(依次启动 flume-3,flume-2,flume-1),同时产生 文件变动并观察结果:
测试时记得启动 hive 产生一些日志,同时使用 telnet 向 44444 端口发送内容: