mapreduce 作业中 map/reduce 个数的计算

深入理解MapReduce:从Map到Reduce的工作原理解析 当谈到分布式计算和大数据处理时,MapReduce是一个经典的范例。它是一种编程模型和处理框架,用于在大规模数据集上并行运行计算任务。MapReduce包含三个主要阶段:Map、Shuffle 和 Reduce。** 阅读详情

1. 问题描述

   当在hadoop集群提交mapreduce作业时,map 和 reduce 的个数是如何计算的?

 

2. map个数的计算

   2.1  map个数的计算和分片大小(splitSize)是有关系的,所以我们先看看splitSize的计算公式:

 long splitSize =   Math.max(minSize, Math.min(maxSize, blockSize))
  2.2  计算公式参数说明及源码查看:

   minSize:  Math.max(1, mapreduce.input.fileinputformat.split.minsize配置的大小 默认是1)

  maxSize: mapreduce.input.fileinputformat.split.maxsize 配置的大小,默认为Long.MAX_VALUE

  blockSize: hdfs快的大小,看集群配置 e.g. 128M  

  当我们计算出splitSize后,遍历 FileInputFormat.addInputPath 配置路径中的每个文件,如果文件/ splitSize  > 1.1 ,则取splitSize 作为一个map输入分片,剩下的文件大小 继续判断  文件/ splitSize  > 1.1 ,直到 <= 1.1   ;如果文件/ splitSize  <= 1.1 则 直接将该文件作为一个map输入分片 。 文字表述有点饶,直接上源代码(FileInputFormat类):

  代码很简单,我大致列了8 个步骤,下面对8个步骤进行说明:

        步骤1:计算minSize,见上面参数说明

        步骤2: 计算maxSize ,见上面参数说明

        步骤3: 遍历FileInputFormat.addInputPath路径中的文件,即我们配置的数据源

        步骤4: 判断文件是否是 可拆分的文件,如果文件不可拆分,则上述的公式不可用,不可拆分的文件包括压缩文件等

        步骤5: 计算splitSize 大小,见上面 splitSize 计算公式

        步骤6: while(剩余文件/ splitSize  > 1.1)  备注:SPLIT_SLOP=1.1 ,如果成立,则splitSize 作为一个map的输入,剩余文件大小:bytesRemaining -= splitSize ;

      步骤7: 跳出步骤6中的while循环后,如果剩余文件不为0,则剩下的文件单独作为一个map的输入

      步骤8: 如果文件是不可分的,则整个文件都当作一个map的输入

 

3. reduce个数的计算

    3.1  决定reduce个数的参数配置      

        reduce的个数,可以直接在client 代码中设置 e.g.  job.setNumReduceTasks(100) ; 即reduce的个数设置为100个,如果我们没有手动配置了,该如何计算呢?

      查看源代码 job.setNumReduceTasks(100),即配置 JobContext.NUM_REDUCES("mapreduce.job.reduce") 属性为参数n,源码:public void setNumReduceTasks(int n) { setInt(JobContext.NUM_REDUCES, n); } 即reduce的个数等于mapreduce.job.reduce 属性value。该属性的默认值为1,如果想要配置全局值,可以在mapred-site.xml 文件中配置。

 

4. 案例分析

    4.1  输入源( FileInputFormat.addInputPath)是按天 和 小时 分区的,格式是orc文件(可拆分),一个小时拆分成2个文件,每个文件都是1M~20M 不等,mapreduce.input.fileinputformat.split.minsize 和mapreduce.input.fileinputformat.split.maxsize 都没有配置,hdfs block size 为128M, 每次任务仅仅跑一天的数据。

     根据上述公式 计算可得:

      minSize =1;

      maxSize = Long.MAX.VALUE;  

      blockSize = 134,217,728 (128M);

     那splitSize = 128M;

因为一天的文件有48个,因为每个文件1M~20M,即每个文件用一个map处理,即有48个map

       4.2 mapreduce.job.reduce 在mapred-site.xml 文件中配置为112 ,如下:

      

且client 代码中没有手动设置setNumReduceTasks 数量,即reduce个数应该是112。 分析下后,查看job 的详细信息截图如下:

 和上述分析的一致
————————————————
版权声明:本文为优快云博主「hi蜗牛慢跑」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/lidaxueh_heart/article/details/82968286

Hadoop Map/Reduce教程 Hadoop Map/Reduce是一个使用简易的软件框架,基于它写出来的应用程序能够运行在由上千个商用机器组成的大型集群上,并以一种可靠容错的方式并行处理上T级别的数据集。一个Map/Reduce作业(job)通常会把输入的数据集切分为若干独立的数据块,由map任务(task)以完全并行的方式处理它们。框架会对map的输出先进行排序, 然后把结果输入给reduce任务。通常作业的输入和输出都会被存储在文件系统中。整个框架负责任务的调度和监控,以及重新执行已经失败的任务。 阅读详情

相关推荐

SIMPLIS仿真软件2.2-SIMPLIS快速入门2

SIMPLIS仿真软件2.2-SIMPLIS快速入门2导读 导读 本文承接上一篇文章。开始介绍SIMPLIS仿真部分。正如上一篇所讲的快速入门的定位,该文对SIMPLIS的三种分析模式不会很深入的讲解,只会记录下一些重要的设置和操作。对于SIMPLIS的三种分析模式的详细讲解,后面会专门撰写。如果读者还没有搭建上一篇文章中讲述的电路,那你可以点击这个链接免费下载所需的电路SIMPLIS_tutorial_buck_converter ,然后在这个电路的基础上继续进行以下操作。 ...

qq_44677482的博客 2万+

MapReduce 中 map 和 reduce 数量之间的关系

① Map 的数量通常是由 Hadoop 集群的数据块大小(输入文件的总块数)确定的,正常的 Map 数量的并行规模大致是每一个 Node 是10~100个。② 正常Reduce任务的个数应该是0.95或者1.75*(节点数*CPU数量)。(1)如果任务数是节点个数的0.95倍,那么所有的Reduce任务能够在 Map任务的输出传输结束后同时开始运行。(2)如果任务数是节点个数的1.75倍,那么高速

HeatDeath的博客 3630

自回归分布滞后模型 (ARDL)及 Stata 具体操作步骤

例如,Bahmani-Oskooee 和 Brooks(1999)研究了汇率波动与贸易收支之间的关系,发现汇率的变动在长期和短期内对贸易收支的影响存在差异,ARDL 模型能够有效地捕捉这种复杂的关系。它结合了自回归(Autoregressive,AR)模型和分布滞后(Distributed Lag,DL)模型的特点,能够同时考察变量之间的短期和长期关系。假设我们收集了一段时间内的居民消费和可支配收入数据,通过对这些数据进行分析和估计,可以得到模型的参数估计值,从而揭示消费与收入之间的短期和长期关系。

a519573917的博客 6093

hadoop中map和reduce的数量设置问…

map和reduce是hadoop的核心功能,hadoop正是通过多个map和reduce的并行运行来实现任务的分布式并行计算,从这个观点来看,如果将map和reduce的数量设置为1,那么用户的任务就没有并行执行,但是map和reduce的数量也不能过多,数量过多虽然可以提高任务并行度,但是太多的map和reduce也会导致整个hadoop框架因为过度的系统资源开销而使任务失败。所以用户在提交m

nuoline的专栏 2028

Go语言集成Ollama本地大模型:gollama库实战指南

在当今的AI应用开发中,大型语言模型(LLM)的集成已成为关键技术。其核心原理是通过API调用,将自然语言处理能力嵌入到各类应用中。从技术价值看,本地化部署的LLM解决了数据隐私、网络延迟和持续成本三大痛点,尤其适合处理敏感数据或对实时性要求高的场景。在工程实践中,开发者常使用专门的客户端库来简化与模型服务的交互,例如通过封装REST API、提供类型安全接口和流式处理支持,从而提升开发效率和代码健壮性。具体到Go语言生态,结合Ollama这一流行的本地大模型运行工具,可以实现完全离线、低延迟的AI功能集成

weixin_28728443的博客 604

别再只跑recon-all了!FreeSurfer实战:从T1图像到freeview可视化的完整避坑指南

本文详细解析FreeSurfer从T1图像处理到freeview可视化的全流程,包括环境配置、recon-all深度解析、高级可视化技巧及性能优化策略。特别针对常见错误提供解决方案,帮助用户高效完成MRI数据分析,避免常见陷阱。

weixin_33404102的博客 353

Hive的Map/Reduce数目如何确定

Hive的Map/Reduce数目如何确定Mapreduce中Mapper个数的确定Mapreduce中Reducer个数的确定 Mapreduce中Mapper个数的确定   在Map阶段读取数据前,FileInputFormat会将输入文件分割成Split。Split的个数决定了Map的个数。 影响Map个数,即Split个数的因素主要有:   1)HDFS中dfs.block.size的值,...

ThreeAspects的博客 1867

GAMES101学习-第8课进行shader的初步了解

详细理解课上展示的像素着色器GLSL,以及了解了API、OpenGL、DirectX到底是什么,还有shadertoy这个网站的初步探索。

qq_41835314的博客 1917

Mapreduce中Map与Reduce任务的个数

1、Map任务的个数 读取数据产生多少个Mapper?? Mapper数据过大的话,会产生大量的小文件,过多的Mapper创建和初始化都会消耗大量的硬件资源 Mapper数太小,并发度过小,Job执行时间过长,无法充分利用分布式硬件资源 Mapper数量由什么决定?? (1)输入文件数目(2)输入文件的大小(3)配置参数 这三个因素决定的。 输入的目录中文件的数量决定多少个map会...

雾幻的博客 1万+

FlinkCDC数据同步Bug——同步性能由于写入并行度限制无法提升问题的解决

使用FlinkCDC进行数据同步时,出现增量阶段写入并行度强制为1导致整体同步性能无法提升问题的解决方案

csdn_lan的博客 2077

Unity中语法糖带来的GC问题 ——那些看起来优雅、实际上在背后偷偷生垃圾的代码

*语法糖(Syntactic Sugar)**指的是编程语言中为了让代码更简洁、易读而提供的简便写法。比如C#中的foreachlambda表达式LINQ自动属性等。语法糖本身不是坏事,但在Unity等对GC敏感的环境下,要警惕语法糖带来的隐式内存分配。合理使用语法糖,关键场合用更“丑陋”但高效的写法,才能保证游戏流畅运行。下面我将更深入地分析Unity中语法糖导致GC的原理、具体场景、检测与优化技巧,并补充一些容易忽视的细节。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 516

组合键的辅助排序和统计以及split数量,map任务数量,reduce任务数量之间的关系

split的数量与map task的数量是相等的,有几个split就有几个map task。但reduce的数量与split和map task之间没有必然联系。reduce的数量与分区的数量有关系。要设置reduce的数量,可以通过定义新的分区类并重写其分区方法getPartition(),同时调用job.setNumReduceTasks(num)来实现。 输入一个文件,如果文件很小则只产生一...

ASN_forever的博客 1030

解锁VS2022!手把手教你本地部署Deepseek

在 VS2022 中本地部署 Deepseek,我们首先需要确保硬件资源的充足,如高性能的 GPU、大容量内存和高速存储等,这是模型稳定运行的基石。如果生成的摘要能够准确概括原文的核心内容,就表明 Deepseek 模型在文本分析方面的功能正常,部署稳定可靠。这对于开发者来说,能够大大提高开发效率,当遇到一些常见的功能实现时,可以借助 Deepseek 模型快速生成基础代码框架,减少手动编写的工作量。在大语言模型的蓬勃发展的当下,Deepseek 凭借其卓越的性能和创新的技术,已然成为该领域的佼佼者。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 1万+

mapreduce 作业中 map/reduce 个数的计算

1. 问题描述    当在hadoop集群提交mapreduce作业时,map 和 reduce 的个数是如何计算的?   2. map个数的计算    2.1  map个数的计算和分片大小(splitSize)是有关系的,所以我们先看看splitSize的计算公式: long splitSize = Math.max(minSize, Math.min(maxSize, blo...

lidaxue_heart的专栏 5908

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

MapReduce中的Map,Reduce个数设定

一、Map的个数     在map阶段读取数据前,FileInputFormat会将输入文件分割成spilt,而spilt的个数决定了map的个数(一个spilt分片对应一个map)。影响map个数的因素只要有:     1)文件的大小。比如,当文件大于128M(block默认值)而小于256M时,文件会被划分成两个spilt。     2)文件的个数。FileInputFormat按文件进...

Dzhantao的博客 1万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Hive mapreduce的map与reduce个数由什么决定?

文章目录1.MapTask的数量决定2.如何来调整MapTask的数量2.1 增加map的数量 : 调小maxsize (要小于blockSize才有效,比如128M)2.2 减少map的数量 : 调大minSize (要大于blockSize才有效,比如250M)2.3生产中一般不调整,但是要知道原理。3. ReduceTask的数量决定3.1 在执行hive shell的时候可以看到下列日志3.2 官网对这三个参数的解释3.3 通过源码分析 hive是如何通过方式一 动态计算reduce的个数的4.如何

lihuazaizheli的博客 1万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Map和Reduce 个数如何确定

基于org.apache.hadoop.mapreduce包新版API 一、Map 1、Map个数的确定 map的个数等于split的个数。我们知道,mapreduce在处理大文件的时候,会根据一定的规则,把大文件划分成多个,这样能够提高map的并行度。 划分出来的就是InputSplit,每个map处理一个InputSplit.因此,有多少个InputSplit,就有多少个map数。 2、谁负责...

weixin_42410172的博客 3745

自己设置mapreduce程序的map个数和reduce个数

设置reduce个数(一个reduce生成一个文件) 1、如果不指定reduce个数,hive会基于一下两个参数自动计算 (1)hive.exec.reducers.bytes.per.reducer 这是每个reduce处理的数据量,默认为1G=1000000000 (2)hive.exec.reducers.max(每个任务的最大reduce个数,默认1009) reduce个数=min(参数...

weixin_42874157的博客 3393

MapReduce中的map与reduce

博客园 首页 新随笔 联系 管理 订阅 随笔- 50  文章- 1  评论- 0  MapReduce中的map与reduce     本文主要介绍MapReduce的map与reduce所包含的各各阶段         MapReduce中的每个map任务可以细分4个阶段:record reader、mapper、combiner和partitioner。map...

大JAVA解决方案 9449

Hive如何设置Map个数和Reduce个数

根据输入文件估算Reduce的个数可能未必很准确,因为Reduce的输入是Map的输出,而Map的输出可能会比输入要小,所以最准确的数根据Map的输出估算Reduce的个数。比如有一个127M的文件,正常会用一个map去完成,但这个文件只有一个或者两个小字段,却有几千万的记录,如果map处理的逻辑比较复杂,用一个map任务去做,肯定也比较耗时。从Hive的角度看,小文件会开很多map,一个map开一个JVM去执行,所以这些任务的初始化,启动,执行会浪费大量的资源,严重影响性能。...

weixin_47681855的博客 4240

MapReduce中map与reduce的个数

Map的个数 在map阶段读取数据前,FileInputFormat会将输入文件分割成split。split的个数决定了map的个数。 影响map个数,即split个数的因素主要有: HDFS块的大小,即HDFS中dfs.block.size的值。默认为128M文件的大小。文件的个数。FileInputFormat按照文件分割split,并且只会分割大文件,即那些大小超过HDFS块的大小

BestbpF的博客 1738

mapreduce设置map个数_mapreduce设置map内存

摘要   在map阶段读取数据前,FileInputFormat会将输入文件分割成split。split的个数决定了map的个数。 影响map个数,即split个数的因素主要有:   1)HDFS块的大小,即HDFS中dfs.block.size的值。如果有一个输入文件为1024m,当块为 256m时,会被划分为4个split;当块为128m时,会被划分为8个split。 2)文件的大小。当块为1...

weixin_40404189的博客 2753

Mapreduce和Hive中map reduce个数设定

Mapreduce中mapper个数的确定: Mapreduce中mapper个数的确定: 在map阶段读取数据前,FileInputFormat会将输入文件分割成split。split的个数决定了map的个数。 影响map个数,即split个数的因素主要有: 1)HDFS块的大小,即HDFS中dfs.block.size的值。如果有一个输入文件为1024m,当块为256m时,会被划分为4个split;当块为128m时,会被划分为8个split。 文件的大小。当块为128m时,如果输入文件为128m,会被

qq_36588424的博客 1526

【Hadoop】MapReduce原理剖析(Map,Shuffle,Reduce三阶段)

MapReduce是一种分布式计算模型,是Google提出来的,主要用于搜索领域,解决海量数据的计算问题。MapReduce的全套过程分为三个大阶段,分别是Map、Shuffle和Reduce。结合多篇资料,我最终确定划分11个小步骤来描述这个过程,在后续的内容中我也会结合一部分源码来进行剖析。

ccql's Blog 3998

彻底明白Hadoop map和reduce的个数决定因素

Hadoop map和reduce的个数设置,困扰了很多学习Hadoop的成员,为什么设置了配置参数就是不生效那?Hadoop Map和Reduce个数,到底跟什么有关系。首先他的参数很多,而且可能随着版本不同一些配置参数,会发生一些变化,但是只要我们搞懂核心问题,那么其它在变,我们都能确定map的个数和reduce的个数。 首先来说,我们通过配置,无论你说的什么配置,能否就...

等风等雨等你 3722
上一篇: 依赖注入框架Google Guice
下一篇: Hadoop常用端口和定义方法
架构师的清醒
博客等级 码龄14年 291粉丝 397原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值