2、Flume部署及面试专题
1、Flume部署
1.1 简介
Flume是一个可靠、高可用的分布式海量日志采集、聚合和传输的系统。支持在日志系统中定制各类数据发送方,用于收集数据;同时Flume提供对数据进行简单处理,并写到各种数据接受方(比如文本、HDFS、Kafka、Hbase等)的能力 。
Flume的数据流由事件(Event)贯穿始终。事件是Flume的基本数据单位,它携带日志数据(字节数组形式)并且携带有头信息,这些Event由Agent外部的Source生成,当Source捕获事件后会进行特定的格式化,然后Source会把事件推入(单个或多个)Channel中。你可以把Channel看作是一个缓冲区,它将保存事件直到Sink处理完该事件。
1.2 核心组件/概念
Source类型:
1、Avro Source:
Avro端口监听并接收来自外部的Avro客户流的事件。当内置Avro去Sinks另一个配对Flume代理,它就可以创建分层采集的拓扑结构。
2、Exec Source:
ExecSource的配置就是设定一个Unix(linux)命令,然后通过这个命令不断输出数据。如果进程退出,Exec Source也一起退出,不会产生进一步的数据。
3、Spooling Directory Source:
Spooling Directory Source监测配置的目录下新增的文件,并将文件中的数据读取出来。其中,Spool Source有2个注意地方,第一个是拷贝到spool目录下的文件不可以再打开编辑,第二个是spool目录下不可包含相应的子目录。这个主要用途作为对日志的准实时监控。
4、Taildir Source:
可以实时监控一个目录下文件的变化,并实时读取新增数据,记录断点,保证重启 Agent 后数据不丢失或被重复传输。
Channel类型
1、Memory Channel
使用内存作为数据的存储。
2、File Channel
使用文件作为数据的存储。
3、Spillable Memory Channel
使用内存作为channel超过了阀值就存在文件中。
Sink类型
1、HDFS Sink
该sink把events写进Hadoop分布式文件系统(HDFS)。它目前支持创建文本和序列文件。它支持在两种文件类型压缩。文件可以基于数据的经过时间或者大小或者事件的数量周期性地滚动。它还通过属性(如时间戳或发生事件的机器)把数据划分为桶或区。
该sink streams将包含分割文本或者JSON数据的events直接传送到Hive表或分区中。使用Hive事务写events。当一系列events提交到Hive时,它们马上可以被Hive查询到。
Flume events发送到sink,转换为Avro events,并发送到配置好的hostname/port。从配置好的channel按照配置好的批量大小批量获取events。
当接收到channel时丢弃所有events。
Flume Sink实现可以导出数据到一个Kafka topic。
1.3 部署步骤
1、上传安装包
2、解压
tar -zxvf apache-flume-1.8.0-bin.tar.gz -C /home/
3、修改配置文件
修改conf/
4、创建data文件夹读取数据
5、使用xhdatamovefile.sh 脚本分发数据
启动命令:
cd /home/flume1.8/conf
nohup ../bin/flume-ng agent -n xh -c ./ -f xhflume.conf -Dflume.root.logger=INFO,console 2>&1 &