一 Flume
组成
1️⃣ 组成部分
1.Source
2.Channel
3.Sink
4.Put
事务
5.Take
事务2️⃣ 常用
Source
Taildir Source
:断点续传、多目录。Flume1.6
以前需要自己自定义Source
记录每次读取文件位置,实现断点续传3️⃣ 常用
Channel
File Channel
:数据存储在磁盘,宕机数据可以保存。但是传输速率慢。适合对数据传输可靠性要求高的场景,比如,金融行业;
Memory Channel
:数据存储在内存中,宕机数据丢失。传输速率快。适合对数据传输可靠性要求不高的场景,比如,普通的日志数据;
Kafka Channel
:减少了Flume
的Sink
阶段,提高了传输效率;4️⃣事物详解
Source
到Channel
是Put
事务;
Channel
到Sink
是Take
事务;
二 Flume
拦截器
1️⃣拦截器注意事项
项目中自定义了 :ETL
拦截器和区分类型拦截器。
采用两个拦截器的优缺点:
优点 : 模块化开发和可移植性;
缺点,性能会低一些2️⃣自定义拦截器步骤
a)实现Interceptor
b)重写四个方法
-initialize
: 初始化;
-public Event intercept(Event event)
: 处理单个Event
;
-public List<Event> intercept(List<Event> events)
: 处理多个Event
,在这个方法中调用Event intercept(Event event)
;
-close
: 方法;
c)静态内部类,实现Interceptor.Builder
三 Flume Channel
选择器
四 Flume
监听器
Ganglia
: 查看写入和消费的数量是否一致;
五 Flume
采集数据会丢失吗?
1️⃣不会丢失;
2️⃣Channel
可以将数据存储在File
中,数据传输自身有事务(Put
事物和Task
事物).
六 Flume
内存
1️⃣ 开发中在
flume-env.sh
中设置JVM heap
为4G
或更高,部署在单独的服务器上(4
核8
线程16G
内存);
2️⃣-Xmx
与-Xms
最好设置一致,减少内存抖动带来的性能影响,如果设置不一致容易导致频繁fullgc
;
七 FileChannel
优化
1️⃣ 通过配置
dataDirs
指向多个路径,每个路径对应不同的硬盘,增大Flume
吞吐量;
2️⃣checkpointDir
和backupCheckpointDir
也尽量配置在不同硬盘对应的目录中,保证checkpoint
坏掉后,可以快速使用backupCheckpointDir
恢复数据;
八 HDFS Sink
小文件处理
1️⃣
HDFS
存入大量小文件,有什么影响?
1. 元数据层面:每个小文件都有一份元数据,其中包括文件路径,文件名,所有者,所属组,权限,创建时间等,这些信息都保存在Namenode
内存中。所以小文件过多,会占用Namenode
服务器大量内存,影响Namenode
性能和使用寿命;
2. 计算层面:默认情况下MR
会对每个小文件启用一个Map
任务计算,非常影响计算性能,同时也影响磁盘寻址时间;2️⃣
HDFS
小文件处理
1.hdfs.rollSize
= 134217728 : 文件在达到128M
时滚动生成一个正式文件;
2.hdfs.roundValue
= 10,hdfs.roundUnit
= second : 文件创建超过10
秒时会滚动生成正式文件;
3.hdfs.rollCount
= 0;
4.hdfs.rollSize
和hdfs.roundValue
: 这两个参数一次只会执行一个,哪个先触发就执行哪个;