flume jvm调优_使用flume sink hdfs小文件优化以及HDFS小文件问题分析和解决

本文介绍了使用Flume从Kafka读取数据并Sink到HDFS时产生的小文件问题及其影响,包括元数据层面和计算层面的性能下降。提出了通过调整Flume配置参数如hdfs.rollInterval、hdfs.rollSize和hdfs.rollCount来避免小文件生成。同时,详细阐述了HDFS小文件的弊端,如占用NameNode内存和影响索引速度,并提出了解决方案,包括在数据采集阶段合成大文件、使用Hadoop Archive、Sequence File、CombineFileInputFormat以及开启JVM重用来优化处理小文件。
摘要由CSDN通过智能技术生成

1.flume到hdfs小文件优化

项目的架构是使用flume直接从kafka读取数据Sink HDFS

1.1HDFS存入大量小文件的影响

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

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

1.2 小文件处理

image.png

官方默认的这三个参数配置写入HDFS后会产生小文件,hdfs.rollInterval、hdfs.rollSize、hdfs.rollCount

基于以上hdfs.rollInterval=3600,hdfs.rollSize=134217728,hdfs.rollCount =0几个参数综合作用,效果如下:

(1)文件在达到128M时会滚动生成新文件

(2)文件创建超3600秒时会滚动生成新文件

2. HDFS小文件优化

2.1 HDFS小文件弊端

HDFS上每个文件都要在NameNode上建立一个索引,这个索引的大小约为150byte,这样当小文件比较多的时候,就会产生很多的索引文件,一方面会大量占用NameNode的内存空间,另一方面就是索引文件过大使得索引速度变慢。但注意,存储小文件所需要的磁盘容量和数据块的大小无关。例如,一个1MB的文件设置为128MB的块存储,实际使用是1MB的磁盘空间,而不是128M,但他的索引在NameNode中占用的内存是150byte。

2.2 HDFS小文件解决方案

小文件的优化无非以下几种方式:

在数据采集的时候,就将小文件或小批数据合成大文件再上传HDFS。

在业务处理之前,在HDFS上使用MapReduce程序对小文件进行合并。

在MapReduce处理时,可采用CombineTextInputFormat提高效率。

a. Hadoop Archive

是一个高效地将小文件放入HDFS块中的文件存档工具,它能够将多个小文件打包成一个HAR文件,这样讲减少了NameNode的内存使用。

(1)需要启动YARN进程

[root@node09 hadoop-3.1.3]# start-yarn.sh

(2)归档文件

把/input目录里面的所有文件归档成一个叫input.har的归档文件,并把归档后文件存储到/output路径下。

[root@node09 hadoop-3.1.3]# bin/hadoop archive -archiveName input.har –p /input /output

(3)查看归档

[root@node09 hadoop-3.1.3]# hadoop fs -lsr /output/input.har

[root@node09 hadoop-3.1.3]# hadoop fs -lsr har:///output/input.har

(4)解归档文件

[root@node09 hadoop-3.1.3]# hadoop fs -cp har:///output/input.har/* /

b. Sequence File

由一系列的二进制key/value 组成,如果key为文件名,value为文件内容,则可以将大批小文件合并成一个大文件。

c. CombineFileInputFormat

是一种新的InputFormat,用于将多个文件合并成一个单独的Split,另外,它会考虑数据的存储位置

d. 开启JVM重用

对于大量小文件Job,可以开启JVM重用会减少45%运行时间。

JVM重用原理:一个Map运行一个JVM上,开启重用的话,该Map在JVM上运行完毕后,JVM继续运行其他Map

具体设置:mapreduce.job.jvm.numtasks值在10-20之间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值