HDFS小文件处理

一、HDFS中小文件会有什么影响
(1)存储层面:
1个文件块,占用namenode多大内存150字节,大量小文件占用namenode内存。
128G能存储多少文件块? 128 g* 1024m1024kb1024byte/150字节 = 9.1亿文件块
(2)计算层面:
增加了切片数量,每个小文件都会起到一个MapTask,1个MapTask默认内存1G,增加了MapTask数量就增加了大量计算内存。浪费资源。

二、常见的解决方式
(1)采用har归档(企业中常用)方式,har是类似一种文件压缩方式,它能够将多个小文件打包成一个后缀为.har文件,这样减少namenode内存使用的同时,仍然允许对文件进行透明的访问。Hadoop存档是特殊格式的存档。 Hadoop归档文件映射到文件系统目录。 Hadoop归档文件始终具有* .har扩展名。 Hadoop存档目录包含元数据(以_index和_masterindex的形式)和数据(part- *)文件。 _index文件包含作为归档文件一部分的文件名以及这些文件内的位置。

(2)采用CombineTextInputFormat
(3)有小文件场景开启JVM重用;如果没有小文件,不要开启JVM重用,因为会一直占用使用到的task卡槽,直到任务完成才释放。
JVM重用可以使得JVM实例在同一个job中重新使用N次,N的值可以在Hadoop的mapred-site.xml文件中进行配置。通常在10-20之间

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

你可能感兴趣的:(大数据,hdfs,hadoop,jvm)