大数据技术之Flume

第1章Flume概述

1.1 Flume定义

Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。

Flume基于流式架构,灵活简单。

Flume 最主要的作用就是,实时读取服务器本地磁盘的数据,将数据写入到HDFS

1.2 Flume基础架构

Flume组成架构如下图所示。

1.2.1 Agent

1. Agent:Flume的部署单元,本质是一个JVM进程,Agent内部是以事件的形式将数据从源头送至目的。

2. 组成:Agent主要有3个部分组成,SourceChannelSink

1.2.2 Source

1. Source:是负责接收数据到Flume Agent的组件。

2. 特点:Source组件可以处理各种类型、各种格式的日志数据,

3. Source组件类型:

avro:本质是RPC框架,支持跨语言、跨平台的数据传输,avro Source在flume中多用于Agent的连接

netcat:本质是Linux下的端口类工具,netcat Source在Flume中用于采集端口传输的数据

exec:支持执行命令的,并将命令执行后的标准输出作为数据采集,多用于采集一个可追加文件

spooling directory:支持对一个目录进行监听,采集目录中一个或多个新生成的文件数据

taildir:支持对多个目录进行监听,采集一个或多个目录下的一个或多个可追加文件,支持断点续传

除此之外还有:thrift、jms、sequence generator、syslog、http、自定义Source。

1.2.3 Sink

1. Sink:负责发送数据到外部系统的Flume Agent的组件。

2. 特点:Sink组件不断地轮询Channel中的事件且批量地移除它们,并将这些事件批量的事务的写入到存储或索引系统、或者被发送到另一个Flume Agent。

3. Sink组件类型:

logger:logger Sink组件则是将数据写到成Flume框架的运行日志中,配合运行参数-Dflume.root.logger=INFO,console可以将Flume运行日志(其中就包含了采集的数据)输出到控制台,多用于测试环境

hdfs:hdfs Sink组件是负责将数据传输到HDFS分布式文件系统中。

avro:avro Sink组件配合avro Source组件可以实现Agent的连接。

file:file Sink组件是将采集到的数据直接输出到本地文件系统中,即linux的磁盘上。

除此之外还有:thrift、ipc、HBase、solr、自定义Sink。

1.2.4 Channel

1. Channel:负责暂存数据的,是位于Source和Sink组件之间的缓冲区

2. 特点:

由于Channel组件的存在,使得Source和Sink组件可以运作在不同的速率上。

Channel是线程安全的,可以同时处理几个Source的写入操作和几个Sink的读取操作。

3. Flume自带两种Channel:

Memory Channel:基于内存的队列存储事件,适用于对数据安全性要求不高的场景。 快,不安全

File Channel:基于磁盘存储事件,宕机数据不丢失,适用于对数据安全敏感度高的场景。 慢,安全

1.2.5 Event

1. Event:agent中的事件,Flume数据传输的基本单元,以Event的形式将数据从源头送至目的地

2. 特点:Event由HeaderBody两部分组成,

Header:用来存放该event的一些属性,为K-V结构

Body:用来存放该条数据,形式为字节数组


第2章Flume入门

2.1 Flume安装部署

2.1.1 相关地址

1. Flume官网地址:http://flume.apache.org/

2. 文档查看地址:http://flume.apache.org/FlumeUserGuide.html

3. 下载地址:http://archive.apache.org/dist/flume/

2.1.2 安装

# 1. 将apache-flume-1.9.0-bin.tar.gz上传到linux的/opt/software目录下
$ ll
……
-rw-rw-r--.1 atguigu atguigu  67938106 2月  12 10:09 apache-flume-1.9.0-bin.tar.gz
# ------------------------------------------------------------------------------
# 2. 解压apache-flume-1.9.0-bin.tar.gz到/opt/module/目录下
$ tar -zxf /opt/software/apache-flume-1.9.0-bin.tar.gz-C /opt/module/ 

# 3. 修改apache-flume-1.9.0-bin的名称为flume
$ mv /opt/module/apache-flume-1.9.0-bin /opt/module/flume

# 4. 将lib文件夹下的guava-11.0.2.jar删除以兼容Hadoop 3.1.3
$ rm /opt/module/flume/lib/guava-11.0.2.ja

第3章Flume进阶

3.1 Flume事务

1. 在Flume中一共有两个事务

·Put事务:在Source组件和Channel组件之间,保证Source组件到Channel组件之间数据传递的可靠性。

·take事务:在Channel组件和Sink组件之间,保证channel组件到Sink组件之间数据传输的可靠性。

2. Put事务流程

source组件采集外部数据到agent内部,并且将数据包装为事件

source组件开始将事件传输到Channel组件中

首先,会开启事务,在事务内部,通过doPut方法将一批数据放入到putlist中存储。

之后,调用doCommit方法,把putList中的所有Event放到Channel中,成功之后就清空putList

1. putList在像channel中发送数据前会先检查channel中的容量是否放得下,放不下一个都不会放,调用doRollback

2. 调用doRollback方法后,doRollback方法会进行两步操作:

· 将putList清空

· 抛出ChannelException异常。

3. source组件会捕捉到doRollback抛出的异常后,source就将刚才的一批数据重新采集,然后就开启一个新的事务。

4. 数据批的大小取决于Source组件的配置参数batch size的值

5. putList的大小取决于Channel组件的配置参数transactionCapacity的值(capacity参数是指Channel的容量)

3. Take事务流程

Sink组件不断的轮询Channel,当其中有新的事件到达时,开启take事务

take事务开启后,会调用doTake方法将Channel组件中的Event剪切到takeList中。

当takeList中存放了batch size数量的Event之后,就会调用doCommit方法

doCommit方法中,首先会将数据写出到外部系统,成功后就会清空takeList。

当事务失败时,就会调用doRollback方法来进行回滚,就是将takeList中的数据原封不动的还给channel。

注意当take事务失败时,可能向外部写了一半的数据了,但是回滚时,是将tabkeList中的全部数返给channel,当开启新的take事务时,又会将这批数据再次写出到外部,就造成了数据重复。

3.2 Flume Agent内部原理

1. 重要组件:

组件名称

概述

组件包含类型

特点

ChannelSelector

选出Event将要发到那个channel

Replication Channel Selector

复制,默认选项

Multiplexing Channel Seletctor

多路复用

SinkProcessor

通过配置不同类型的SinkProcess实现不同的功能

DefaultSinkProcessor

单个Sink,默认

LoadBalancingSinkProcessor

负载均衡

FailoverSinkProcessor

故障转移

2. 执行流程

Source组件采集外部数据到agent内部,并包装为Event

然后,将事件发送到ChannelProcessor中,

· 通过拦截器链中每个拦截器的拦截过滤,符合要求的Event会返回到ChannelProcessor中

· 在通过ChannelSelector,根据不同的选择器来决定Event去往哪个Channel,然后返回到ChannelProcessor

开启Put事务,将批量的Event发送到Channel中

根据SinkProcessor组件配置的类型不同,实现相应的功能(负载均衡或故障转移),最终都会且同一时刻只能有一个Sink去拉取数据。

Sink组件不断的轮询Channel,当有新的Event到达Channel时,向外部系统写出。


第4章Flume数据流监控

4.1 Ganglia介绍

1. Ganglia由gmond、gmetad和gweb三部分组成。

(1)gmond(Ganglia Monitoring Daemon):

是一种轻量级服务,安装在每台需要收集指标数据的节点主机上。

使用gmond,你可以很容易收集很多系统指标数据,如CPU、内存、磁盘、网络和活跃进程的数据等。

(2)gmetad(Ganglia Meta Daemon):

整合所有信息,并将其以RRD格式存储至磁盘的服务。

(3)gweb(Ganglia Web)Ganglia可视化工具:

gweb是一种利用浏览器显示gmetad所存储数据的PHP前端。

在Web界面中以图表方式展现集群的运行状态下收集的多种不同指标数据。

4.2 Ganglia安装与部署

之后更新


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值