`
sungyang
  • 浏览: 21077 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

设定InputSplitSize确定Map Task数

阅读更多

都知道运行job时可以通过Job.setNumReduceTasks(int tasks)来设定Reduce任务数,那么Map任务数如何设定呢,API中并没有提供像直接指定Reduce任务数那样来直接指定Map任务数的方法,先来理下逻辑:

首先,文件在上传到Hdfs文件系统的时候,被切分成不同的Block块(默认大小为128MB,这里是hadoop2,hadoop1是64M)。但是每个Map处理的分块有时候并不是系统的物理Block块大小。实际处理的输入分块的大小是根据InputSplit来设定的,那么InputSplit是怎么得到的呢?

看源码可知计算splitSize过程以下是部分代码,可从org.apache.hadoop.mapreduce.lib.input.FileInputFormat查看,该版本为2.6:

public static final String SPLIT_MAXSIZE = "mapreduce.input.fileinputformat.split.maxsize";

public static final String SPLIT_MINSIZE =  "mapreduce.input.fileinputformat.split.minsize";

//...

long minSize = Math.max(getFormatMinSplitSize(), getMinSplitSize(job));

long maxSize = getMaxSplitSize(job);

long splitSize = computeSplitSize(blockSize, minSize, maxSize);

protected long getFormatMinSplitSize() {

    return 1;

  }

public static long getMinSplitSize(JobContext job) {

    return job.getConfiguration().getLong(SPLIT_MINSIZE, 1L);

  }

public static long getMaxSplitSize(JobContext context) {

    return context.getConfiguration().getLong(SPLIT_MAXSIZE,Long.MAX_VALUE);

  }

protected long computeSplitSize(long blockSize, long minSize,long maxSize) {

    return Math.max(minSize, Math.min(maxSize, blockSize));

  }

因此可以通过如下设定来确定map task数:

FileInputFormat.setMaxInputSplitSize(Job, 1024*1024*size);

FileInputFormat.setMinInputSplitSize(Job, 1l);

 

分享到:
评论

相关推荐

    Hadoop源代码分析(MapTask)

    Hadoop源代码分析(MapTask) Hadoop的MapTask类是Hadoop MapReduce框架中的一部分,负责执行Map任务。MapTask类继承自Task类,是MapReduce框架中的一个重要组件。本文将对MapTask类的源代码进行分析,了解其内部...

    Hadoop源代码分析(MapTask辅助类,III)

    ### Hadoop源代码分析——MapTask辅助类输出机制详解 #### 概述 本文将深入探讨Hadoop MapReduce框架中的MapTask辅助类中与键值对(Key-Value,简称KV)输出相关的源代码实现细节。这部分内容对于理解Hadoop内部...

    Hadoop源代码分析(MapTask辅助类 I)

    ### Hadoop MapTask辅助类源代码分析 #### 一、概述 Hadoop作为一个分布式计算框架,其核心组件之一是MapReduce。MapReduce负责处理大规模数据集的并行运算任务,而MapTask作为MapReduce的核心组成部分之一,其...

    Hadoop源代码分析(MapTask辅助类,II)

    在Hadoop中,MapTask是MapReduce框架的关键组件,负责执行Mapper阶段的工作。MapTask辅助类,特别是MapOutputBuffer,是Mapper输出数据管理的核心部分。本文将继续深入分析MapOutputBuffer的内部实现,以便理解...

    MapTask工作机制图文详解

    MapTask工作机制图文详解 MapTask工作机制是Hadoop MapReduce框架中的一个关键组件,负责将输入数据处理并输出结果。本文将详细介绍MapTask工作机制的五个阶段:Read阶段、Map阶段、Collect收集阶段、Spill阶段和...

    MapTask阶段shuffle源码分析

    MapTask阶段shuffle源码分析 MapTask阶段shuffle源码分析是Hadoop MapReduce框架中一个重要的组件,它负责将Mapper的输出数据进行分区、排序和缓存,以便于后续的Reduce任务处理。在本文中,我们将深入探讨MapTask...

    03.mapreduce数据倾斜--利用Combiner组件 maptask端局部聚合数据来减轻倾斜影响.mp4

    03.mapreduce数据倾斜--利用Combiner组件 maptask端局部聚合数据来减轻倾斜影响.mp4

    MapReduce详解Shuffle过程

    在map端,map task将输出结果存储在内存缓冲区中,当缓冲区快满的时候将缓冲区的数据以一个临时文件的方式存放到磁盘,然后对磁盘中这个map task产生的所有临时文件做合并,生成最终的正式输出文件。 在reduce端,...

    C语言头文件 MAP C语言头文件 MAP

    C语言头文件 MAPC语言头文件 MAPC语言头文件 MAPC语言头文件 MAPC语言头文件 MAPC语言头文件 MAPC语言头文件 MAPC语言头文件 MAPC语言头文件 MAPC语言头文件 MAPC语言头文件 MAPC语言头文件 MAPC语言头文件 MAPC语言...

    Map拆分List拆分

    在大数据场景下,如果一个List包含数百万甚至数十亿条记录,直接处理可能会导致性能瓶颈。因此,我们需要将其拆分为多个子List,每个子List可以在不同的计算节点上独立处理。例如,在Spark的RDD(弹性分布式数据集)...

    java循环Map java迭代Map

    Map a = new HashMap(); //方法一 Iterator it = a.entrySet().iterator(); while (it.hasNext()) { Map.Entry pairs = (Map.Entry) it.next(); System.out.println(pairs.getValue()); } //以下方法需要jdk5以上...

    map.toString()后转换成Map类型

    ### Map.toString()后转换成Map类型的实现方法及解析 在Java编程中,有时我们需要将一个`Map`对象转换为字符串形式进行存储或传输,而在接收端又需要将该字符串重新转换回`Map`对象以便进一步处理。本篇将详细介绍...

    Map (c++实现的简易map)

    在C++编程中,`Map`是一种非常重要的数据结构,它允许我们以键值对的形式存储数据,其中每个键(key)都是唯一的,并且通过这个键可以快速访问对应的值(value)。`Map`通常用于存储关联数组,它提供了一种灵活的...

    map.zip_电机_电机MAP_电机效率_电机效率map_绘制电机MAP

    由于文件列表只有一个"map"项,可能是程序主文件或数据文件,具体功能和使用方法需要进一步查看文件内容来确定。 总的来说,电机效率MAP的绘制是一个结合了物理原理、数据处理和可视化技术的过程,对于理解和优化...

    joinmap4.0软件

    JoinMap 4.0允许用户在连锁图上进行QTL扫描,通过LOD曲线和阈值设定,识别出影响特定性状的基因区域。 4. 结果可视化:软件内置图形化界面,可以直观地展示连锁图、QTL图谱及统计结果,方便研究人员理解和解释数据...

    Mapkey非常好用的键盘插件

    4. **热键冲突解决**:Mapkey具有智能检测和处理热键冲突的功能,确保用户设定的快捷键在多软件环境中不会产生冲突,保证了操作的连贯性和一致性。 5. **个性化设置**:用户可以根据个人喜好调整Mapkey的界面布局,...

    MapTask:第一项任务

    MapTask =========== 这是我必须完成的第一项任务。 任务是使用Google地图创建应用程序,并在当前设备的位置上使用标记(使用GPS),并在地图下方的文本字段中显示当前位置的经度和纬度。 使用了Google Map API v2。...

    对Map的key和value进行排序

    对Map的key和value进行排序 对Map的key和value进行排序是Java编程中非常重要的一部分。Map是Java集合框架中的一种数据结构,用于存储键值对。然而,在实际应用中,我们经常需要对Map中的key或value进行排序,以满足...

    taskMap.rar_任务监控_多任务编程

    "taskMap.rar_任务监控_多任务编程"的资源显然是一个针对多任务编程环境的任务监控工具,用MATLAB语言编写。MATLAB,全称“矩阵实验室”,是一款强大的数学计算软件,也支持编写复杂的应用程序。 `taskMap.m`是...

    ResultSet 转为listmap

    ResultSet 转为 List<Map> ResultSet 转为 List<Map> 是一种常见的数据处理操作。在 Java 中,使用 JDBC 连接数据库时,通常会返回一个 ResultSet 对象,该对象包含了查询结果集的所有记录。为了方便数据处理和使用...

Global site tag (gtag.js) - Google Analytics