新旧版本FileInputFormat获得输入分片的不同

在 SAP SD 模块里,销售订单号既可以由系统“自动”产生,也可以由用户“手工”输入,核心取决于“号码段(Number Range)”与“订单类型(Sales Document Type)”这两处配 SAP销售订单编号配置指南:系统提供内部自动编号和外部手工编号两种方式,通过VN01定义号码段(内部/外部),VOV8分配给订单类型并设置"ExtNo.Rq"选项即可切换。高阶应用支持灵活编号(如加前缀)或通过增强出口完全自定义编号规则。配置时需注意号码段创建、分配及传输问题,常见故障包括号码范围不存在或配置错误。核心是"号码段+订单类型"的组合控制编号生成方式,满足从简单到复杂的业务需求。 阅读详情


有接触过hadoop的都应该清楚InputFormat 里有个getSplits方法,用来获得输入分片,并最终影响map task的数量。网上关于split的描述千奇百怪,各家说法都不一样,前几天一个老师跟我讲的FileInputFormat的 split的概念和我脑子里一直记得的split的概念不一样,着实让我困扰,甚至开始怀疑人生了。。。

今天把新旧版本的FileInputFormat的源码拿出来翻看了一下,才算明白了其中的道理,其实大家说的都没错,只是有些人说的是老的API的原理,有些人说的是新的API的原理。

(FileInputFormat老的在 org.apache.hadoop.mapred包下面,新的在org.apache.hadoop.mapreduce.lib.input包下面)。

老版定义:public InputSplit[] getSplits(JobConf job, int numSplits)

新版定义:public List<InputSplit> getSplits(JobContext job)

从定义上就有所区别了,老的有个numSplits参数,这个参数在JobClient中可以看到:

    org.apache.hadoop.mapred.InputSplit[] splits =
    job.getInputFormat().getSplits(job, job.getNumMapTasks());

是用job.getNumMapTasks()获得的,即mapred.map.tasks指定的值,默认是1:  public int getNumMapTasks() { return getInt("mapred.map.tasks", 1); }


这个值在老版中是用来确定目标split大小的: long goalSize = totalSize / (numSplits == 0 ? 1 : numSplits);

totalSize是输入的所有文件的总大小,即是一个我们期望的split分片大小。


我们再来看看最终splitSize的算法,

老版:long splitSize = computeSplitSize(goalSize, minSize, blockSize);=Math.max(minSize, Math.min(goalSize, blockSize));

新版:long splitSize = computeSplitSize(blockSize, minSize, maxSize);=Math.max(minSize, Math.min(maxSize, blockSize));

算法是相同的,只是传进去的参数就有非常大的差别了。

老版的第一个参数是goalSize即通过numSplits算出来的,所以调整mapred.map.tasks这个参数会对map数量会有影响,当然我们还可以调整minSize,由mapreduce.input.fileinputformat.split.minsize决定。mapred.map.tasks参数越大,goalSize就越小,当小于blockSize的时候,map的数量就会变多了。

新版的接口已经没有这个参数了,第一个参数变成了blockSize即块的大小了。调整splitSize主要通过调整minSize和maxSize来实现了。minSize由mapreduce.input.fileinputformat.split.minsize决定,maxSize 由mapreduce.input.fileinputformat.split.maxsize决定。当maxSize小于blockSize的时候,map的数量就变多了。

另外新老版本中都有这个逻辑:

        while (((double) bytesRemaining)/splitSize > SPLIT_SLOP) {
          String[] splitHosts = getSplitHosts(blkLocations,
              length-bytesRemaining, splitSize, clusterMap);
          splits.add(makeSplit(path, length-bytesRemaining, splitSize,
                               splitHosts));
          bytesRemaining -= splitSize;
        }

里面有一个SPLIT_SLOP=1.1,即允许有10%的溢出,由于是按照单个文件进行分片的,为了避免一个太小的分片存在,所以在最后一个分片中允许溢出10%,即最后一个分片的大小可能大于splitSize,但是一定<=1.1*splitSize。


环形平滑标签(Circular Smooth Label, CSL)技术详解 环形平滑标签(CSL)是一种优化算法,旨在解决旋转目标检测中角度预测的边界问题。通过将角度回归转化为分类任务,并利用窗口函数平滑标签分布,CSL有效处理了角度周期性的梯度突变问题。其核心原理包括角度离散化和平滑标签编码,通过高斯、矩形、三角等窗口函数生成概率分布。CSL在技术实现上涉及标签转换流程、模型结构调整和损失函数优化,显著提升了检测精度和稳定性。在DOTA数据集上的实验表明,CSL在mAP和角度误差方面优于传统方法。应用场景包括遥感图像分析、自动驾驶和工业质检,部署时需注意旋转NMS编译和ONNX导 阅读详情

相关推荐

简化神经元模型6 -- Hindmarsh-Rose Model

简化神经元模型 6 Hindmarsh-Rose Model

weixin_73557167的博客 1425

MapReduce组件总结

1. HDFS 1.1 简介 HDFS是一个分布式文件系统,用于存储大且多的文件。适合一次写入,多次读出的场景,且不支持文件的修改。适合用来做数据分析。 1.2 优点 高容错:数据会自动拷贝副本,当某一个副本丢失,它也可以自动恢复 适合处理大数据:数据规模可以支持GB,TB,甚至PB级别数据。 可构建在廉价的机器上,成本低。 1.3 缺点 不支持低延迟数据访问 无法高效的存储小文件:会占用NameNode大量内存来存储文件目录和块信息,而NameNode的内存是有限的 不支持并发写入文件,

weixin_38312502的博客 2792

【Excel VBA 编程】批量核对两张表格数据,行和列显示顺序均被打乱

利用数据字典在 Excel 中进行表格数据的核对,该表格含有多行多列,并且行和列顺序是打乱的,批量核对数据后将差异输出

wei1019的专栏 1291

MapReduce编程组件之InputFormat(1)

具体的子类对象是由InputFormat决定的,默认的输入格式是TextInputFormat,因此默认的RecordReader也是相对应的LineRecordReader。从MapContentImpl类中的方法可见,content.getCurrentKey(),content.getCurrentValue()以及nextKeyValue(),其实都是对RecordReader方法的封装,即MapContext是直接使用传入的RecordReader来对InputSplit进行“K-V对”读取的。

Jenny19992018的博客 2528

即插即用!5分钟为你的SNN模型添加频谱注意力(DCT-SA模块实战)

本文介绍了如何为脉冲神经网络(SNN)快速集成即插即用的DCT-SA频谱注意力模块。该模块利用离散余弦变换(DCT)在频率域自适应加权特征,能有效提升模型对纹理、边缘的感知能力,并在CIFAR10-DVS等数据集上实现分类精度提升与脉冲发放率下降。文章以SpikingJelly框架和ResNet19为例,提供了详细的代码实现、集成步骤及参数调优实战指南。

kotlin6android的博客 608

全志D1s RISC-V开发板硬件设计与Linux启动全流程解析

RISC-V架构是当前国产嵌入式处理器演进的核心方向,其启动流程涵盖从BootROM、SPL到U-Boot及Linux内核的多级引导机制。理解该流程需掌握DDR初始化、设备树适配、电源时序控制等底层原理,技术价值在于构建可追溯、可调试、可量产的最小可行系统(MVS)。典型应用场景包括边缘AI推理终端、工业HMI和轻量级网关等对成本与开源性敏感的领域。本文以全志D1s平台为载体,深入剖析基于玄铁C906内核的RISC-V SoC在真实硬件上的启动验证、电源完整性设计与Linux全链路开源实践。

weixin_32306683的博客 356

FileInputFormat详解

FileInputFormat 详解笔记

空断的博客 1万+

Wider Face+YOLOV7人脸检测

使用Wider Face数据集训练YOLOV7

chen_znn的博客 8406

FileInputFormat类中split切分算法和host选择算法介绍

在hadoop源码的org.apache.hadoop.mapred包中,有个FileInputFormat类,这个类的主要作用是提供统一的getSplits函数。该函数实现中最核心的两个算法是split切分算法 和 host选择算法。 1、什么是split? 它是在逻辑上对输入数据进行的分片,并不会在磁盘上将其切分成分片进行存储。每个split都作为一个独立单位分配给一个task去

你心中的灯 3584

不用SE63逐个翻译!ABAP函数LXE_OBJ_TEXT_PAIR_WRITE批量处理TCODE描述的3种姿势

本文介绍了三种利用ABAP函数LXE_OBJ_TEXT_PAIR_WRITE批量翻译SAP事务码(TCODE)描述的高效方案,旨在替代SE63逐个翻译的低效操作。内容涵盖从基础循环、Excel导入到全自动程序集成的实现方法,帮助开发者显著提升批量翻译效率,并深入解析了SAP翻译体系的核心原理与实战技巧。

weixin_42593130的博客 659

桌面运维工程师面试题汇总(高频完整版)

岗位,覆盖:电脑硬件、系统安装与故障、网络、办公软件、安全、AD域、打印机、日常排错、服务意识。

老韩的Linux云计算架构师进阶之路 908

【Mapred】输入数据的分片实质

http://blog.youkuaiyun.com/tracymkgld/article/details/17578593提到作业的提交的时候,输入数据需要分片,当时提到有新旧两种分片方式,那么这里就来看看什么是新方法,与旧方法有什么不同。 hadoop1.0.3依据参数  mapred.mapper.new-api的配置选择不同的切片方法。 同样在http://blog.youkuaiyun.com/tracym

tracymkgld的专栏 959

【部署】Docker部署OpenClaw及常见问题解决(win11)

给AI单独开一个隔离的小容器,AI执行所有命令、下载文件都在这个小盒子里,就算AI被诱导执行危险命令,也不会影响你Win11本机的文件和系统,是必开的安全功能。Docker容器里的OAuth回调,会尝试在你Win11本机的1455端口捕获认证信息,但容器和Win11本机的网络隔离,导致浏览器访问不到这个回调地址。「挂载」就是把你Win11本机的文件夹,共享给容器里的「虚拟小电脑」,两边都能读写文件,比如你想让AI操作你D盘里的代码文件,就需要挂载。

海兰 4696

Idea里面老版本MapReduce设置FileInputFormat参数格式变化 ...

我们随便百度一个经典的MapReduce程序----wordcount的时候,在设置job文件输入路径和输出路径参数时,会看到别的博主会这么写: Configuration conf = new Configuration(); Job wordCountJob = Job.getInstance(conf); //省略。。。。 FileInputFor...

测试0901-1 444

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

SpringBoot+Vue+MyBatis+MySQL文旅网站管理系统开发实践解析

前后端分离架构目前已是企业级应用开发的主流模式,其核心理念是将后端的数据服务与前端界面解耦,各自独立开发部署。SpringBoot以其“约定优于配置”简化了后端工程搭建,Vue则通过组件化开发提升了界面复用效率,配合MyBatis的灵活SQL控制与MySQL的稳定存储,构成了一套适合内容、交易、运营混合业务的轻量级技术栈。该技术栈在文旅网站管理系统中应用尤为典型——综合了线路预订、订单管理、内容展示等复杂业务场景,既要求前端交互体验流畅,也要求后端接口具备安全可靠的权限设计与事务控制。文章正是基于这样的技术

weixin_33889245的博客 496

pscad IEEE标准系统搭建说明

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

Hadoop源码解析之Mapper数量计算公式

前言 据说,自0.20.0版本开始,Hadoop同时提供了新旧两套MapReduce API,并在后续版本中也同时支持这两种API的使用。新版本MR API在旧的基础进行了扩展,也制定了新的split计算方式。新版本MR API在包org.apache.hadoop.mapreduce及其子包中,而旧版本MR API则在包org.apache.hadoop.mapred及其子包中。 本文主要从源码角度,简单谈谈新旧MR API中常用的FileInputFormat类(TextInputFormat的父类)

TomAndersen的博客 490

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

MapReduce-day03-第三章框架原理-3.1InputFormat数据输入

1:上图理解 1:Map阶段是在数据源通过InputFormat来设置通过什么样的一个方式来读取数据,比如之前的数据一行一行的方式读取,读取完之后交给Mapper,即用户编写的业务逻辑代码进行处理。 2:然后通过Shuffle把Mapper阶段的数据拉到Reducer阶段,此阶段可以对数据进行排序,分区,压缩,合并等功能。 3:Reducer处理完之后,通过OutputFormat可以对输出格式进行设置,比如设置把处理之后的数据写道HBase,数据库...

AlphaG的博客 335

Hadoop中新老版本MapReduce 中API对比

新老版本MapReduce 中InputFormat、OutputFormat,Job API 对比,以JobBuilder函数为例:

qq_34531825的博客 1630

MapReduce InputFormat & 工作流程

思考:1G 的数据,启动 8 个 MapTask,可以提高集群的并发处理能力。框架默认的 TextInputFormat 切片机制是对任务按文件规划切片,不管文件多小,都会是一个单独的切片,都会交给一个 MapTask,这样如果有大量小文件,就会产生大量的MapTask,处理效率极其低下。(7)合并成大文件后,Shuffle 的过程也就结束了,后面进入 ReduceTask 的逻辑运算过程(从文件中取出一个一个的键值对 Group,调用用户自定义的 reduce()方法)

追寻心的步伐 275

MapReduce 新旧WordCount 代码解读

一、就API

鲍礼彬的优快云博客 ~_~ 894

Cannot resolve method ‘setInputPaths(org.apache.hadoop.mapreduce.Job, org.apache.hadoop.fs.Path)‘

发生错误的原因是导错了包 JobConf是旧API使用的,而我们需要的是新API 所以使用 import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; 代替原有的 import org.apache.hadoop.mapred.FileInputFormat; 即可

爱人io 2329

【Hadoop】MapReduce编程Demo新旧

1.wordcount。 import java.io.IOException; import java.util.Iterator; import java.util.StringTokenizer; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apa...

XVII 的博客 510

3、WordCount源码分析

通过对比新旧两个 WordCount 示例,可以清晰地看到 Hadoop MapReduce 新 API(包)相对于旧 API(

ywl470812087的博客 10万+

MapReduce中的InputFormat(1)概述

1 概念InputFormat用于描述输入数据的格式,提供以下两个功能:A、数据切分:按照某种策略将输入的数据切分成若干split,以便确定Map Task个数,以及对应的Split。B、提供数据:为Mapper提供输入数据,对于给定split,能将其解析为<k,v>格式。即<K1,V1>。 2 新老版本 老版本:package...

weixin_33730836的博客 300

三-中下-0, MapReduce - Job提交和切片流程源码详解

3.1.2 Job提交流程源码和切片源码详解 3.1.2.1 Job提交流程源码详解 1. waitForCompletion() 我们从Driver类, job.waitForCompletion处打断点进入方法内. public boolean waitForCompletion(boolean verbose) throws IOException, InterruptedException, ClassNotFoundException { ////判断状态是否为`DEFI

菜菜的大数据开发の路 941
上一篇: MapReduce应用中CombineFileInputFormat原理与用法
下一篇: hadoop mapreduce 对于压缩文件的支持利与弊
Kelvin-Liang
博客等级 码龄18年 9粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值