flume file channel
通过配置dataDirs指向多个路径,每个路径对应不同的硬盘,增大Flume吞吐量
官方原话:
Comma separated list of directories for storing log files. Using multiple directories on separate disks can improve file channel peformance
note:
checkpointDir和backupCheckpointDir也尽量配置在不同硬盘对应的目录中,保证checkpointDir坏掉后,可以快速使用backupCheckpointDir恢复数据
file channel 底层原理简单示意图
:
flume hdfs sink
(1)HDFS存入大量小文件,有什么影响?
元数据层面:
每个小文件都有一份元数据,其中包括文件路径,文件名,所有者,所属组,权限,创建时间等,这些信息都保存在Namenode内存中。所以小文件过多,会占用Namenode服务器大量内存,影响Namenode性能和使用寿命
计算层面:
默认情况下MR会对每个小文件启用一个Map任务计算,非常影响计算性能。同时也影响磁盘寻址时间
(2)怎么去解决
官方提供的这三个参数配置
在一定程度上可以减少小文件的产生,具体设置,需要根据应用场景
rollInterval
: 文件创建超xxx秒时会滚动生成新文件
rollSize
:文件在达到xxxM时会滚动生成新文件
rollCount
:event个数达到多少时会滚动生产一个新文件event个数达到多少时会滚动生产一个新文件(通常设置为0,因为每个event大小不一样)
flume 内存优化
如果抛以下异常,可以尝试调试flume的内存
ERROR hdfs.HDFSEventSink: process failed
java.lang.OutOfMemoryError: GC overhead limit exceeded
- 去flume/conf/flume-env.sh文件中修改如下配置
export JAVA_OPTS="-Xms100m -Xmx2000m -Dcom.sun.management.jmxremote"
Xms
:启动时所需内存
-Xms表示JVM Heap(堆内存)最小尺寸,初始分配
Xmx
:运行时最大内存
-Xmx 表示JVM Heap(堆内存)最大允许的尺寸,按需分配。如果不设置一致,容易在初始化时,由于内存不够,频繁触发fullgc
Xmx与Xms最好设置一致,减少内存抖动带来的性能影响,如果设置不一致容易导致频繁fullgc
- 同步该文件到其他节点