新篇章:大数据——Flume
体系结构
Event英文直译是事件,但是在Flume中表示数据传输的一个最小单位。参照下图可以看得出Agent就是Flume的一个部署实例, 一个完整的Agent中包含了三个组件Source、Channel和Sink,Source是指数据的来源和方式,Channel是一个数据的缓冲池,Sink定义了数据输出的方式和目的地。
Agent中的source和sink与channel存取Event是异步的。
扇入(多对一)和扇出(一对多)的概念,就是说Agent可以将数据流发到多个下级Agent,也可以从多个Agent发到一个Agent中。
一个avro source需要有个hostname(或者ip地址)一个端口号来接收数据。
一个内存channel有最大队列长度的属性(capacity)
一个HDFS sink需要知晓文件系统的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命令解析
agen:flume客户端
avro-client:Avro Flme客户端
====agent \ avro 客户端命令
模板配置:hello world
========文件配置示例
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问题