Flume项目经验

1.Channel的选择

memory channel 速度快,但可能会造成数据丢失

file channel 不会造成数据丢失,安全性高,但速度相对较慢

也可以选择kafka channel ,省去了sink 阶段,提高传输效率

 

2.FileChannel 优化

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

使用默认配置,hdfs sink 会产生小文件,小文件影响:

  元数据层面:每个小文件都有一份元数据,其中包括文件路径,文件名,所有者,所属
组,权限,创建时间等,这些信息都保存在 Namenode 内存中。所以小文件过多,会占用
Namenode 服务器大量内存,影响 Namenode 性能和使用寿命
 
  计算层面:默认情况下 MR 会对每个小文件启用一个 Map 任务计算,非常影响计算性
能。同时也影响磁盘寻址时间。
 
修改 hdfs.rollInterval=3600,hdfs.rollSize=134217728,hdfs.rollCount =0 几个参数综
合作用,效果如下:
(1)文件在达到 128M 时会滚动生成新文件
(2)文件创建超 3600 秒时会滚动生成新文件
 
 
4.Flume内存优化
 
报错如下:
ERROR hdfs.HDFSEventSink: process failed
java.lang.OutOfMemoryError: GC overhead limit exceeded
 
vim  flume/conf/flume-env.sh
export JAVA_OPTS="-Xms100m -Xmx2000m -Dcom.sun.management.jmxremote"

 

JVM heap 一般设置为 4G 或更高,部署在单独的服务器上(4 核 8 线程 16G 内存)
每台服务器的 -Xmx 与-Xms 最好设置一致,减少内存抖动带来的性能影响,如果设置不一致容易导
致频繁 fullgc。
-Xms 表示 JVM Heap(堆内存)最小尺寸,初始分配;-Xmx 表示 JVM Heap(堆内存)最
大允许的尺寸,按需分配。如果不设置一致,容易在初始化时,由于内存不够,频繁触发 fullgc。

 

posted @ 2020-09-13 21:51  小小分析猿  阅读(253)  评论(0编辑  收藏  举报