首页 > 其他分享 >小文件问题

小文件问题

时间:2023-08-21 10:22:20浏览次数:26  
标签:文件 NN map reduce Hadoop 问题 Spark

Hadoop小文件问题

小文件是指比HDFS默认块大小明显小得多的文件。

小文件导致了什么问题

对于存储层来说,大量小文件会产生大量的元数据信息;当NN重启时,必须将元数据信息加载到内存中,大量元数据信息会导致NN重启速度非常慢;并且,太多小文件也会导致NN在DN耗尽磁盘空间之前就先耗尽内存的元数据空间。同时,更多文件意味着更多的读写请求,这可能最终堵塞NN的容量,增加RPC队列和处理延迟,意味着性能下降。以及,在进行文件读写的时候,寻址速度高于读写速度,效率低下。

对于应用层来说,MR或Spark在计算这些小文件的时候性能低下。对于MR来说,一个文件需要启动一个Map Task去处理,浪费资源;对于Spark来说也是类似,在Spark中,每个map相当于Spark任务在执行器中每次读取和处理一个分区,每个分区默认是一个block。小文件会导致大量的分区以至于大量的任务开销。

产生小文件可能的原因

  1. 大量的map/reduce任务:如果有大量的map/reduce任务,在HDFS上生成的文件基本与map的数量(对于map only而言),或reduce的数量成正比。
  2. 过度分区表:是指每个分区的数据量很小的Hive表。
  3. Spark过度并行化:在Spark作业中,Spark分区越多,写入的文件就越多。

Hadoop小文件的解决方案

  1. 从数据源头解决,在数据采集的时候,就将小文件或小批数据合并成大文件后再上传到HDFS。

  2. 从存储角度解决,使用Hadoop Archive,这是一个高效将小文件放入HDFS块的文件存档工具,可以将小文件打包成一个har文件,从而减少NN内存使用。

  3. 从计算角度解决,采用CombineTextInputFormat的切片方式,将多个小文件在切片过程中生成一个单独的切片或少量的切片。

    或者开启uber模式,实现jvm的重用。也就是让同一个job的多个task运行在一个jvm中。

Hive小文件问题

Hive中也存在小文件问题,本质上也是Hadoop的小文件问题。

产生的原因

hive中的小文件大概率是导入数据时产生的,通常在生产环境中,一般会使用insert select的方式导入数据,这样会启动MR任务,那么reduce有多少个就会有多少个文件输出。也就是insert每执行一次至少有一个文件,就很容易出现小文件问题。

解决的方案

  1. 使用hive自带的concatenate命令,自动合并小文件;不过需要注意的是这个命令只支持rcFile和ORC。
  2. 在MR过程中合并小文件,在inputformat的时候设置为combinehiveinputfor,这个底层就是combinefileinputformat方法。在map后reduce前,设置合并小文件hive.merge.mapfiles;在reduce后合并小文件hive.merge.mapredfiles;
  3. 或者直接设置少一定的reduce数量
  4. 最后也可以参考hadoop处理小文件,用hadoop archive归档。

标签:文件,NN,map,reduce,Hadoop,问题,Spark
From: https://www.cnblogs.com/nangk/p/17645289.html

相关文章

  • Flutter 应用程序如何组织可扩展的文件夹结构
    开发人员在使用Flutter时经常面临的挑战之一是如何以可扩展和可维护的方式组织项目。文件夹结构在这方面起着关键作用。让我们深入了解如何构建Flutter应用程序以实现可扩展性。文件夹结构的重要性为Flutter应用程序选择正确的文件夹结构是非常重要的。它直接影响团队合作时......
  • 大抄线段树历史值问题
    历史值问题历史值:在维护序列\(A\)的同时,在每次操作后,序列\(A\)会对序列\(B\)的对应位置产生贡献。历史版本和:每次操作后,\(B_i\leftarrowB_i+A_i\)。历史最大值:每次操作后,\(B_i=\max(B_i,A_i)\)。历史版本和:给定操作:①区间加。②查询区间和。③查询区间......
  • Rocky虚拟机(Three Days)用户与组管理与目录/文件权限
    ThreeDays一、用户管理1、概述Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方......
  • Linux常用命令_文件目录操作命令(mkdir、rm、rmdir)
       ......
  • Geotools实现shape文件的写入
        众所周知Geotools作为开源的JavaGIS三方库,已经成为GIS服务器端的主流开源库,其功能非常强大,涉及到GIS业务的方方面面,其中就包括GIS数据的读写,今天小编就借助Geotools来实现shape数据的写入。   Geotools对于shape数据写入,主要提供了SimpleFeatureStore和Featur......
  • Linux常用命令_文件命令操作命令(ls、cd、cat、more、tail)
          ......
  • python生成相对于入口文件所在目录的绝对路径
    在VSCODE中,如果打开多个python文件夹,则在执行python文件时,有时候当前工作目录会切换到其他文件夹,导致保存和读取文件报错.这时候可以生成文件的绝对路径,就可以避归这个问题.下面是生成绝对路径的代码:importosimport__main__defAbsPath(fileName:str)->str:......
  • LeetCode 周赛上分之旅 #40 结合特征压缩的数位 DP 问题
    ⭐️本文已收录到AndroidFamily,技术和职场问题,请关注公众号[彭旭锐]和BaguTreePro知识星球提问。学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越抽象,它能覆盖的问题域就越广,理解难度也更复杂。在这个专栏里,小彭与你分享每场LeetCode周赛的解题报告,一......
  • Prim算法是一种用于解决最小生成树问题的贪心算法。它通过逐步选择边来构建最小生成树
    importjava.util.*;classPrimAlgorithm{privatestaticfinalintINF=Integer.MAX_VALUE;publicvoidprimMST(int[][]graph){intvertices=graph.length;int[]parent=newint[vertices];//用于存储最小生成树的父节点int......
  • 【8月摸鱼计划】Air780E、Luat开发平台、对应的lib库的问题
      Air780E是一款基于Luat开发平台的模组,支持LuatIDE进行任务开发。LuatIDE是专为Luat开发平台设计的集成开发环境,方便开发者进行代码编写、调试和下载。关于找不到对应的lib库的问题,可能是由于以下几个原因:1.库文件未导入:确保正确安装LuatIDE,并在项目中导入相应的库文件......