type
status
date
slug
summary
tags
category
icon
password
第一章 Flume概述
查看端口占用情况
查看java_home 路径
1.1Flume定义
Flume最主要的作用就是,实时读取服务器本地磁盘的数据,将数据写入HDFS中
1.2基础架构
Source:来源Channel:管道,缓冲器的作用Sink:每隔指定时长生成文件保存这段时间内收集到的日志信息
1.2.1 Agent
Agent是一个JVM进程,它以事件的形式将数据从源头送至目的,是Flume数据传输的基本单元。
Agent主要有3个部分组成,Source、Channel、Sink。
1.2.2 Source
Source是负责接收数据到Flume
Agent的组件。Source组件可以处理各种类型、各种格式的日志数据,包括avro、thrift、exec、jms、spooling
directory、netcat、sequence generator、syslog、http、legacy。
1.2.3 Channel
Channel是位于Source和Sink之间的缓冲区。因此,Channel允许Source和Sink运作在不同的速率上。Channel是线程安全的,可以同时处理几个Source的写入操作和几个Sink的读取操作。
Flume自带两种Channel:Memory Channel和File Channel。
Memory Channel是内存中的队列。Memory
Channel在不需要关心数据丢失的情景下适用。如果需要关心数据丢失,那么Memory Channel就不应该使用,因为程序死亡、机器宕机或者重启都会导致数据丢失。
File Channel将所有事件写到磁盘。因此在程序关闭或机器宕机的情况下不会丢失数据。
1.2.4 Sink
Sink不断地轮询Channel中的事件且批量地移除它们,并将这些事件批量写入到存储或索引系统、或者被发送到另一个Flume
Agent。
Sink是完全事务性的。在从Channel批量删除数据之前,每个Sink用Channel启动一个事务。批量事件一旦成功写出到存储系统或下一个Flume Agent,Sink就利用Channel提交事务。事务一旦被提交,该Channel从自己的内部缓冲区删除事件。
Sink组件目的地包括hdfs、logger、avro、thrift、ipc、file、null、HBase、solr、自定义。
1.2.5 Event
传输单元,Flume数据传输的基本单元,以事件的形式将数据从源头送至目的地。
第 2 章 Flume 快速入门
2.1 Flume 安装部署
2.1.1 安装地址
1) Flume 官网地址2)文档查看地址3)下载地址
2.1.2 安装部署
1)将 apache-flume-1.7.0-bin.tar.gz 上传到 linux 的/opt/software 目录下2)解压 apache-flume-1.7.0-bin.tar.gz 到/opt/module/目录下
3)修改 apache-flume-1.7.0-bin 的名称为 flume
4)将 flume/conf 下的 flume-env.sh.template 文件修改为 flume-env.sh,并配置 flumeenv.sh 文件
2.2 Flume 入门案例
2.2.1 监控端口数据官方案例
1)案例需求:使用 Flume 监听一个端口,收集该端口数据,并打印到控制台。2)需求分析:
3)实现步骤:1.安装 netcat 工具
2.判断 44444 端口是否被占用
3.创建 Flume Agent 配置文件 flume-netcat-logger.conf在 flume 目录下创建 job 文件夹并进入 job 文件夹。
在 job 文件夹下创建 Flume Agent 配置文件 flume-netcat-logger.conf。
在 flume-netcat-logger.conf 文件中添加如下内容。
- 先开启 flume 监听端口 第一种写法:
[atguigu@hadoop102 flume] bin/flume-ng agent --conf conf/ --name a1 --conf-file job/flume-netcat-logger.conf -Dflume.root.logger=INFO,console
第二种写法:
参数说明:--conf/-c:表示配置文件存储在 conf/目录--name/-n:表示给 agent 起名为 a1--conf-file/-f:flume 本次启动读取的配置文件是在 job 文件夹下的 flume-telnet.conf文件。-Dflume.root.logger=INFO,console :-D 表示 flume 运行时动态修改 flume.root.logger参数属性值,并将控制台日志打印级别设置为 INFO 级别。日志级别包括:log、info、warn、error。
5.使用 netcat 工具向本机的 44444 端口发送内容
6.在 Flume 监听页面观察接收数据情况
2.2.2 实时监控单个追加文件
1)案例需求:实时监控 Hive 日志,并上传到 HDFS 中2)需求分析:
3)实现步骤:1.Flume 要想将数据输出到 HDFS,须持有 Hadoop 相关 jar 包将
拷贝到/opt/module/flume/lib 文件夹下。2.创建 flume-file-hdfs.conf 文件创建文件[atguigu@hadoop102 job]$ vim flume-file-hdfs.conf注:要想读取 Linux 系统中的文件,就得按照 Linux 命令的规则执行命令。由于 Hive 日志在 Linux 系统中所以读取文件的类型选择:exec 即 execute 执行的意思。表示执行 Linux命令来读取文件。添加如下内容
3.运行 Flume[atguigu@hadoop102 flume]$ bin/flume-ng agent --conf conf/ --namea2 --conf-file job/flume-file-hdfs.conf4.开启 Hadoop 和 Hive 并操作 Hive 产生日志
2.2.3 实时监控目录下多个新文件
1)案例需求:使用 Flume 监听整个目录的文件,并上传至 HDFS2)需求分析:
实现步骤:1.创建配置文件 flume-dir-hdfs.conf创建一个文件[atguigu@hadoop102 job]$ vim dir-flume-hdfs.conf
添加如下内容
2.启动监控文件夹命令
说明:在使用 Spooling Directory Source 时不要在监控目录中创建并持续修改文件上传完成的文件会以.COMPLETED 结尾被监控文件夹每 500 毫秒扫描一次文件变动
- 向 upload 文件夹中添加文件 在/opt/module/flume 目录下创建 upload 文件夹
- [atguigu@hadoop102 flume]$ mkdir upload
向 upload 文件夹中添加文件
cp 666.txt upload/
2.2.4 实时监控目录下的多个追加文件
Exec source 适用于监控一个实时追加的文件,但不能保证数据不丢失;Spooldir Source 能够保证数据不丢失,且能够实现断点续传,但延迟较高,不能实时监控;而 TaildirSource 既能够实现断点续传,又可以保证数据不丢失,还能够进行实时监控。1)案例需求:使用 Flume 监听整个目录的实时追加文件,并上传至 HDFS2)需求分析:
实现步骤:1.创建配置文件 files-flume-logger.conf
添加如下内容:上传到hdfs必要的配置
2.启动监控文件夹命令
3.向 files 文件夹中追加内容
4.查看 HDFS 上的数据
Taildir 说明:
Taildir Source 维护了一个 json 格式的 position File,其会定期的往 position File
中更新每个文件读取到的最新的位置,因此能够实现断点续传。Position File 的格式如下:
注:Linux 中储存文件元数据的区域就叫做 inode,每个 inode 都有一个号码,操作系统
用 inode 号码来识别不同的文件,Unix/Linux 系统内部不使用文件名,而使用 inode 号码来识别文件。
第 3 章 Flume 进阶
3.1 Flume 事务
Put事务主动从Source中拉取数据,Take事务主动从Channel中拉取数据,Channel是被动的存储数据
3.2 Flume Agent 内部原理
重要组件:1)ChannelSelectorChannelSelector 的作用就是选出 Event 将要被发往哪个 Channel。其共有两种类型,分别是 Replicating(复制)和 Multiplexing(多路复用)ReplicatingSelector 会将同一个 Event 发往所有的 Channel,Multiplexing 会根据相应的原则,将不同的 Event 发往不同的 Channel。
2)SinkProcessorSinkProcessor 共 有 三 种 类 型 , 分 别 是 DefaultSinkProcessor 、LoadBalancingSinkProcessor 和 FailoverSinkProcessorDefaultSinkProcessor 对 应 的 是 单 个 的 Sink , LoadBalancingSinkProcessor 和FailoverSinkProcessor 对应的是 Sink Group,LoadBalancingSinkProcessor 可以实现负载均衡的功能,FailoverSinkProcessor 可以实现故障转移的功能。
3.3 Flume 拓扑结构
3.3.1 简单串联
这种模式是将多个 flume 顺序连接起来了,从最初的 source 开始到最终 sink 传送的目的存储系统。此模式不建议桥接过多的 flume 数量,flume 数量过多不仅会影响传输速率,而且一旦传输过程中某个节点 flume 宕机,会影响整个传输系统。
3.3.2 复制和多路复用
Flume 支持将事件流向一个或者多个目的地。这种模式可以将相同数据复制到多个channel 中,或者将不同数据分发到不同的 channel 中,sink 可以选择传送到不同的目的地。
3.3.3 负载均衡和故障转移
Flume支持使用将多个sink逻辑上分到一个sink组,sink组配合不同的SinkProcessor可以实现负载均衡和错误恢复的功能。
3.3.4 聚合
这种模式是我们最常见的,也非常实用,日常 web 应用通常分布在上百个服务器,大者甚至上千个、上万个服务器。产生的日志,处理起来也非常麻烦。用 flume 的这种组合方式能很好的解决这一问题,每台服务器部署一个 flume 采集日志,传送到一个集中收集日志的flume,再由此 flume 上传到 hdfs、hive、hbase 等,进行日志分析。
3.4 Flume 企业开发案例
3.4.1 复制和多路复用
1)案例需求使用 Flume-1 监控文件变动,Flume-1 将变动内容传递给 Flume-2,Flume-2 负责存储到 HDFS。同时 Flume-1 将变动内容传递给 Flume-3,Flume-3 负责输出到 Local FileSystem。2)需求分析:
3)实现步骤:0.准备工作在/opt/module/flume/job 目录下创建 group1 文件夹
在/opt/module/datas/目录下创建 flume3 文件夹
1.创建 flume-file-flume.conf配置 1 个接收日志文件的 source 和两个 channel、两个 sink,分别输送给 flume-flume-hdfs 和 flume-flume-dir。编辑配置文件
添加如下内容
2.创建 flume-flume-hdfs.conf配置上级 Flume 输出的 Source,输出是到 HDFS 的 Sink。编辑配置文件
添加如下内容
3.创建 flume-flume-dir.conf配置上级 Flume 输出的 Source,输出是到本地目录的 Sink。编辑配置文件
添加如下内容
提示:输出的本地目录必须是已经存在的目录,如果该目录不存在,并不会创建新的目录4.执行配置文件分别启动对应的 flume 进程:flume-flume-dir,flume-flume-hdfs,flume-file-flume
5.向日志文件中添加数据
6.检查 HDFS 上数据
7.检查/opt/module/datas/flume3 目录中数据
3.4.2 负载均衡和故障转移
1)案例需求使用 Flume1 监控一个端口,其 sink 组中的 sink 分别对接 Flume2 和 Flume3,采用FailoverSinkProcessor,实现故障转移的功能。2)需求分析
3)实现步骤0.准备工作在/opt/module/flume/job 目录下创建 group2 文件夹
1.创建 flume1.conf配置 1 个 netcat source 和 1 个 channel、1 个 sink group(2 个 sink),分别输送给 flumeflume-console1 和 flume-flume-console2。
添加如下内容
2.创建 flume2.conf配置上级 Flume 输出的 Source,输出是到本地控制台。编辑配置文件
添加如下内容
3.创建 flume3.conf配置上级 Flume 输出的 Source,输出是到本地控制台。编辑配置文件
添加如下内容
4.执行配置文件分别开启对应配置文件:flume1,flume2,flume3。
5.使用 netcat 工具向本机的 44444 端口发送内容
6.查看 Flume2 及 Flume3 的控制台打印日志发送的内容优先到flume3的控制台上输出7.将 Flume2 kill,观察 Flume3 的控制台打印情况。发送的内容在flume3上输出注:使用 jps -ml 查看 Flume 进程。
3.4.2.1 负载均衡
3)实现步骤0.准备工作在/opt/module/flume/job 目录下创建 group3 文件夹
1.修改flume1.conf 文件的#Sink Sroup
修改如下:
backoff 退避算法selector = random 随机分配到sink
3.4.3 聚合
1)案例需求hadoop102 上的 Flume-1 监控文件/opt/module/data/group.log,hadoop103 上的 Flume-2 监控某一个端口的数据流,Flume-1 与 Flume-2 将数据发送给 hadoop104 上的 Flume-3,Flume-3 将最终数据打印到控制台。2)需求分析
3)实现步骤:0.准备工作分发 Flume
在 hadoop102、hadoop103 以及 hadoop104 的/opt/module/flume/job目录下创建一个 group4文件夹
1.创建 flume2.conf配置 Source 用于监控 hive.log 文件,配置 Sink 输出数据到下一级 Flume。在 hadoop102 上编辑配置文件
添加内容如下
2.创建 flume3.conf配置 Source 监控端口 44444 数据流,配置 Sink 数据到下一级 Flume:在 hadoop103 上编辑配置文件
添加内容如下
3.创建 flume4.conf配置 source 用于接收 flume1 与 flume2 发送过来的数据流,最终合并后 sink 到控制台。在 hadoop104 上编辑配置文件
添加内容如下
4.执行配置文件分别开启对应配置文件:flume4.conf,flume3.conf,flume2.conf
5.在 hadoop102 上向/opt/module/data 目录下的 flume.log 追加内容
6.在 hadoop103 上向 44444 端口发送数据
7.检查 hadoop104 上数据
注意:a4.sinks.k1.channel = c1处channel不能加s
- 作者:y
- 链接:https://tangly1024.com/article/d34ff970-04f7-49d3-846e-84b786fb3ec3
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。