Flume详解(包括flume框架,flume安装测试等内容)

CSDN话题挑战赛第2期
参赛话题:大数据学习成长记录


目录

一、引入

Flume是什么

Flume能干什么

Flume的特点

Flume的版本

Flume OG到Flume NG

Flume 的特性

二、Flume NG 详解

Flume 架构组成

三、Flume安装

准备工作

正式安装

配置文件

验证安装

四、Flume使用测试

单机测试

监控端口数据到控制台(netcat-memeory-logger)

测试

集群测试

参考资料


一、引入

Flume是什么

Flume(日志收集系统)是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。

Flume能干什么

  • 提供从固定目录下采集日志信息到目的地(HDFS,HBase,Kafka)能力。

  • 提供实时采集日志信息(taidir)到目的地的能力。

  • FLume支持级联(多个Flume对接起来),合并数据的能力。

  • Flume支持按照用户定制采集数据的能力。

总结起来就是实现了日志统一收集再放置于自定义目录的功能。

Flume的特点

  • 良好的扩展性: Flume 架构是完全分布式的,没有任何中心化组件,这使得它非常容易扩展。
  • 高度定制化:各个组件(比如 Source 、 Channel 和 Sink 等)是可插拔的,用户很容易根据需求进行定制。
  • 声明式动态化配置: Flume 提供了一套声明式配置语言,用户可根据需要动态配置一个基于 Flume 的数据流拓扑结构。
  • 语意路由:可根据用户的设置,将流式数据路由到不同的组件或存储系统中,这使得搭建一个支持异构的数据流变得非常容易。

Flume的版本

Flume OG到Flume NG

FLUM OG(初代):

  • FLUM OG 有三种角色的节点:代理节点(agent)、收集节点(collector)、主节点(master)。

  • agent 从各个数据源收集日志数据,将收集到的数据集中到 Collector,然后由收集节点汇总存入 HDFS。master 负责管理 agent,collector 的活动。

  • agent、collector 都称为 node,node 的角色根据配置的不同分为 logical node(逻辑节点)、physical node(物理节点)。

  • agent、collector 由 source、sink 组成,代表在当前节点数据是从 source 传送到 sink。

Flume NG 取消了集中管理配置的 Master 和 Zookeeper,变为一个纯粹的传输工具。Flume NG 另一个主要的不同点是读入数据和写出数据现在由不同的工作线程处理(称为Runner)。在 Flume OG 中,读入线程同样做写出工作(除了故障重试),如果写出慢的话(不是完全失败),它将阻塞 Flume 接收数据的能力。这种异步的设计使读入线程可以顺畅的工作而无需关注下游的任何问题。

FLUME NG(二代)

  • NG 只有一种角色的节点:代理节点(agent)。

  • 没有 collector、master 节点,这是核心组件最核心的变化。

  • 去除了 physical nodes、logical nodes 的概念和相关内容。

  • agent 节点的组成也发生了变化。Flume NG 的 agent 由 source、sink、Channel 组成。

flume ng 节点组成图:

 多 Agent 并联下的架构图:

Flume 的特性

flume 的数据流由事件(Event)贯穿始终。事件是 Flume 的基本数据单位,它携带日志数据(字节数组形式)并且携带有头信息,这些 Event 由 Agent 外部的 Source 生成,当 Source 捕获事件后会进行特定的格式化,然后 Source 会把事件推入(单个或多个) Channel 中。可以把 Channel 看作是一个缓冲区,它将保存事件直到 Sink 处理完该事件。

Sink 负责持久化日志或者把事件推向另一个 Source。

flume 具备高可靠性:

当节点出现故障时,日志能够被传送到其他节点上而不会丢失。Flume提供了三种级别的可靠性保障,从强到弱依次分别为:

  • end-to-end:收到数据agent首先将event写到磁盘上,当数据传送成功后,再删除;如果数据发送失败,可以重新发送。

  • Store on failure:这也是scribe采用的策略,当数据接收方crash崩溃时,将数据写到本地,待恢复后,继续发送。

  • Best effort:数据发送到接收方后,不会进行确认。

二、Flume NG 详解

Flume 架构组成

  • client:client生产数据,运行在一个独立的线程
  • Event:一个数据单元,消息头和消息体组成(Events可以是日志记录、 avro 对象等。)
  • Flow:Event从源头到目的地点的迁移的抽象。
  • Agent:是Flume运行的最小单位,是一个完整的数据收集工具,含有三个组件,分别是:
  • source、channel、sink。通过这些组件event可以从一个地方流向另一个地方

source:数据的输入方式,它是数据的收集端,负责将数据捕获后进行特殊的格式化,将数据封装到event里,然后将event推入channel中。Flume中内置了很多source支持avro、log4j,syslog和http。可以让应用程序可以直接和source打交道,如果内置source无法满足需求,flume还可以自定义source。

常用的自定义source如下:

  • Avro Source 支持Avro协议(实际上是Avro RPC),内置支持|
  • Thrift Source 支持Thrift协议,内置支持
  • Exec Source 基于Unix的command在标准输出上生产数据
  • JMS Source 从JMS系统(消息、主题)中读取数据
  • Spooling Directory Source 监控指定目录内数据变更
  • Twitter 1% firehose Source 通过API持续下载Twitter数据,试验性质
  • Netcat Source 监控某个端口,将流经端口的每一个文本行数据作为Event输入
  • Sequence Generator Source 序列生成器数据源,生产序列数据
  • Syslog Sources 读取syslog数据,产生Event,支持UDP和TCP两种协议
  • HTP Source 基于HTP POST或GET方式的数据源,支持JSON、BLOB表示形式
  • Legacy Sources 兼容老的Flume OG中Source(0.9.x版本)

channel:用来缓存从source传输过来的数据,并形成一个个event,等待sink来拿。它相当于一个缓存区,可以将事件暂存到内存中也可以持久化到磁盘上直到sink处理完该事件。

Channel类型

  • Memory Channel Event数据存储在内存中
  • JDBC Channel Event数据存储在持久化存储中,当前Flume Channel内置支持Derby
  • File Channel Event数据存储在磁盘文件中
  • Spillable Memory Channel Event数据存储在内存中和磁盘上,当内存队列满了,会持久化到磁盘文件
  • Pseudo Transaction Channel 测试用途
  • Custom Channel 自定义Channel实现

Sink:从Channel收集数据,运行在一个独立线程

用于把数据发送到目的地的组件目的地包括 hdfs、logger、avro、thrift、ipc、file、null、hbase、solr、自定义。

Sink类型

  • HDFS Sink :将数据传输到 hdfs 集群中
  • ogger Sink 将数据作为日志处理(根据 flume 中的设置的日志方式来显示)
  • Avro Sink :数据被转换成 Avro Event ,然后发送到指定的服务端口上。
  • File Roll Sink :数据发送到本地文件

interceptor:拦截器

当我们需要对数据进行过滤时,除了我们在 Source 、 Channel 和 Sink 进行代码修改之外, Flume为我们提供了拦截器,拦截器也是 chain 形式的,当我们为source指定好拦截器的时候,我们的拦截器会得到event,根据需求我们可以对event进行保留还是抛弃,被抛弃的event不会进入到channel中。

拦截器类型

  • Timestamp Interceptor 时间戳拦截器 在 header 里加入 key 为 timestamp , value 为当前时
  • Host Interceptor 主机名或者 ip 拦截器,在 header 里加入 ip 或者主机名
  • Static Interceptor 静态拦截器,是在 header 里加入固定的 key 和 value 

三、Flume安装

准备工作

下载flume安装包

地址:Flume 1.10.1 User Guide — Apache Flume

上传安装包到node001节点

正式安装

解压

再安装包目录执行:tar -zxvf apache-flume-1.10.1-bin.tar.gz -C /opt/

改名

mv /opt/apache-flume-1.10.1-bin/ /opt/flume-1.10.1

配置文件

环境配置

终端输入:vim /etc/profile

末行加入:

export FLUME_HOME=/opt/flume-1.10.1
export PATH=$PATH:$FLUME_HOME/bin

重新加载配置文件

终端输入:source /etc/profile

flume-env.sh配置文件

复制模板

终端输入:cp /opt/flume-1.10.1/conf/flume-env.sh.template /opt/flume-1.10.1/conf/flume-env.sh     #将/opt/flume-1.10.1/conf/下的flume-env.sh模板复制一份

修改配置文件

终端输入:vim /opt/flume-1.10.1/conf/flume-env.sh

末行加入:

export JAVA_HOME=/usr/java/jdk1.8.0_231-amd64/

验证安装

终端输入:flume-ng version

出现版本信息就表示安装成功了。

四、Flume使用测试

单机测试

创建flume配置文件目录

终端输入:mkdir -p /bdp/conf/flume

监控端口数据到控制台(netcat-memeory-logger)

创建配置文件:vim /bdp/conf/flume/example-netcat.conf

加入:

# example.conf: A single-node Flume configuration

# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# Describe/configure the source
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444

# 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

提示:Memory Chanel 配置

  • capacity:默认该通道中最大的可以存储的event数量是100,
  • trasactionCapacity:每次最大可以source中拿到或者送到sink中的event数量也是100
  • keep-alive: event添加到通道中或者移出的允许时间
  • byte:即event的字节量的限制,只包括eventbody

该配置来源于官网:

进入配置文件目录:cd /bdp/conf/flume/

使用该配置文件启动flume:flume-ng agent -n a1  -f example-netcat.conf -Dflume .root.logger=INF0, console

看到这块就表示启动成功了。

测试

下载telnet工作

再开一个shell终端输入:yum install telnet

进入44444端口:telnet localhost 44444

接下来在44444端口输入信息而在node001的终端都会打印出响应信息:

集群测试

实现的功能是:将node001flume.txt文件中的内容发送到node002并打印出来

将node001配置好的flume分发到node002和node003:

分发到node002:scp -r /opt/flume-1.10.1/ node002:/opt/

分发到node003:scp -r /opt/flume-1.10.1/ node003:/opt/

将profile文件分发到node002和node003:

分发到node002:scp -r /etc/profile node002:/etc/ profile

分发到node003:scp -r /etc/profile node003:/etc/ profile

重新加载配置文件:

ssh root@node002 "source /etc/profile"    # 重新加载node002 配置文件

ssh root@node003 "source /etc/profile"    # 重新加载node0023配置文件

创建flume配置文件(node002与node003需要先创建/bdp/conf/flume目录)

node001,node002,node003终端输入:vim /bdp/conf/flume/example-avro.conf

node001添加如下配置:

a1.sources = r1
a1.sinks = k1
a1.channels = c1
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /root/flume.txt
a1.sinks.k1.type = avro
a1.sinks.k1.hostname = node002
a1.sinks.k1.port = 45454
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1888
a1.channels.c1.transactionCapacity = 180
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

node002添加如下配置:

a2.sources = r1
a2.sinks = k1
a2.channels = c1
a2.sources.r1.type = avro
a2.sources.r1.bind = node002
a2.sources.r1.port = 45454
a2.sinks.k1.type = logger
a2.channels.c1.type = memory
a2.channels.c1.capacity =1000
a2.channels.c1.transactionCapacity = 108
a2.sources.r1.channels = c1
a2.sinks.k1.channel = c1

在node001创建一个flume文件:vim flume.txt    # 然后随便在这个文件中写点什么东西

aaaaa
bbbbbbbbbb
ddddddddddd
cccccccccc
aaaaaaaaa
gggggggggg
hhhhhhhhhh

测试

两个节点都进入配置文件目录:cd /bdp/conf/flume/

先启动node002的flume:

node002:flume-ng agent -n a2 -c /bdp/conf/flume/ -f example-avro.conf -Dflume.root.logger=INF0,consc

最后启动node001的flume:

flume-ng agent -n a1 -f example-avro.conf

可以看到node002已经打印出来了node001flume.txt中的内容

全文结束。

参考资料

flume百度百科

Flume 简单理解及使用实例

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值