HDFS小文件问题分析与解决方案(面试层面~)

会造成的影响

(1)存储层面:

在HDFS中,每个block,文件或者目录在内存中均以对象的形式存储
1个文件块,占用namenode多大内存150字节
1亿个小文件*150字节
1个文件块 * 150字节
这样会使namenode内存容量严重影响了集群的扩展。如果访问大量小文件,需要不断的从一个datanode跳到另一个datanode,严重影响性能。

(2)计算层面:

每个小文件都会起到一个MapTask,占用了大量计算资源

解决方法

(1)采用har归档方式,将小文件归档

使用har归档方式时,要注意两点:第一,对小文件进行存档后,原文件并不会自动被删除,需要用户自己删除;第二,创建HAR文件的过程实际上是在运行一个mapreduce作业,因而需要有一个hadoop集群运行此命令。

(2)采用CombineTextInputFormat

它可以将多个文件合并成一个单独的split,并且可以设置存储位置。

(3)有小文件场景开启JVM重用;如果没有小文件,不要开启JVM重用,因为会一直占用使用到的task卡槽,直到任务完成才释放。

JVM重用可以使得JVM实例在同一个job中重新使用N次,N的值可以在Hadoop的mapred-site.xml文件中进行配置。通常在10-20之间

<property>
    <name>mapreduce.job.jvm.numtasks</name>
    <value>10</value>
    <description>How many tasks to run per jvm,if set to -1 ,there is  no limit</description>
</property>

在这里插入图片描述

  • 11
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值