

1.项目经验之 Flume 组件选型
1
)
FileChannel
和
MemoryChannel
区别
MemoryChannel
传输数据速度更快,但因为数据保存在
JVM
的堆内存中,
Agent
进程
挂掉会导致数据丢失,适用于对数据质量要求不高的需求。
FileChannel
传输速度相对于
Memory
慢,但数据安全保障高,
Agent
进程挂掉也可以从
失败中恢复数据。
选型:
金融类公司、对钱要求非常准确的公司通常会选择
FileChannel
传输的是普通日志信息(京东内部一天丢
100
万
-200
万条,这是非常正常的),通常选
择
MemoryChannel
。
2
)
FileChannel
优化
通过配置
dataDirs
指向多个路径
,每个路径对应不同的硬盘,增大
Flume
吞吐量。
官方说明如下:
Comma separated list of directories for storing log files. Using
multiple directories on separate disks can improve file channel
peformance
checkpoint
坏掉后,可以快速使用
backupCheckpointDir
恢复数据
3
)
Sink
:
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
几个参数综
合作用,效果如下:
(
1
)文件在达到
128M
时会滚动生成新文件
(
2
)文件创建超
3600
秒时会滚动生成新文件
2.
Flume
拦截器
由于
flume
默认会用
linux
系统时间,作为输出到
HDFS
路径的时间。如果数据是
23:59
分产生的。
Flume
消费
kafka
里面的数据时,有可能已经是第二天了,那么这部门数据会被
发往第二天的
HDFS
路径。我们希望的是根据日志里面的实际时间,发往
HDFS
的路径,所
以下面拦截器作用是获取日志中的实际时间。
1
)在
com.atguigu.flume.interceptor
包下创建
TimeStampInterceptor
类
2
)重新打包
3
)需要先将打好的包放入到
hadoop102
的
/opt/module/flume/lib
文件夹下面。
[atguigu@hadoop102 lib]$ ls | grep interceptor
flume-interceptor-1.0-SNAPSHOT-jar-with-dependencies.jar
4
)分发
Flume
到
hadoop103
、
hadoop104
[atguigu@hadoop102 module]$ xsync flume/
3.日志消费flume配置
1
)
Flume
配置分析
2
)
Flume
的具体配置如下:
(
1
)在
hadoop104
的
/opt/module/flume/conf
目录下创建
kafka-flume-hdfs.conf
文件
[atguigu@hadoop104 conf]$ vim kafka-flume-hdfs.conf
在文件配置如下内容
4.日志消费flume启动停止脚本
1
)在
/home/atguigu/bin
目录下创建脚本
f2.sh
[atguigu@hadoop102 bin]$ vim f2.sh
在脚本中填写如下内容
2
)增加脚本执行权限
[atguigu@hadoop102 bin]$ chmod u+x f2.sh
3
)
f2
集群启动脚本
[atguigu@hadoop102 module]$ f2.sh start
4
)
f2
集群停止脚本
[atguigu@hadoop102 module]$ f2.sh stop
5.
项目经验之
Flume
内存优化
1
)问题描述:如果启动消费
Flume
抛出如下异常
ERROR hdfs.HDFSEventSink: process failed
java.lang.
OutOfMemoryError
: GC overhead limit exceeded
2
)解决方案步骤:
(
1
)在
hadoop102
服务器的
/opt/module/flume/conf/flume-env.sh
文件中增加如下配置
export JAVA_OPTS="-Xms100m
-Xmx2000m
-
Dcom.sun.management.jmxremote"
(
2
)同步配置到
hadoop103
、
hadoop104
服务器
[atguigu@hadoop102 conf]$ xsync flume-env.sh
3
)
Flume
内存参数设置及优化
JVM heap
一般设置为
4G
或更高
-Xmx
与
-Xms
最好设置一致,减少内存抖动带来的性能影响,如果设置不一致容易导致
频繁
fullgc
。
-Xms
表示
JVM Heap(
堆内存
)
最小尺寸,初始分配;
-Xmx
表示
JVM Heap(
堆内存
)
最
大允许的尺寸,按需分配。如果不设置一致,容易在初始化时,由于内存不够,频繁触发
fullgc
。
797

被折叠的 条评论
为什么被折叠?



