Flume常见面试题

一、Flume 组成、Put 事务、Take 事务

Taildir Source:断点续传、多目录。Flume1.6 以前需要自己自定义 Source 记录每次读取文件位置,实现断点续传。

File Channel:数据存储在磁盘,宕机数据可以保存。但是传输速率慢。适合对数据传输可靠性要求高的场景,比如,金融行业。

Memory Channel:数据存储在内存中,宕机数据丢失。传输速率快。适合对数据传输可靠性要求不高的场景,比如,普通的日志数据。

Kafka Channel:减少了 Flume 的 Sink 阶段,提高了传输效率。

Source 到 Channel 是 Put 事务

Channel 到 Sink 是 Take 事务

二、自定义拦截器步骤

1、实现 Interceptor

2、重写四个方法
(1) initialize 初始化
(2) public Event intercept(Event evrnt) 处理单个 Event
(3) public List intercept(List events) 处理多个 Event,在这个
方法中调用 Event intercept(Event event)
(4) close 方法

3、静态内部类,实现 Interceptor.Builder

三、Flume Channel 选择器

在这里插入图片描述

四、Flume 监控器

Ganglia

五、Flume 内存

开发中在 flume-env.sh 中设置 JVM heap 为 4G 或更高,部署在单独的服务器上(4 核 8 线程 16G 内存),-Xmx 与 -Xms 最好设置一致,减少内存抖动带来的性能影响,如果设置不一致容易导致频繁 fullgc。

六、FileChannel 优化

通过配置 dataDirs 指向多个路径,每个路径对应不同的硬盘,增大 Flume 吞吐量。 checkpointDir 和 backupCheckpointDir 也尽量配置在不同硬盘对应的目录中,保证 checkpoint 坏掉后,可以快速使用 backupCheckpointDir 恢复数据。

七、HDFS Sink 小文件处理

1、HDFS 存入大量小文件,有什么影响?
元数据层面:每个小文件都有一份元数据,其中包括文件路径,文件名,所有者,所属组,权限,创建时间等,这些信息都保存在 Namenode 内存中。所以小文件过多,会占用 Namenode 服务器大量内存,影响 Namenode 性能和使用寿命。

计算层面:默认情况下 MR 会对每个小文件启用一个 Map 任务计算,非常影响计算性
能。同时也影响磁盘寻址时间。

2、HDFS 小文件处理
官方默认的这三个参数配置写入HDFS 后会产生小文件,hdfs.rollInterval、hdfs.rollSize、
hdfs.rollCount
基于以上 hdfs.rollInterval=3600 , hdfs.rollSize=134217728 , hdfs.rollCount =0 ,
hdfs.roundValue=3600,hdfs.roundUnit= second 几个参数综合作用,效果如下:
A、tmp 文件在达到 128M 时会滚动生成正式文件
B、tmp 文件创建超 3600 秒时会滚动生成正式文件
举例:在 2018-01-01 05:23 的时侯 sink 接收到数据,那会产生如下 tmp 文件:
/atguigu/20180101/atguigu.201801010520.tmp
即使文件内容没有达到 128M,也会在 06:23 时滚动生成正式文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章