Hadoop小文件优化方法

Hadoop小文件弊端

up-1681b15baa2d4bc66ceb813b9d6fcd4ad55.png

每个文件均按块存储,每个块的元数据存储在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的内存。

up-652c8cb7f70da24b184d8b8347dc715d836.png

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

up-1e21dcacebd1948de7967cd9fc0de5ee825.png  up-19e96a8d0061a351578be961c10ff5a007a.png
up-db7d922e877c934e1f3330cfe2514df2c72.png
(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

up-e9a26a3c20f10dadd4c75d67ca8662589ec.png
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘元涛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值