Flume-部署及使用案例

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 端口发送内容:

猜你喜欢

转载自blog.csdn.net/liberty12345678/article/details/85002268