flume介绍及安装

一、什么是flume

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

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

1.Flume 工作流程

        Source 采集数据并包装成Event,并将Event缓存再Channel中,Sink不断地从Channel 获取Event,并解决成数据,最终将数据写入存储或索引系统

 Agent
        Agent 是一个JVM进程,它以事件的形式将数据从源头送至目的。是 Flume 数据传输的基本单元

        Agent主要有三个部分组成:Source,Channel,Sink。

        Agent 的3个组件的设计思想,主要考虑的是:source 和 sink 之间解耦合,以及异步操作。

每一个agent相当于一个数据(被封装成Event对象)传递员,内部有3个核心组件:

Source:采集组件,用户跟数据源对接,以获取数据;它有各种各样的内置实现;

Sink:下沉组件,用于往下一级agent 传递数据或者向最终存储系统传递数据。

Channel : 传输通道组件,用于从source将数据传递到sink

Source
        Source 是负责接收数据到Flume Agent的组件,采集数据并包装成Event。Source组件可以处理各种类型、各种格式的日志数据,包括avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy

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

        **Sink是完全事务性的。**在从 Channel 批量删除数据之前,每个 Sink 用 Channel 启动一个事务。批量时间一旦成功写出到存储系统或下一个 Flume Agent,Sink 就利用Channel 提交事务。事务一旦被提交,该 Channel 从自己的内部缓存区删除事件。

        Sink 组件目的地包括hdfs、logger、avro、thrift、ipc、file、HBase、solr、自定义

Channel
        Channnel 是位于 Source 和 Sink 之间的缓冲区。因此,Channel 允许Source 和 Sink 运作在不同的速率上。Channel是线程安全的,可以同时处理几个Source的写入操作和几个Sink的读取操作

        Flume 自带两种Channel:

        Memory Channel是内存中的队列。Memory Channel在不需要关系数据丢失的情景下适用。如果需要关心数据丢失,那么Memory Channel就不应该使用,因为程序死亡、机器当即或者重启都会导致数据丢失

        File Channel 将所有事件写到磁盘。因此在程序关闭或机器宕机的情况下不会丢失数据

Event
        数据在channel中的封装形式。

        传输单元,Flume数据传输的基本单元,以Event的形式将数据从源头送至目的地。Event 由 Header 和Body 两部分组成,Header用来存放该event的一些属性,为K-V结构,Body 用来存放该条数据,形式为字节数组

 interceptor 拦截器
        拦截器工作在source 组件之后,source 产生的 event 会被出入拦截器根据需要进行拦截处理,而且,拦截器可以组成拦截器链!

        拦截器在flume中有一些内置的功能;

        用户也可以根据自己的数据处理需求,自己开发自定义拦截器,这也是Flume的一个可以用来自定义扩展的接口。

channel selector
        一个source可以对接多个channel ,则 event 在这 n 个channel 之间传递的策略,由配置的channel selector 决定;

        channel selector 有两种实现:replicating(复制),multiplexing(多路复用)

 sink processor
        如果sink 和 channel 是一对一关系,则不需要专门的sink processor;

如果要配置一个channel 对多个sink ,则需要将这多个sink配置成一个sink group (sink组);

        event 在一个组中的多个sink 间如何传递,则由所配置的sink processor l来决定;

原文链接:https://blog.csdn.net/weixin_45866849/article/details/125729411

        2.flume采集数据会丢失吗?

        根据 Flume 的架构原理,Flume 是不可能丢失数据的,其内部有完善的事务机制, Source 到 Channel 是事务性的,Channel 到 Sink 是事务性的,因此这两个环节不会出现数 据的丢失,唯一可能丢失数据的情况是 Channel 采用 memoryChannel,agent 宕机导致数据 丢失,或者 Channel 存储数据已满,导致 Source 不再写入,未写入的数据丢失。

Flume 不会丢失数据,但是有可能造成数据的重复,例如数据已经成功由 Sink 发出, 但是没有接收到响应,Sink 会再次发送数据,此时可能会导致数据的重复。

二、Flume的安装与配置

        搭建环境:

        基于flume190 +hadoop313+hbase235 +hive312 +jdk180 +sqoop147 +zeppelin +zk235

        下载解压安装包,这部分略。

        1.配置flume-env.sh

        打开到flume安装目录下的conf目录,对临时配置文件flume-env.sh.template拷贝为配置文件flume-env.sh

cp flume-env.sh.template flume-env.sh

        然后对flume-env.sh进行配置(修改22行和25行)  

vim flume-env.sh

        修改内容如下: 

export JAVA_HOME=/opt/soft/jdk180
export JAVA_OPTS="-Xms2000m -Xmx2000m -Dcom.sun.management.jmxremote"

        2.配置系统环境变量

        打开系统配置文件

vim /etc/profile

        增加内容如下

#SQOOP_HOME
export SQOOP_HOME=/opt/software/sqoop147
export PATH=$PATH:$SQOOP_HOME/bin

猜你喜欢

转载自blog.csdn.net/Alcaibur/article/details/129623984