用户行为数据采集 第8节 项目经验之Flume内存优化

上篇:用户行为数据采集 第7 节 Kafka压力测试、消费数据flume

1、项目经验之Flume内存优化

  1. 问题描述:如果启动消费Flume抛出如下异常?
ERROR hdfs.HDFSEventSink: process failed
java.lang.OutOfMemoryError: GC overhead limit exceeded

解决方案步骤:
(1) 在hadoop1.x服务器的flume/conf/flume-env.sh文件中增加如下配置

export JAVA_OPTS="-Xms100m -Xmx2000m -Dcom.sun.management.jmxremote"

在这里插入图片描述
(2) 同步配置到hadoop2.x、hadoop3.x服务器

[root@hadoop1 conf]# xsync flume-env.sh
  1. Flume内存参数设置及优化
    JVM heap一般设置为4G或更高,部署在单独的服务器上(4核8线程16G内存)
    -Xmx与-Xms最好设置一致,减少内存抖动带来的性能影响,如果设置不一致容易导致频繁fullgc。

2、项目经验之Flume组件

  1. FileChannel和MemoryChannel区别
    MemoryChannel传输数据速度更快,但因为数据保存在JVM的堆内存中,Agent进程挂掉会导致数据丢失,适用于对数据质量要求不高的需求。
    FileChannel传输速度相对于Memory慢,但数据安全保障高,Agent进程挂掉也可以从失败中恢复数据。

  2. FileChannel优化
    通过配置dataDirs指向多个路径,每个路径对应不同的硬盘,增大Flume吞吐量。
    官方说明如下:

Comma separated list of directories for storing log files. Using 
multiple directories on separate disks can improve file channel 
peformance

checkpointDir和backupCheckpointDir也尽量配置在不同硬盘对应的目录中,保证checkpoint坏掉后,可以快速使用backupCheckpointDir恢复数据

  1. 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,hdfs.roundValue=10,hdfs.roundUnit= second几个参数综合作用,效果如下:
    (1)tmp文件在达到128M时会滚动生成正式文件
    (2)tmp文件创建超3600秒时会滚动生成正式文件
    举例:在2018-01-01 05:23的时侯sink接收到数据,那会产生如下tmp文件:
    /atguigu/20180101/atguigu.201801010620.tmp
    即使文件内容没有达到128M,也会在06:23时滚动生成正式文件


3、采集通道启动/停止脚本

  1. 在/home/MrZhou/bin目录下创建脚本cluster.sh
[root@hadoop1 bin]# vim cluster.sh 


//在脚本中填写如下内容
#! /bin/bash

case $1 in
"start"){
	echo " -------- 启动 集群 -------"

	echo " -------- 启动 hadoop集群 -------"
	/usr/local/etc/hadoop/module/hadoop-2.7.2/sbin/start-dfs.sh
	ssh hadoop2.x " /usr/local/etc/hadoop/module/hadoop-2.7.2/sbin/start-yarn.sh "

	#启动 Zookeeper集群
	./zk.sh start

sleep 4s;

	#启动 Flume采集集群
	./f1.sh start

	#启动 Kafka采集集群
	./kf.sh start

sleep 6s;

	#启动 Flume消费集群
	./f2.sh start

	#启动 KafkaManager
	./km.sh start
};;
"stop"){
    echo " -------- 停止 集群 -------"

	#停止 KafkaManager
	./km.sh stop

    #停止 Flume消费集群
	./f2.sh stop

	#停止 Kafka采集集群
	./kf.sh stop

    sleep 6s;

	#停止 Flume采集集群
	./f1.sh stop

	#停止 Zookeeper集群
	./zk.sh stop

	echo " -------- 停止 hadoop集群 -------"
	ssh hadoop2.x "/usr/local/etc/hadoop/module/hadoop-2.7.2/sbin/stop-yarn.sh"
	/usr/local/etc/hadoop/module/hadoop-2.7.2/sbin/stop-dfs.sh 
};;
esac

  1. 增加脚本执行权限
[root@hadoop1 bin]# chmod 777 cluster.sh
  1. cluster集群启动脚本
[root@hadoop1 bin]# ./cluster.sh start


 -------- 启动 集群 -------
 -------- 启动 hadoop集群 -------
Starting namenodes on [hadoop1.x]
hadoop1.x: starting namenode, logging to /usr/local/etc/hadoop/module/hadoop-2.7.2/logs/hadoop-root-namenode-hadoop1.x.out
localhost: starting datanode, logging to /usr/local/etc/hadoop/module/hadoop-2.7.2/logs/hadoop-root-datanode-hadoop1.x.out
Starting secondary namenodes [hadoop1.x]
hadoop1.x: starting secondarynamenode, logging to /usr/local/etc/hadoop/module/hadoop-2.7.2/logs/hadoop-root-secondarynamenode-hadoop1.x.out
starting yarn daemons
starting resourcemanager, logging to /usr/local/etc/hadoop/module/hadoop-2.7.2/logs/yarn-root-resourcemanager-hadoop2.x.out
localhost: starting nodemanager, logging to /usr/local/etc/hadoop/module/hadoop-2.7.2/logs/yarn-root-nodemanager-hadoop2.x.out
JMX enabled by default
Using config: /usr/local/etc/hadoop/module/zookeeper-3.4.5/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
JMX enabled by default
Using config: /usr/local/etc/hadoop/module/zookeeper-3.4.5/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
JMX enabled by default
Using config: /usr/local/etc/hadoop/module/zookeeper-3.4.5/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
 --------启动 hadoop1.x 采集flume-------
 --------启动 hadoop2.x 采集flume-------
 --------启动 hadoop1.x Kafka-------
 --------启动 hadoop2.x Kafka-------
 --------启动 hadoop3.x Kafka-------
 --------启动 hadoop3.x 消费flume-------
 -------- 启动 KafkaManager -------

查看集群进程

[root@hadoop1 bin]# ./xcall.sh jps
--------- hadoop1.x ----------
17088 Jps
16113 NameNode
16417 SecondaryNameNode
16977 ProdServerStart
16899 Kafka
16246 DataNode
16553 QuorumPeerMain
16591 Application
--------- hadoop2.x ----------
10929 Jps
10370 NodeManager
10862 Kafka
10447 QuorumPeerMain
--------- hadoop3.x ----------
11079 Jps
10683 QuorumPeerMain
10942 Kafka
  1. cluster集群停止脚本
[root@hadoop1 bin]# ./cluster.sh stop
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值