`
youli9056
  • 浏览: 3722 次
  • 性别: Icon_minigender_1
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

关于hadoop的maptask数量

阅读更多
今天看hadoop的JobClient的源码,在JobClient的init(JobConfig)函数中当mapred.job.tracker的值为默认值或者"local"时,将JobConfig的mapred.map.tasks设置为了1。觉得是不是太武断了点,不过在看JobConfig.setNumMapTasks(int)的注释时发现是这样说的:
这个MapTask数量的值设置只是对hadoop框架的提示,并不起决定作用。
实际上map task的数量依赖于InputFormat的getSplits生成的InputSplit的数量。因此经常使用定制的InputFormat来准确的控制map task的数目。换句话说map的数目依赖于输入的总大小(输入的block数)。基于文件的InputFormat的主要功能就是根据输入文件的总大小将它切分为逻辑上的InputSplit。对于分块的大小,输入文件所在的文件系统的块大小是其上限,下限可以通过mapred.min.split.size来设置。因此如果有10TB的数据且块大小为128M,那么将会产生82000(我算的是81920)个map除非setNumMapTasks(int)设置得更多。(problem:如果map数设为了90000,那么多出来的map干什么了?没有数据了啊!难道什么都不做,待进一步分析)
对于一个合理的并行程度每个节点的map数量应该大约在10-100个(对于不太消耗cpu的map task 可以有300个)。需要注意的是Task的建立是需要时间的,因此在并行度许可的情况下应该使用尽量少的map来运行。

    TaskSplitMetaInfo[] splits = createSplits(jobId);
    if (numMapTasks != splits.length) {
      throw new IOException("Number of maps in JobConf doesn't match number of " +
      		"recieved splits for job " + jobId + "! " +
      		"numMapTasks=" + numMapTasks + ", #splits=" + splits.length);
    }
    numMapTasks = splits.length;

这样看来map的数量与JobConfig的mapred.map.tasks的值没有关系,依据的是split的数目
0
4
分享到:
评论
2 楼 youli9056 2012-08-27  
superlxw1234 写道
(problem:如果map数设为了90000,那么多出来的map干什么了?没有数据了啊!难道什么都不做,待进一步分析) 设置为90000个是不起作用的。。

嗯,我刚看到了。在JobInProgress的initTasks中有这样的一段代码:
TaskSplitMetaInfo[] splits = createSplits(jobId);
    if (numMapTasks != splits.length) {
      throw new IOException("Number of maps in JobConf doesn't match number of " +
      		"recieved splits for job " + jobId + "! " +
      		"numMapTasks=" + numMapTasks + ", #splits=" + splits.length);
    }
    numMapTasks = splits.length;

这样看来map的数量与JobConfig的mapred.map.tasks的值没有关系,依据的是split的数目
1 楼 superlxw1234 2012-08-27  
(problem:如果map数设为了90000,那么多出来的map干什么了?没有数据了啊!难道什么都不做,待进一步分析) 设置为90000个是不起作用的。。

相关推荐

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

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

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

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

    提高hadoop的mapreduce job效率笔记

    当某些 Task 运行缓慢时,Hadoop 可以启动额外的 Task 实例来尝试替换它们。这有助于减少整体作业时间,但也可能浪费资源。因此,合理配置推测执行阈值是必要的。 8. **Shuffle阶段优化**: 优化 Shuffle 阶段的...

    hadoop作业调优参数整理及原理

    - **Merge过程**:MapTask结束后,所有溢写文件会被合并成一个文件,`io.sort.factor`参数控制合并时的最大并行流数量,影响磁盘读写次数。 2. **Combiner优化** - **min.num.spill.for.combine**:当spill文件...

    Hadoop任务调度器

    一个TaskTracker可以有多个mapslot和reduceslot,具体数量由参数mapred.tasktracker.[map|reduce].tasks.maximum配置。这些slot资源被调度器用来分配给不同作业中的任务。 Hadoop的三级调度策略包括:队列、作业和...

    Hadoop技术-MapReduce工作原理.pptx

    **MapTask并行度**:MapTask的数量由InputFormat切片机制决定,直接影响作业的并行度和效率。适当的切片大小能最大化并行度,避免过多的磁盘I/O。 **ReduceTask运行流程:** 1. **数据拷贝**:Reduce进程启动数据...

    Hadoop学习总结之四:Map-Reduce过程解析

    - **任务初始化**:JobTracker根据作业配置文件中的信息,计算出所需的MapTask和ReduceTask的数量,并为每个任务分配初始状态。 - **任务分配**:根据TaskTracker的心跳消息,JobTracker会了解各个节点的资源状况,...

    hadoop 配置项的调优

    若输入数据量巨大,过多的Map Task会增加网络传输负担,对Job Tracker造成压力。可以通过调整**mapred.min.split.size**来控制Split的最小大小,从而影响Map任务的数量。 5. **mapred.compress.map.output**:启用...

    Hadoop关于处理大量小文件的问题和解决方法.docx

    默认情况下,每个Map Task处理一个Block的数据,小文件会导致大量Map Task的生成,每个Task都需要消耗一定的资源。这不仅增加了Job的启动时间和计算成本,还可能导致整体处理速度大幅下降。 为了解决这些问题,...

    hadoop源码解析-Job提交.pdf

    通过理解这些源码细节,我们可以更好地掌握Hadoop作业的生命周期,从Job提交到MapTask和ReduceTask的执行,这对于优化大数据处理性能和调试Hadoop应用程序至关重要。这些深入的源码分析对于开发人员和系统管理员来说...

    Hadoop平台技术 排序操作案例.docx

    总结来说,Hadoop的排序机制是通过MapTask和ReduceTask的组合操作实现的,而自定义排序则需要实现WritableComparable接口并重写compareTo方法。这种灵活性使得用户可以根据具体业务需求对数据进行复杂排序,从而优化...

    MapTask阶段shuffle源码分析

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

    Hadoop配置文件表(如需要请下载附件)

    这篇博客“Hadoop配置文件表”虽然没有提供详细的描述,但从标题我们可以推断,它可能包含了关于Hadoop系统中各种配置文件的详细信息。这些配置文件对于理解和优化Hadoop集群的性能至关重要。 Hadoop的核心组件主要...

    最新Hadoop的面试题总结

    - 切片的大小会影响MapTask的数量,进而影响整个作业的性能。 以上内容涵盖了Hadoop的基本概念、运行模式、生态系统组件、集群运行的关键进程以及数据处理中的序列化和切片机制,这些都是面试中常见的问题,理解和...

    Hadoop C++ 扩展

    尤其是当任务数量巨大时,Hadoop系统中的Java虚拟机(JVM)在节点内存管理方面显得不够高效。由于Java的垃圾回收(Garbage Collection, GC)机制,当达到某个阈值后才回收内存,这导致在多JVM并行运行的情况下,内存管理...

    java大数据作业_1云计算、大数据、hadoop

    - Map Task Capacity:Map任务的总处理能力。 - Reduce Task Capacity:Reduce任务的总处理能力。 - Queue Name:任务队列的名称,用于资源分配。 10. 启动一个DataNode的步骤: - 首先确保Hadoop环境已经正确...

    Hadoop源代码分析

    9. **MapReduce优化**:源代码分析可以帮助我们了解如何优化MapReduce作业,例如减少数据 shuffle、提高数据本地化、调整Task数量等。 10. **实战应用**:理解Hadoop源代码对于实际项目中的问题排查、性能调优具有...

    Hadoop配置文档

    这个“Hadoop配置文档”涵盖了关于如何设置和优化Hadoop环境的关键知识点。在深入探讨之前,我们需要明确Hadoop的基本架构,它主要由Hadoop Distributed File System (HDFS) 和 MapReduce 两大部分组成。 1. **...

    Hadoop集群测试报告.pdf

    - `mapreduce.task.io.sort.mb` 和 `mapreduce.task.io.sort.factor`: 控制排序阶段使用的内存以及可以同时进行排序的数据分区数量。 - `mapreduce.reduce.shuffle.parallelcopies` 和 `mapreduce.reduce.shuffle....

Global site tag (gtag.js) - Google Analytics