hadoop源码分析之MapReduce(二)? * processes the same input file (s), but with computations are* cont
hadoop源码分析之MapReduce(二)
?
* processes the same input file (s), but with computations are
* controlled by different parameters.(Referred to as "parameter sweeps").
* One way to achieve this, is to specify a set of parameters
* (one set per line) as input in a control file
* (which is the input path to the map-reduce application,
* where as the input dataset is specified
* via a config variable in JobConf.).
*
* The NLineInputFormat can be used in such applications, that splits
* the input file such that by default, one line is fed as
* a value to one map task, and key is the offset.
* i.e. (k,v) is (LongWritable, Text).
* The location hints will span the whole mapred cluster.
但很奇怪的是只生成了一个任务,这个任务里有几个mapper - 而不是几个任务。而后来我发现,生成的任务和splits有关,而splits的生成个数在现在的hadoop里似乎只和input里面的文件个数有关。我想用一个简单的输入文件就能控制任务的生成,不知道按现在的hadoop实现能不能完成?非常感谢你的指教!!谢谢!
sorry,理解能力太差, 我不是很明白你的意思.如果你是需要控制单个节点同时在执行的的mapper/reducer数.你可以通过修改slave节点配置中的mapred.tasktracker.map.tasks.maximum和mapred.tasktracker.reduce.tasks.maximum.
至于总的mapper任务数,是由splits决定的,当然可以通过JobConf.setNumMapTasks(n)来增大它,但没多大意义.
但到addToTaskQueue没有看到调用TaskLauncher的run啊?
9 楼 gonggaosheng 2009-02-25 你好,我想请问一下有没有什么方法可以调试hadoop呢?现在我可以使用eclipse或者
jdb调试一个mapreduce任务,比如wordcount。但问题是我现在还不能调试JobTracker任务,比如说是我在运行wordcount例子的时候想要调试JobTracker,
看看它具体的执行情况,有没有什么好的建议呢?非常感谢! 10 楼 coderplay 2009-02-26 gonggaosheng 写道
你好,我想请问一下有没有什么方法可以调试hadoop呢?现在我可以使用eclipse或者
jdb调试一个mapreduce任务,比如wordcount。但问题是我现在还不能调试JobTracker任务,比如说是我在运行wordcount例子的时候想要调试JobTracker,
看看它具体的执行情况,有没有什么好的建议呢?非常感谢!
请见
http://wiki.apache.org/hadoop/HowToDebugMapReducePrograms 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就不去拆分。 12 楼 ytulgr 2011-03-21 是每当TrakTracker发送heartbeat到TaskTracker才触发任务分配吗?这样是否可认为按照TaskTracker发送heartbeat的先后顺序得到任务执行? 13 楼 ski_jugg 2012-03-11 你好,有一个问题很困扰我。
JobTracker处理心跳采用JobQueueTaskScheduler调度机制给TT分配map任务时,会执行很多次obtainNewLocalMapTask和一次obtainNewNonLocalMapTask。最终使用的都是JobInProgress的findNewMapTask方法,只是传递的level不一样。
可是我不知道为什么obtainNewLocalMapTask会传递maxlevel这个值,而且maxlevel=NetworkTopology.DEFAULT_HOST_LEVEL=2。我很是不理解。
1·难道说obtainNewLocalMapTask只是会从近到远寻找任务,而不见得一定要是本地嘛?
2·maxlevel这个值是代表集群的级别数吗?为什么是2?