`
gushuizerotoone
  • 浏览: 173820 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

关于map task和reduce task的个数

阅读更多
先引用几段话:

1.http://coderplay.iteye.com/blog/318602
11 楼 riddle_chen 2009-05-05   引用
jiwenke 写道

coderplay 写道sorry,理解能力太差, 我不是很明白你的意思.如果你是需要控制单个节点同时在执行的的mapper/reducer数.你可以通过修改slave节点配置中的mapred.tasktracker.map.tasks.maximum和mapred.tasktracker.reduce.tasks.maximum.至于总的mapper任务数,是由splits决定的,当然可以通过JobConf.setNumMapTasks(n)来增大它,但没多大意义.是我没有写清楚,我想控制总的mapper任务数,比如生成5个任务,每台机器跑一个这样的需求。我同意这是由splits决定的,所以这个问题就转换为怎样生成splits的问题,我看了代码,发现splits的生成个数是和文件的个数有关的 - 如果每个文件小于block size,那就应该splits的个数等于文件个数。这样的话,如果我想控制总的任务数,就需要有那么多个文件,而我想只用一个文件。不知道现在的hadoop里面是不是支持。还有,我看到你的分析,在mapred中,TaskTracker通过heartbeat得到任务指令,然后去startNewTask(),但这里面我就迷失了.从后面往前推,maptask的启动是在Child.run()中启动的,而Child.run()的启动似乎是在JVMManager中启动的,但我就找不到startNewTask()是怎样启动JVMManager的?期待您的指点!谢谢!


JobConf.setNumMapTasks(n)是有意义的,结合block size会具体影响到map任务的个数,详见FileInputFormat.getSplits源码。假设没有设置mapred.min.split.size,缺省为1的情况下,针对每个文件会按照min (totalsize[所有文件总大小]/mapnum[jobconf设置的mapnum], blocksize)为大小来拆分,并不是说文件小于block size就不去拆分。


2.http://hadoop.hadoopor.com/thread-238-1-1.html
不知道你是要提高整个集群的map/reduce任务数,还是单个节点可并行运行的map/reduce任务数?对于前者是一般只设置reduce任务数,而map任务数是由Splits个数决定的; 对于后者,是可以在配置中设置的,分别为:mapred.tasktracker.map.tasks.maximum
mapred.tasktracker.reduce.tasks.maximum

另外,还有个参数mapred.jobtracker.taskScheduler.maxRunningTasksPerJob,用来控制一个job最大并行tasks数,这个是指在集群最大并行数。

3.我的理解:具体看FileInputFormat.java的代码
map tasks的个数只要是看splitSize,一个文件根据splitSize分成多少份就有多少个map tasks。而splitSize的计算(看FileInputFormat的源码):splitSize = Math.max(minSize, Math.min(maxSize, blockSize));而
minSize = Math.max(getFormatMinSplitSize(), getMinSplitSize(job));即是某种格式的文件的最小分割size(如看源码sequenceFile是2000)和整个job配置的最小分割size(即mapred-default.xml中mapred.min.split.size的值)之间的较大的那个
maxSize是mapred.max.split.size(mapred-default.xml中竟然没有,我试了一下,在mapred-site.xml中配置覆盖也没有用,具体用法参照http://osdir.com/ml/mahout-user.lucene.apache.org/2010-01/msg00231.html用参数配置: hadoop jar /root/mahout-core-0.2.job org.apache.mahout.clustering.lda.LDADriver -Dmapred.max.split.size=900 ...),如果不配置,默认值是long类型的最大值。(mapred.max.split.size不推荐配置(试))
blockSize是即hdfs-default.xml中dfs.block.size的值,可在hdf-site.xml中覆盖.这个值必须是512的倍数,如果想要数量更多的map的tasks的个数,可以把dfs.block.size设得小一点,512,1024等等,反正上面的公式保证了即使你这个blocksize设得比某种格式的文件的最小分割size要小,最后还是选者这种格式的最小分割size,如果blocksize比它大,则选用blocksize作为splitSize的大小.

总结:如果想要多一点的map tasks,(1)可以设置dfs.block.size小一点,sequenceFile推荐2048。。。(试)在eclipse运行时,dfs.block.size是由eclipse中mapreduce的设置(dfs.block.size)生效的,而不是hadoop的conf中的配置文件,但是如果用终端hadoop jar命令跑的话,应该是由hadoop的conf中的配置文件决定生效的
(2)推荐: 可以分成多个sequenceFile来作为输入(把上层目录作为输入路径即可,上层目录下包括的必为清一色的sequenceFile),输入路径 "./"或指定上层目录文件名

reduce task的个数:
可通过job.setNumReduceTasks(n);设定。多个reduce task的话就会有多个reduce结果,part-r-00000, part-r-00001, ...part-r-0000n
分享到:
评论

相关推荐

    Hadoop源代码分析(MapTask)

    本文将对MapTask类的源代码进行分析,了解其内部机制和实现细节。 MapTask类的成员变量和方法 --------------------------- MapTask类的成员变量包括split和splitClass。split是InputSplit对象的串行化结果,用于...

    【MapReduce篇06】MapReduce之MapJoin和ReduceJoin1

    MapReduce之MapJoin和ReduceJoin MapReduce是一种分布式计算模型,广泛应用于大数据处理和分析领域。其中,Join操作是 MapReduce 中的一种基本操作,用于连接来自不同数据源的数据。今天,我们将讲解 MapReduce 之 ...

    MapReduce详解Shuffle过程

    在reduce端,reduce task需要从map task拉取数据,这时需要跨节点去拉取其它节点上的map task结果。在拉取数据时,需要尽可能地减少对带宽的不必要消耗。 Shuffle过程的细节可以分为四步: 1. 在map task执行时,...

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

    MapReduce负责处理大规模数据集的并行运算任务,而MapTask作为MapReduce的核心组成部分之一,其设计与实现对于理解和优化Hadoop系统的性能至关重要。本文将对Hadoop MapTask中的辅助类进行深入分析,特别是针对...

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

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

    hive的一些关于设置map和reduce的参数

    hive的一些关于设置map和reduce的参数

    Map-Reduce原理体系架构和工作机制,eclipse与Hadoop集群连接

    ### Map-Reduce原理体系架构和工作机制 #### 一、Map-Reduce原理概述 Map-Reduce是一种编程模型,用于处理大规模数据集(通常是TB级或更大),该模型可以在大量计算机(称为集群)上进行并行处理。Map-Reduce的...

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

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

    Hadoop运行流程详解

    - MapTask和ReduceTask:Mapper和Combiner(如有配置)由MapTask调用,Reducer由ReduceTask调用。Mapper读取输入数据,经过处理后生成中间结果,若配置了Combiner,则在Mapper本地进行预聚合。ReduceTask接收Map...

    a java map reduce framework

    MapReduce模型主要由两个主要阶段组成:Map阶段和Reduce阶段,以及一个可选的Shuffle和Sort阶段。Map阶段将输入数据拆分成键值对,并对其进行局部处理;Reduce阶段则对Map阶段的结果进行全局聚合,以生成最终的输出...

    使用Map-Reduce对大规模图进行排名和半监督分类

    标题中的“使用Map-Reduce对大规模图进行排名和半监督分类”是指利用MapReduce编程模型处理大规模图数据,实现图的排序(如PageRank)和半监督学习中的分类任务。MapReduce是由Google提出的一种分布式计算框架,适用...

    hadoop map-reduce turorial

    **作业配置**:作业配置是控制Map-Reduce作业行为的关键,包括但不限于数据输入输出路径、Map和Reduce函数的类名、缓存文件、日志级别等,通过这些配置,用户可以灵活地调整作业的执行细节。 **任务执行与环境**:...

    MapTask工作机制图文详解

    本文将详细介绍MapTask工作机制的五个阶段:Read阶段、Map阶段、Collect收集阶段、Spill阶段和Combine阶段。 Read阶段 在Read阶段,MapTask通过用户编写的RecordReader,从输入InputSplit中解析出一个个key/value...

    Map/Reduce

    Map/Reduce介绍。一些基本基础介绍。

Global site tag (gtag.js) - Google Analytics