Hadoop小文件优化方法

Posted 刘元涛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hadoop小文件优化方法相关的知识,希望对你有一定的参考价值。

Hadoop小文件弊端

每个文件均按块存储,每个块的元数据存储在NameNode的内存中,因此HDFS存储小文件会非常低效。因为大量的小文件会耗尽NameNode中的大部分内存。但注意,存储小文件所需要的磁盘容量和数据块的大小无关。例如,一个1MB的文件设置为128MB的块存储,实际使用的是1MB的磁盘空间,而不是128MB。

HDFS上每个文件都要在NameNode上创建对应的元数据,这个元数据的大小约为150byte,这样当小文件比较多的时候,就会产生很多的元数据文件,一方面会大量占用NameNode的内存空间,另一方面就是元数据文件过多,使得寻址索引速度变慢。
小文件过多,在进行MR计算时,会生成过多切片,需要启动过多的MapTask。每个MapTask处理的数据量小,导致MapTask的处理时间比启动时间还小,白白消耗资源。

Hadoop小文件解决方案

1)(数据源头)

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

2)Hadoop Archive(存储方向)

是一个高效的将小文件放入HDFS块中的文件存档工具,能够将多个小文件打包成一个HAR文件,从而达到减少NameNode的内存使用。具体说来,HDFS存档文件对内还是一个一个独立文件,对NameNode而言却是一个整体,减少了NameNode的内存。

3)CombineTextInputFormat(计算方向)

CombineTextInputFormat用于将多个小文件在切片过程中生成一个单独的切片或者少量的切片。 

4)开启uber模式,实现JVM重用(计算方向)

默认情况下,每个Task任务都需要启动一个JVM来运行,如果Task任务计算的数据量很小,我们可以让同一个Job的多个Task运行在一个JVM中,不必为每个Task都开启一个JVM。

(1)未开启uber模式,在/input路径上上传多个小文件并执行wordcount程序

[lytfly@hadoop102 hadoop-3.1.4]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.4.jar wordcount /input /output2

(2)观察控制台

2021-02-14 16:13:50,607 INFO mapreduce.Job: Job job_1613281510851_0002 running in uber mode : false

(3)观察http://hadoop103:8088/cluster

  

(4)开启uber模式,在mapred-site.xml中添加如下配置
 

<!--  开启uber模式,默认关闭 -->
<property>
      <name>mapreduce.job.ubertask.enable</name>
      <value>true</value>
</property>

<!-- uber模式中最大的mapTask数量,可向下修改  --> 
<property>
      <name>mapreduce.job.ubertask.maxmaps</name>
      <value>9</value>
</property>
<!-- uber模式中最大的reduce数量,可向下修改 -->
<property>
      <name>mapreduce.job.ubertask.maxreduces</name>
      <value>1</value>
</property>
<!-- uber模式中最大的输入数据量,默认使用dfs.blocksize 的值,可向下修改 -->
<property>
      <name>mapreduce.job.ubertask.maxbytes</name>
      <value>128</value>
</property>

(5)分发配置

[atguigu@hadoop102 hadoop]$ xsync mapred-site.xml

(6)再次执行wordcount程序

[atguigu@hadoop102 hadoop-3.1.4]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.4.jar wordcount /input /output2

(7)观察控制台

2021-02-14 16:28:36,198 INFO mapreduce.Job: Job job_1613281510851_0003 running in uber mode : true

(8)观察http://hadoop103:8088/cluster


 

以上是关于Hadoop小文件优化方法的主要内容,如果未能解决你的问题,请参考以下文章

大数据技术之_05_Hadoop学习_04_MapReduce_Hadoop企业优化(重中之重)+HDFS小文件优化方法+MapReduce扩展案例+倒排索引案例(多job串联)+TopN案例+找博客

Hadoop优化

hadoop的企业优化

大数据面试题:Hadoop优化核心高频面试题

Hadoop优化配置

MapReduce小文件优化与分区