当前位置: 首页>>hadoop 1.0>> 阅读正文

Hadoop计算能力调度器算法解析

Category: hadoop 1.0 View: 15,724 Author: Dong
,

  • 评论 (8)
  • 引用通告 (2)
发表评论 发起引用

  • 1楼架架 回复

    Post: 2012-09-14 07:16

    计算能力调度器应该是可以为job的一个task分配多个slot。那么在不同的调度器下,为一个task分配几个slot是由什么决定的了?我知道,用户有一个可配置的值是memForThisTask,这个值表示的是这个job的task需要使用多少内存,在CapacityScheduler中可以通过这个值计算出这个job的task一次执行需要的slot数量,当assignTasks()返回了这个task后,taskTracker就自动为这个task安排的它所需要的多个slot吗?
    在其他的调度器里不能为一个task安排多个slot吗?

    [回复]

    Dong 回复:

    taskTracker就自动为这个task安排的它所需要的多个slot吗?是的。
    在其他的调度器里不能为一个task安排多个slot吗?其他调度器没有实现,还是一个task一个slot。

    [回复]

  • 2楼架架 回复

    Post: 2012-09-17 07:54

    如果一个job的memForThisTask配置为20M,而Hadoop中配置mapred.cluster.map.memory.mb每个slot可用内存的值为10M,那么这个job的task该如何执行了?还是会执行失败?

    [回复]

    Dong 回复:

    其他到调度器不考虑内存,一个task一个slot, 如果需要20M内存,则就会使用这么多,除非机器内存不够,也就是说,可能会抢用其他task资源。

    [回复]

  • 3楼和谐小冬瓜 回复

    Post: 2012-10-23 02:32

    为什么先选择资源利用率低的queue呢?当出现空闲slot时应该选择资源利用率高的qqueue啊。资源利用率低说明这个队列的task少,资源多为什么还要给它分配slot呢?

    [回复]

    Dong 回复:

    我说的利用率是queue已经使用的资源除以queue资源容量。

    [回复]

  • 4楼anonymous 回复

    Post: 2013-01-23 02:22

    “综上所述,公平调度器的伪代码为:”
    这里有错。

    [回复]

  • 5楼和谐的小冬瓜 回复

    Post: 2013-03-20 13:32

    请问一下在Capacity Scheduler算法中如何实现对每个队列根据作业的优先级对其进行排序的。也就是你伪代码中sortJobsByTimeAndPriority(queue)。我看了一晚上的源代码都没有看出来怎么排序的。难道直接根据comparator就可以进行排序了?

    [回复]

  • 6楼Dong 回复

    Post: 2013-03-20 13:37

    是的,这是JAVA语法,你得好好学学java了。

    [回复]

  • 7楼barton 回复

    Post: 2013-07-18 09:58

    您好,我想请教您关于Capacity-Scheduler的问题。在配置完成后,在作业里面如何设置该作业的内存。我在taskTracker上设置了mapred.cluster.map.memory.mb。然后我的作业就一直报错了,说内存超了,然后我看代码看到了里面获得了的值是-1,所以就出错了。我的hadoop是0.21的。

    [回复]

    Dong 回复:

    mapred.job.map.memory.mb 和 mapred.job.reduce.memory.mb

    [回复]

    barton 回复:

    public static void main(String[] args) throws Exception {
    Configuration conf = new Configuration();
    String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
    if (otherArgs.length != 2) {
    System.err.println(“Usage: wordcount “);
    System.exit(2);
    }
    Job job = new Job(conf, “word count”);
    job.setJarByClass(WordCount.class);
    job.setMapperClass(TokenizerMapper.class);
    job.setCombinerClass(IntSumReducer.class);
    job.setReducerClass(IntSumReducer.class);
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);

    // job.getConfiguration().set(“mapreduce.map.memory.physical.mb”,”512″);
    // job.getConfiguration().set(“mapreduce.map.memory.mb”,”1024″);
    // job.getConfiguration().set(“mapred.task.maxvmem”,”1024″);
    // job.getConfiguration().set(“mapred.job.map.memory.mb”,”1024″);
    FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
    FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
    System.exit(job.waitForCompletion(true) ? 0 : 1);
    }

    这4个选项,我都有尝试过,但是都失败了,没有能够解决我的问题。我想请教您下,您设置mapred.job.map.memory.mb在哪里设置?

    [回复]

  • 8楼王欢_阿布 回复

    Post: 2015-06-03 06:40

    董,你好!
    我想请问一下, memForThisTask 这个配置的 内存大小 是用户配置的。这个值是怎么算出来的

    [回复]

发表评论