体系结构

Event英文直译是事件,但是在Flume中表示数据传输的一个最小单位。参照下图可以看得出Agent就是Flume的一个部署实例, 一个完整的Agent中包含了三个组件Source、Channel和Sink,Source是指数据的来源和方式,Channel是一个数据的缓冲池,Sink定义了数据输出的方式和目的地。

Agent中的source和sink与channel存取Event是异步的。

扇入(多对一)和扇出(一对多)的概念,就是说Agent可以将数据流发到多个下级Agent,也可以从多个Agent发到一个Agent中。

flume配置多source和多sink_HDFS

flume配置多source和多sink_数据_02

一个avro source需要有个hostname(或者ip地址)一个端口号来接收数据。

一个内存channel有最大队列长度的属性(capacity)

文件系统的URI地址创建文件,文件访问频率(hdfs.rollInterval)等等。

所有的这些组件属性都需要在Flume配置文件中设置。

基本概念

flume:deliver data from applications to Apache Hadoop's HDFS ;a simple and flexible architecture based on streaming data flows. It is robust and fault tolerant with tunable reliability mechanisms and many failover and recovery mechanisms. It uses a simple extensible data model that allows for online analytic applications。

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

1. 什么是Flume

(1) 海量数据采集,处理,集合

(2) 是分布式,高可用,高性能

2. Flume可靠性:(面试会问)

(1) end to end:一定在本地保存(最高)

(2) Store on failure:不一定在本地保存(使用频率比较高的策略)

(3) Besteffort:一定不在本地保存(最低)

3. Flume的核心结构:(面试会问)

(1) Source:负责接受,读取,监听数据源

(2) Sink:负责接受通道输送来的数据,并且将数据交到指定的存储介质当中

(3) Channel:负责对数据进行输送

(4) Events:保存数据的最基本单元

4. Flume能达到的设计目标

(1) 每一个组件都可以有若干种选择

(2) 无论是输入还是输出,同样有若干种选择

(3) 非常灵活,没有固定的格式,可以任意搭配。

5. Flume的架构模式(面试会问)

(1) 单一流程

(2) 多代理流程

(3) 流的合并

(4) 多路复用流

(5) 负载平衡

部署应用

基于Hadoop寄生,因此将:压缩包直接解压移动到hadoopserver下即可。

配置环境变量:/etc/profile  :

export FLUME_HOME=/path……/apache-flume-1.6.0-bin

export FLUME_CONF_DIR=$FLUME_HOME/conf

export PATH=.:$PATH:$FLUME_HOME/bin

===========flume命令解析

flume配置多source和多sink_ci_03

agen:flume客户端

avro-client:Avro Flme客户端

====agent \ avro 客户端命令

flume配置多source和多sink_数据_04

模板配置:hello world

flume配置多source和多sink_ci_05

========文件配置示例
job01.sources = source01

job01.sinks = sink01

job01.channels = chan01job01.sources.source01.type = avro

job01.sources.source01.channels = chan01

job01.sources.source01.bind = 0.0.0.0

job01.sources.source01.port = 4141job01.sinks.sink01.type = logger
job01.channels.chan01.type = memory

job01.channels.chan01.capacity = 1000

job01.channels.chan01.transactionCapacity = 100job01.sources.source01.channels = chan01

job01.sinks.sink01.channel = chan01=======启动job
flume-ng agent -c conf -f ./avro.conf -n job01 -D flume.root.logger=INFO,console
=====测试
flume-ng avro-client -c . -H c1 -p 4141 -F log.log



部署碰到问题:

yum install -y nc   //-bash: nc: command not found问题

test...