先引用几段话:
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
分享到:
相关推荐
本文将对MapTask类的源代码进行分析,了解其内部机制和实现细节。 MapTask类的成员变量和方法 --------------------------- MapTask类的成员变量包括split和splitClass。split是InputSplit对象的串行化结果,用于...
MapReduce之MapJoin和ReduceJoin MapReduce是一种分布式计算模型,广泛应用于大数据处理和分析领域。其中,Join操作是 MapReduce 中的一种基本操作,用于连接来自不同数据源的数据。今天,我们将讲解 MapReduce 之 ...
在reduce端,reduce task需要从map task拉取数据,这时需要跨节点去拉取其它节点上的map task结果。在拉取数据时,需要尽可能地减少对带宽的不必要消耗。 Shuffle过程的细节可以分为四步: 1. 在map task执行时,...
MapReduce负责处理大规模数据集的并行运算任务,而MapTask作为MapReduce的核心组成部分之一,其设计与实现对于理解和优化Hadoop系统的性能至关重要。本文将对Hadoop MapTask中的辅助类进行深入分析,特别是针对...
### Hadoop源代码分析——MapTask辅助类输出机制详解 #### 概述 本文将深入探讨Hadoop MapReduce框架中的MapTask辅助类中与键值对(Key-Value,简称KV)输出相关的源代码实现细节。这部分内容对于理解Hadoop内部...
hive的一些关于设置map和reduce的参数
### Map-Reduce原理体系架构和工作机制 #### 一、Map-Reduce原理概述 Map-Reduce是一种编程模型,用于处理大规模数据集(通常是TB级或更大),该模型可以在大量计算机(称为集群)上进行并行处理。Map-Reduce的...
在Hadoop中,MapTask是MapReduce框架的关键组件,负责执行Mapper阶段的工作。MapTask辅助类,特别是MapOutputBuffer,是Mapper输出数据管理的核心部分。本文将继续深入分析MapOutputBuffer的内部实现,以便理解...
本文主要探讨了两种 MapReduce 中的 Join 实现:Map Side Join 和 Reduce Side Join。 一、Join 的概念 Join 操作在数据库中是非常常见的,它用于将来自两个或更多表的数据根据某些共享字段(即键)关联起来。在 ...
- MapTask和ReduceTask:Mapper和Combiner(如有配置)由MapTask调用,Reducer由ReduceTask调用。Mapper读取输入数据,经过处理后生成中间结果,若配置了Combiner,则在Mapper本地进行预聚合。ReduceTask接收Map...
MapReduce模型主要由两个主要阶段组成:Map阶段和Reduce阶段,以及一个可选的Shuffle和Sort阶段。Map阶段将输入数据拆分成键值对,并对其进行局部处理;Reduce阶段则对Map阶段的结果进行全局聚合,以生成最终的输出...
该模型的核心思想是将复杂的并行和分布式计算过程简化为两个主要步骤:Map 和 Reduce。Map 阶段将原始数据拆分成键值对,应用用户自定义的映射函数,生成中间键值对;Reduce 阶段则将具有相同中间键的值聚合,通过...
标题中的“使用Map-Reduce对大规模图进行排名和半监督分类”是指利用MapReduce编程模型处理大规模图数据,实现图的排序(如PageRank)和半监督学习中的分类任务。MapReduce是由Google提出的一种分布式计算框架,适用...
**作业配置**:作业配置是控制Map-Reduce作业行为的关键,包括但不限于数据输入输出路径、Map和Reduce函数的类名、缓存文件、日志级别等,通过这些配置,用户可以灵活地调整作业的执行细节。 **任务执行与环境**:...
本文将详细介绍MapTask工作机制的五个阶段:Read阶段、Map阶段、Collect收集阶段、Spill阶段和Combine阶段。 Read阶段 在Read阶段,MapTask通过用户编写的RecordReader,从输入InputSplit中解析出一个个key/value...
Map/Reduce介绍。一些基本基础介绍。