MapReduce 之小文件合并(HDFS小文件预处理)

mapreduce关于大量小文件的优化策略 mapreduce关于大量小文件的优化策略 在分布式的架构中,分布式文件系统HDFS,和分布式运算程序编程框架mapreduce。 HDFS:不怕大文件,怕很多小文件 mapreduce :怕数据倾斜 那么mapreduce是如果解决多个小文件的问题呢? mapreduce关于大量小文件的优化策略 (1) 默认情况下,TextInputFormat对任务的切片机制是按照文件规划切片,不管有多少个小文件,都会是单独的切片,都会交给一个maptask,这样,如果有大量的小文件 就会产生大量的mapta 阅读详情

MapReduce 之小文件合并

1.HDFS之小文件背景知识

  1. HDFS作为分布式文件系统,自身机制原因,每一个数据块(默认128MB一个数据块)都会在namenode节点的元数据中保存一份索引。
  2. 如果是小文件,例如1MB以下的小文件,由于HDFS本身机制,每个文件都会建立一个索引。这样的小文件过多,会导致namenode的索引文件过大。
  3. namenode的索引文件在启动时会加载到namenode的内存中,而内存是有限的。考虑到HDFS是分布式文件系统,里面存储的文件数量会非常大,所以这些小文件单独存放到HDFS中就不是很适合

2.HDFS小文件存储解决方式

  1. 文件之间合并,也是稍后会做代码演示的方式
  2. 文件打包压缩,和方法1差不多(hdfs本身支持多种压缩方式,有的压缩方式支持数据切块,有的不支持,有的解压缩速度很快,有的压缩率很高,根据需要进行设置处理即可)
  3. 小文件使用其他存储方式存储,不放在HDFS文件系统上

3.使用mapreduce进行小文件合并

  1. 考虑到效率,一般会在把小文件上传到HDFS之前,就在本地对小文件做合并,这样效率更高。
  2. 在整个大数据处理前期,针对原始数据做处理,包括数据清洗,筛选,合并等操作也是一个关键环节。数据清洗做的好,能很大降低后续代码数据处理的复杂程度和数据量。例如一些数据可以提前做一些分类跟聚合,这样工作量就不用全部放在mapreduce阶段,可以有效提升数据处理速度。
  3. mapreduce本身自带的combiner就是出于这种思路,在maptask处理的数据之后,提前做一些数据聚合。
  4. 数据准备,一部准备好的txt英文小说,拆分为10份
    在这里插入图片描述
    在这里插入图片描述
package com.doit.hadoop.combin_small_files;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import java.io.IOException;

/**
 * @author hulc
 * @slogan: just do it
 * @date 2020/8/22 20:18
 */

public class SmallFilesCombine2 {
    public static void main(String[] args) {

        Configuration conf = new Configuration();
        conf.set("mapreduce.framework.name", "local");

        try {
            Job instance = Job.getInstance(conf, SmallFilesCombine2.class.getSimpleName());

            // 设置mapper类
            instance.setMapperClass(SmallFilesMapper2.class);

            // 设置map输出的key和value
            instance.setMapOutputKeyClass(Text.class);
            instance.setMapOutputValueClass(NullWritable.class);

            // 设置输入和输出数据源路径
            FileInputFormat.setInputPaths(instance, new Path("E:\\DOITLearning\\8.Hadoop\\mrdata\\smallFiles"));
            FileOutputFormat.setOutputPath(instance, new Path("E:\\DOITLearning\\8.Hadoop\\mrdata\\smallFiles\\result1"));

            // 设置reduce task数量,合并为一个文件
            instance.setNumReduceTasks(1);

            // 启动程序
            boolean b = instance.waitForCompletion(true);

            if(b) {
                System.out.println("success");
            }else {
                System.out.println("failed");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class SmallFilesMapper2 extends Mapper<LongWritable, Text, Text, NullWritable> {

    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        // 从各个文件中逐行读取数据,最后输出到一个文件中,就完成了对小文件的简单拼接处理.注意这里是没有对文件之间的拼接顺序做处理的
        // 如果对文件处理顺序有要求,则需另外增加代码

        context.write(value, NullWritable.get());
    }
}

  1. 聚合后处理结果
    在这里插入图片描述
    内容是一致的,不过注意,聚合后内容是按照一行一行聚合,顺序并没有遵循之前的文件名以及源文件中的顺序。
HDFS 3.3.6 小文件存储优化:从原理到合并归档的 3 种实践方案 本文深入探讨了HDFS 3.3.6小文件存储优化的技术原理与实践方案,针对大数据环境中海量小文件导致的NameNode内存压力、元数据管理效率低下等问题,详细介绍了HAR归档、SequenceFile合并和Spark/MapReduce预处理三种优化方法,帮助提升HDFS集群性能和存储效率。 阅读详情

相关推荐

STM32H7串口DMA避坑指南:如何解决RT-Thread默认驱动不支持的问题

本文针对STM32H7在RT-Thread系统中启用串口DMA时遇到的驱动不支持问题,提供了详细的解决方案。通过分析问题根源,指导修改驱动代码以适配H7的DMA Stream架构,并调整内存配置确保DMA可访问性,最终实现稳定高效的串口DMA通信。

weixin_29179311的博客 424

MapReduce处理小文件合并

一:小文件合并几种方式: 1、 在数据采集的时候,客户端就将小文件或小批数据合成大文件再上传HDFS 2、 在业务处理之前,在HDFS上使用mapreduce程序对小文件进行合并 3、 在mapreduce处理时,可采用combineInputFormat提高效率 二:自定义InputFormat合并小文件 通过自定义实现FileInputFormat,设置读取小文件时不进行切片,且使用...

qq_15076569的博客 3515

逆变器LCL滤波器参数设计(一)

1.基本介绍 并网型逆变器一般是电流源逆变器,滤波器基本用LCL结构。 假设要设计额定功率10KVA的单相逆变器,采用两电平的全桥拓扑,采用SPWM控制,载波频率20KHz,电网等级220V,频率50Hz。 拓扑结构如图所示: 直流输入电压分为上下母线各1/2Vin,半母线电压为380V。 L1采用高频磁芯绕制,称为高频电感;L2用工频电感绕制,称工频电感;C是滤波电容,为高频谐波电流提供通路;Vg为电网电压。 载波调制比为:Mr=220*1.414/380=0.819 2.高频电感量的计算 逆变器可以等

weixin_43549807的博客 5万+

MapReduce合并小文件

Pom.xml文件内容如下: 需求 要计算的目标文件中有大量的小文件,会造成分配任务和资源的开销比实际的计算开销还打,这就产生了效率损耗。 需要先把一些小文件合并成一个大文件。 实现思路 文件的读取由map负责,在前面的示意图中可以看到一个inputformat用来读取文件,然后以key value形式传递给map方法。 我们要自定义文件的读取过程,就需要了解其细节流程: 所以我们需要自定义一...

chuxingbubian的博客 1416

别自己写CDC了!聊聊Xilinx AXI4-Stream Clock Converter IP里的寄存器管道模式到底有多省资源

本文探讨了Xilinx AXI4-Stream Clock Converter IP核的寄存器管道模式在FPGA设计中的高效资源利用。通过对比手工CDC实现,详细解析了IP核的精简化同步架构和时序收敛优势,并提供了实战案例和优化策略,帮助工程师快速实现时钟域转换,显著提升设计效率和性能。

weixin_33738555的博客 441

HDI盲埋孔设计规范:高速PCB信号完整性落地指南

盲埋孔是高密度互连(HDI)PCB实现高速信号完整性的关键技术,其本质是通过控制过孔stub长度、优化回流路径和提升布线密度,解决GHz级信号在传统通孔结构下出现的谐振、串扰与EMI超标问题。其设计核心在于叠层物理约束、电气参数建模与工艺能力协同,涉及stub长度计算、反焊盘尺寸推导、孔壁粗糙度Rz控制等关键指标。广泛应用于DDR4、PCIe Gen4、USB3.2等高速接口的PCB设计中,尤其在车载ADAS、5G基站及FPGA载板等对SI/PI要求严苛的场景中成为刚性门槛。

weixin_34416754的博客 437

大数据开发之小文件合并

文件的平均大小=分区大小/文件数,理想情况下,文件的平均大小在128MB~256MB之间,如果文件的平均大小过于小,则认为数据表里小文件过多,可以进行文件的合并。

julyclj55555的博客 1773

【N32L40X】学习笔记12-规则组+注入组+外部触发启动

使用定时器触发规则通道开始采集数据,采集完成后使用dma传输数据,并启动注入通道转换数据,注入通道转换完成后产生中断,中断中读物注入通道数据。

Car12 422

YARN聚合文件格式

【前言】我们都知道日志聚合后的文件是存放在HDFS中的,然而每个application可能会有很多的container,每个container又有多个日志文件,那么日志聚合后,这些日志文...

hncscwc的博客 1220

Python对象的基本组成和内存示意图及引用的本质

在Python中,变量也称为:对象的引用(reference)。变量存储的就是对象的地址。变量不需要显式声明类型。根据变量引用的对象,Python解释器自动确定数据类型。一个内存块,拥有特定的值,支持特定类型的相关操作。变量位于:栈内存(压栈出栈等细节,后续再介绍)。⚠️Python是动态类型语言。变量通过地址引用了“对象”。

Calor13的博客 557

人工智能算法面试大总结-总目录

涉及秋招、春招、社招

啥都生的博客 2万+

MapReduce实战-词频统计、文件合并排序_mapreduc 词频统计排序

链图片转存中…(img-E4cmlGPj-1712884616182)][外链图片转存中…(img-DmmaHKOQ-1712884616183)]

2401_84253380的博客 1512

【100%通过率】华为OD机试真题 Python 实现【网上商城优惠活动 / 模拟商场优惠打折II】

某网上商场举办优惠活动,发布了满减、打折、无门槛3种 优惠券,分别为: 1:每满100元优惠10元,无使用数限制,如100~199元可以使用1张减10元,200~299可使用2张减20元,以此类推; 2:92折券,1次限使用1张,如100元,则优惠后为92元, 3:无门槛5元优惠券,无使用数限制,直接减5元。

MISAYAONE的博客 9371

HDFS小文件优化方法

1 HDFS小文件弊端 HDFS上每个文件都要在NameNode上建立一个索引,这个索引的大小约为150byte,这样当小文件比较多的时候,就会产生很多的索引文件,一方面会大量占用NameNode的内存空间,另一方面就是索引文件过大使得索引速度变慢。 2 HDFS小文件解决方案 小文件的优化无非以下几种方式: (1)在数据采集的时候,就将小文件或小批数据合成大文件再上传HDFS。 (2)...

qq_43193797的博客 955

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

HDFS小文件的优化

HDFS小文件弊 HDFS上每个文件都要在NameNode 上建立一个索引,这个索引的大小约为150byte,这样当小文件比较多的时候,就 会产生很多的索引文件,一方面会大量的占用NameNode 的空间,另一方面就是索引文件过大时得索引速度变慢。 HDFS小文件解决方案 小文件的优化无非以下几种方式: (1)在数据采集的时候,就将小文件或小批数据合成大文件再上传HDFS。 (2)在业务处理之前,在HDFS上使用MapReduce程序对小文件进行合并。 (3)在MapReduce处理时,可采用Comb

weixin_45769335的博客 197

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Flume小文件聚合方案:海量小文件场景下的性能瓶颈与合并策略

本文深入分析Flume在处理海量小文件时面临的主要性能瓶颈,并提供实用的合并策略方案。文章从Flume架构入手,详解小文件问题的根源,通过合理的配置和拦截器实现文件聚合,最后给出可直接运行的配置示例与注意事项。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 1079

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

HDFS小文件处理

HDFS小文件处理 1、会有什么影响 1个文件块,占用namenode多大内存150字节 1亿个小文件150字节 1 个文件块 * 150字节 128G能存储多少文件块? 128 * 10241024*1024byte/150字节 = 9亿文件块 导致运行的效率很低,每个task处理的数据都很少,每个并行计算的task数据量都很少,本身这些数据存储在hdfs(磁盘),寻址也需要时间,如果处理都是小文件,就会导致处理的很慢 2、怎么解决 采用har归档方式,将小文件归档 采用CombineTextInp

永恒的博客 317

hadoop优化

采用数据压缩的方式,减少网络IO的的时间。安装smappy和LZO压缩编码器。在业务处理之前,在HDFS上使用MapReduce程序对小文件进行合并。在数据采集的时候,就将小文件或小批数据合成大文件在上传HDFS。使用SequenceFile二进制文件。在MapReduce处理时,可采用。

qq_30987939的博客 432

Hadoop企业优化

目录 1、 MapReduce 跑的慢的原因 2、 MapReduce优化方法 2.1 数据输入 2.2 Map阶段 2.3 Reduce阶段 2.4 I/O传输 2.5 数据倾斜问题 2.6 常用的调优参数 3、 HDFS小文件优化方法 3.1 HDFS小文件弊端 3.2 HDFS小文件解决方案 1、 MapReduce 跑的慢的原因 2、 MapReduce优化方法 MapReduce优化方法主要从六个方面考虑:数据输入、Map阶段、Reduce阶段、IO传输、数据倾..

Markble 5003

Hadoop课程学习:从理论到实践的深度感悟与技术沉淀

Configuration:用于加载Hadoop的配置文件(如core-site.xml),获取HDFS的相关配置信息(如NameNode的地址)。通过Configuration对象,程序可以连接到HDFS集群。FileSystem:HDFS文件系统的抽象类,是所有HDFS文件操作的入口。通过FileSystem.get(Configuration)方法可以获取FileSystem实例。Path:用于表示HDFS上的文件路径,支持绝对路径和相对路径。

fiifi的博客 1027

【hadoop学习记录】MapReduce小文件优化

默认情况下TextInputformat对任务的切片机制是按文件规划切片,不管文件多小,都会是一个单独的切片,都会交给一个maptask,这样如果有大量小文件,就会产生大量的maptask,处理效率极其低下。 优化策略 (1)最好的办法,在数据处理系统的最前端(预处理/采集),将小文件先合并成大文件,再上传到HDFS做后续分析。 (2)补救措施:如果已经是大量小文件在HDFS中了,可以使用另一种I...

weixin_45500051的博客 222

大量小文件的优化策略

默认情况下,TextInputFormat对任务的切片机制是按照文件规划切片的,不管文件大小,都会有一个单独的切片,都会交给一个maptask,此时如果有很多小文件就会产生大量的maptask,导致处理效率低下 优化1 最好的办法,在数据处理系统的最前端(预处理/采集)就将小文件合并成大大文件再上传到HDFS做后续分析 优化2(补救方案),如果在hdfs上已经存在大量小文件,...

afei2530的博客 268

【图文详细 】HDFS面试题:当小文件数量过多时,如何合并小文件

当每个小文件数据量比较小的时候,可以通过命令的方式进行小文件的合并如: hadoop fs -cat hdfs://cdh5/tmp/lxw1234/*.txt | hadoop fs -appendToFile - hdfs://cdh5/tmp/hdfs_largefile.txt,当数据量比较大的时候建议使用MR进行小文件的合并...

谦卑t 4166

MapReduce中大量小文件是如何产生的?如何优化?

在分布式的架构中,分布式文件系统HDFS,和分布式运算程序编程框架mapreduce。 HDFS:不怕大文件,怕很多小文件 mapreduce :怕数据倾斜 那么mapreduce是如果解决多个小文件的问题呢? mapreduce关于大量小文件的优化策略 (1) 默认情况下,TextInputFormat对任务的切片机制是按照文件规划切片,不管有多少个小文件,都会是单独的切片,都会交给一个maptask,这样,如果有大量的小文件 就会产生大量的maptask,处理效率极端底下 (2)优化策略 最好的方法:在

Aying_seeyou的博客 1090

MapReduce大量小文件问题

1.默认情况下,TextInputformat对任务的切片机制是按文件规划切片,不管文件多小,都会是一个单独的切片,都会交给maptaskz这样,如果有大量小文件,就会产生大量的maptask,处理效率及其低下2.优化方法:最好的办法:在数据处理系统的最前端(预处理/采集),就将小文件合并成大文件,再上传到HDFS做后续分析补救措施:如果已经是大量小文件存在hdfs中了,可以使用另一种Iinput...

weixin_41507573的博客 1794

深度解析:HDFS 为什么不适合存储大量小文件?

很多初学 HDFS 的同学会疑惑:既然 HDFS 可以存放任意大小文件,生产环境却强烈禁止大量小文件直接入库?课堂和面试高频问题:小文件究竟会带来什么致命影响?本文结合课件案例,从NameNode 内存压力、磁盘 IO 性能两大核心痛点讲清楚,附带数值举例,方便记忆。零散小文件:吃掉 NameNode20GB 内存合并大文件:仅消耗1.2MB 内存大量小文件会快速耗尽 NameNode 内存上限,NameNode 成为整个集群瓶颈,无法支撑更多业务存储。

2301_79980425的博客 339
上一篇: JDBC java代码归纳(类比Zookeeper代码)
下一篇: MapReduce 归并排序利用之高效TopN案例
闻香识代码
博客等级 码龄12年 314粉丝 223原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值