【大数据之Hadoop】三十四、Hadoop综合调优之小文件优化方法

news/2024/11/7 21:01:36/

1 Hadoop小文件弊端

  HDFS上每个文件都要在NameNode上创建对应的元数据,这个元数据的大小约为150byte,这样当小文件比较多的时候,就会产生很多的元数据文件,一方面会大量占用NameNode的内存空间,另一方面就是元数据文件过多,使得寻址索引速度变慢。

  小文件过多,在进行MR计算时,会生成过多切片,需要启动过多的MapTask。每个MapTask处理的数据量小,导致MapTask的处理时间比启动时间还小,白白消耗资源。

2 Hadoop小文件解决方案

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

(2)Hadoop Archive(存储方向)
  是一个高效的将小文件放入HDFS块中的文件存档工具,能够将多个小文件打包成一个HAR文件,从而达到减少NameNode的内存使用

(3)CombineTextInputFormat(计算方向)
  CombineTextInputFormat用于将多个小文件在切片过程中生成一个单独的切片或者少量的切片(小文件放在一起统一进行切片)。

(4)开启uber模式,实现JVM重用(计算方向)
  当存在很多小文件的任务开启和结束关闭时间大于任务的执行时间时使用一个策略:将小文件的任务开启之后运行,运行完成也不结束。

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

  在没有开启uber模式下,对/input路径上上传的小文件执行wordcount程序,可用看到控制台上显示uber模式是关闭的,且http://hadoop103:8088/cluster中该任务开启的容器超过1个,不大于9个。

  开启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></value>
</property>

  分发该文件,再次运行wordcount程序,观察到控制台显示uber模式开启,且http://hadoop103:8088/cluster中该任务开启的容器只有1个。

  只有一个容器的原因:开启uber模式,将小文件的任务开启之后运行,运行完成也不结束,减少开关任务的时间。


http://www.ppmy.cn/news/87608.html

相关文章

Spring Boot中的依赖注入和自动注入

Spring Boot中的依赖注入和自动注入 前言详细讲讲依赖注入给出依赖的三种注入的方式的示例从概念上讲讲自动注入Spring Boot中注解Autowired&#xff0c;自动注入注解默认使用哪种注入方式给我一些上面自动注入的简单示例依赖注入和自动注入的关联以及不同点 前言 以下内容为本…

辅助生成: 低延迟文本生成的新方向

大型语言模型如今风靡一时&#xff0c;许多公司投入大量资源来扩展它们规模并解锁新功能。然而&#xff0c;作为注意力持续时间不断缩短的人类&#xff0c;我们并不喜欢大模型缓慢的响应时间。由于延迟对于良好的用户体验至关重要&#xff0c;人们通常使用较小的模型来完成任务…

webpack简单的搭建和使用

随便创建一个空的文件夹&#xff0c;例如说&#xff1a;explore 然后我们测试一下我们的node是否存在 可以正确打印出版本 我们再次输入&#xff1a;npm init -y 创建一个package.json文件 出现这样的情况就成功了 然后我们要安装webpack在终端上输入命令&#xff1a; npm i …

RK3568平台开发系列讲解(驱动基础篇)RK平台UART的使用

🚀返回专栏总目录 文章目录 一、引脚定义1.1 UART91.2 RS232和RS485二、设备树配置三、调试3.1 连接硬件3.2 打开主机的串口终端3.3 板子发送数据3.4 板子接收数据3.5 主机退出kermit串口连接四、UART2普通串口配置沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇…

Python欧几里得距离变换

文章目录 欧氏距离变换distance_transform_edt其他距离变换函数 欧氏距离变换 edt&#xff0c;即Euclidean distance transform.&#xff0c;欧氏距离变换。对于一个二值矩阵 A A A&#xff0c;元素 a ∈ A a\in A a∈A&#xff0c;则 edt ⁡ ( a ) \operatorname{edt}(a) edt…

虚拟机磁盘扩容及重新分区方法

创建虚拟机的时候&#xff0c;如果分配的磁盘过小&#xff0c;在后续的使用时可能需要进行扩容&#xff0c;在扩容后你会发现好像磁盘并没有变大&#xff0c;这时候就需要进行重新分区 一、虚拟机扩容 在将需要扩容的虚拟机关机后&#xff0c;点击VMware的菜单栏中的虚拟机&…

【2023 · CANN训练营第一季】MindSpore模型快速调优攻略 第二章——MindSpore调试调优

1.生态迁移 生态迁移工具使用示例 生态迁移工具技术方案 不同框架间模型定义前端表达差别巨大(相同算子的API技术难点 、 算子功能、模型构建方式差别较大)&#xff1b; 对于同一框架&#xff0c;不管前端表达差异如何&#xff0c;最终对应的计算 图是相似的。因此提出&#x…

每天一个面试题之==和equals的区别是什么?

&#xff1d;&#xff1d;和equals的区别是什么&#xff1f; ""是一个关系运算符&#xff0c;关系运算符可以用来进行数据和数据之间的比较&#xff0c;而在java中数据类型大致可以分为两大类分别是基本数据类型和引用数据类型。 基本数据类型包含 byte&#xff0c…