所谓小文件,即存储在hdfs上的数据文件明显小于hdfs文件块大小的(默认是64MB)。小文件过多,占用大量内存。
小文件的产生:主要由Hive启动的mr任务生成。
在hdfs中,每次读写文件都需要先从namenode获取表结构(元数据),然后再与datanode建立连接。而访问大量的小文件会经常需要大量的定位寻址操作,不断地在datanode间跳跃去检索小文件。访问小文件的过程严重影响性能。
在计算层面,小文件越多,意味着mapreduce执行任 务时需要创建的map也会越来越多,这样,任务的启动与释放将耗费大量的时间。同时,每一个map都会开启一 个 jvm虚拟机用于执行任务,带来的调度以及计算成本也会更高。
针对这种情况,增加一个spark任务定时调度执行,用于合并小文件,减轻了namenode对服务器造成的内存压力。
--合并小文件功能
启动较多的map或reduce能够提高并发度,加快任务运行速度;但同时在hdfs上生成的文件数目也会越来越多,会给namenode造成内存上压力,进而影响hdfs读写效率。所以对于集群的小文件(主要由Hive启动的MR生成),小文件合并功能能够使本轮map输出及整个任务输出的文件完成合并,保证下轮MapReduce任务map处理数据量均衡。
--在某零售行业项目,发现有一个对增量hive表查询的任务速度执行越来越慢,测试发现,上千万数据统计耗时需要几分钟,排查发现由于定时从多个数据源增量同步数据到hive表,导致hive表中小文件准积越来越多,sq1执行时长耗时越来越长。
--要么从源头处理
--要么从中间环节处理
--要么从结果集处理
标签:hdfs,map,--,任务,文件,namenode,啥意思 From: https://www.cnblogs.com/zcl789456/p/18232791