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

Hadoop-0.20.2公平调度器算法解析

Category: hadoop 1.0 View: 80,515 Author: Dong
, ,

  • 评论 (25)
  • 引用通告 (3)
发表评论 发起引用

  • 1楼卢松松 回复

    Post: 2011-03-07 02:04

    这是什么啊?

    [回复]

    Dong 回复:

    Hadoop中的一个的调度器,你是做什么的?

    [回复]

  • 2楼张永华 回复

    Post: 2011-03-30 08:45

    你好,我最近一直在基于Nutch做一个站内搜索引擎,有很多不懂的地方,期待交流zhangyh_1987@hotmail.com!

    [回复]

  • 3楼chegvra 回复

    Post: 2011-12-14 10:29

    您好,看了你的博客,写的很好,我想写一个自己的作业调度器,但缺乏一些开发配置的资料,您能提供一些帮助吗?

    [回复]

    Dong 回复:

    如果是设计思想之类的,可以到Hadoop官网上看Capacity Scheduler和Fair Scheduler的设计文档,如果是具体代码相关的,可以看Hadoop源代码中这两个调度器的具体实现。在Hadoop中,调度器是一个独立的模块,理解一个调度器的基本接口后,非常容易实现。

    [回复]

    chegvra 回复:

    @Dong, 谢谢,以后有问题向你请教

    [回复]

  • 4楼chegvra 回复

    Post: 2011-12-14 15:00

    我还想问下,您觉得现在的作业调度器在哪些方面还可以改进了

    [回复]

    Dong 回复:

    很多方面,不过大部分跟具体应用需求绑定,比如怎样支持实时作业,怎么调度大内存作业等,当然,也有通用的优化,如怎样根据资源(cpu,内存,网络io等)使用情况动态调度,而不是只考虑cpu(slot),怎样不区分map slot和reduce slot,而是slot池……..,你可以自己找一些论文和到Hadoop jira上看大家提交的idea,找灵感。

    [回复]

  • 5楼shawn 回复

    Post: 2011-12-23 13:45

    我想请问poolLowJobsWeightSum与systemJobWeightSum是怎么计算出来的?
    poolLowJobsWeightSum= SUM(JobWeight* LowJobPriority)吗?
    systemJobWeightSum是怎么算的?

    [回复]

    Dong 回复:

    poolLowJobsWeightSum是某一个pool中,所有尚需资源的作业的权重值和,比如,一个pool中有3个作业,job1有20 个 task,已经拿到15个slot,权重是1,job2有10个task,已经拿到5个slot,权重是2,job3有5个task,已经拿到5 个slot,权重是1,则该pool的poolLowJobsWeightSum是前两个作业的权重值和,即:3. systemJobWeightSum系统中所有pool的poolLowJobsWeightSum值和。

    [回复]

    shawn 回复:

    @Dong,
    请问这里指的拿到slot个数与权重是怎么算出来的?
    有公式可参考吗?

    [回复]

    Dong 回复:

    @shawn, slot个数和权重均是用户在配置文件中配置的。

    [回复]

    源神 回复:

    systemJobsWeightSum:系统(可能有很多pool)中可以运行的所有作业的权重之和.
    而你举的例子是systemJobWeightSum系统中所有pool的poolLowJobsWeightSum值和,如这个pool中job3的权重不计算在内,不计算在内的话跟上述的定义有冲突么?

    [回复]

  • 6楼klose 回复

    Post: 2012-02-14 01:03

    现在速度不错呀

    [回复]

    Dong 回复:

    试用阶段。

    [回复]

  • 7楼Dong 回复

    Post: 2012-02-27 01:41

    不冲突,systemJobsWeightSum是可以运行且尚需资源的作业的权重之和,而例子中job3已经拿到了所有需要的资源(需要5个,且拿到了5个),故不必考虑它了。

    [回复]

  • 8楼ye 回复

    Post: 2012-05-23 02:51

    看了

    [回复]

  • 9楼架架 回复

    Post: 2012-08-02 08:35

    你好!最近在看Fair的源码,有个问题请教一下,
    assignTasks(TaskTracker taskTracker)这个方法最后返回的List中task的数量是什么决定的啊?还是说Fair这种调度方法每次只返回一个task?我真的是热切的希望你的回复啊,亲~不要让我失望哦!

    [回复]

  • 10楼Dong 回复

    Post: 2012-08-03 00:50

    你首先需要理解一个概念:slot,它是资源基本单位。每个TaskTracker上配有一定的map slot(通过参数mapred.tasktracker.map.tasks.maximum配置)和reduce slot(通过参数mapred.tasktracker.reduce.tasks.maximum配置),分别用于运行map task和reduce task。 比如一个TaskTracker上配有5个map slot和5个reduce slot,则说明该节点上最多可以同时运行5个map task和5个reduce task。具体每个节点上配置几个slot,完全是你根据节点的资源配置决定。比如一个节点是8核40G内存,你可以设置10个map slot和4个reduce slot(通常而言,map slot与reduce slot总数是核数的1~2倍,但还要考虑具体应用,比如你的作业全是大内存的,可能要考虑内存够不够用)。
    TaskTracker周期性通过心跳向JobTracker汇报自己的状态,包括:空闲slot数,task运行情况,磁盘使用情况等,JobTracker收到心跳信息后,会按照一定的策略为该节点分配一个或者多个task。
    对于Fair Scheduler而言,可通过参数mapred.fairscheduler.assignmultiple配置是否一次分配多个task。 通常而言,对于每个心跳,JobTracker最多为对应TaskTracker分配一个task,但你可通过将该参数设置为true以让它一次分配尽可能多的task。

    [回复]

    Nagamine 回复:

    hadoop中slot对应多少资源(譬如多少cpu,多少内存)?像你给的例子,8核,设置10个mapslots和4个reduce slots,如果此时运行4个maps和4个reduces,那么8个核均以使用,还可以添加新的任务么?

    [回复]

  • 11楼架架 回复

    Post: 2012-09-24 09:24

    为什么权重的计算公式是对数这种计算方法了?

    [回复]

  • 12楼宁小鱼 回复

    Post: 2012-10-07 08:42

    楼主,你知道delay scheduling是怎么做的吗?是独立于公平调度器的吗?

    [回复]

  • 13楼Blank 回复

    Post: 2012-11-02 03:16

    想您问几个问题:
    1、hadoop中的mapreduce有啥应用场景需要对其性能(调度)方面进行预测、分析以及优化?
    2、你说“怎样根据资源(cpu,内存,网络io等)使用情况动态调度,而不是只考虑cpu(slot)”,据我所知,Capacity Scheduler算法不是能有效地对hadoop集群的内存资源进行管理,以支持内存密集型应用吗?
    3、现在的三种调度算法,除了FIFO的问题(生产型作业会长期占用资源,而交互型作业得不到作业的执行)比较明显,其他两种算法还有啥问题比较突出吗?
    4、我想在优化调度算法方面做些研究,有什么建议吗?要从哪方面下手呢?

    [回复]

  • 14楼mrzhou 回复

    Post: 2012-11-27 06:57

    dong.看了你的文章,想跟你咨询几个问题
    1、调度算法 是否仅仅对多个job 有效,而具体对单个job 给哪个tasktracker 分配任务或者不分配任务不归他管。
    2、我遇到一个问题,简单描述一下“
    我有三个datanode 节点,replication 也是3,所以三个节点的数据肯定是一模一样的,但是我跑任务的时候,jps 发现每个节点都打开了同样数量的jvm 来处理任务 比如8个map child 此阶段还处于map 阶段
    但是用iostat 查看 io情况 却发现有两个node 在拼命的读取数据,另外一个node 基本上没有数据读取,请问这种情况是否跟调度有关系,或者能帮我解释下 到底什么原因导致这个问题的发生

    [回复]

    Dong 回复:

    调度算法实际上是将集群中的资源分配给各个任务,基本策略有:数据本地性、失败任务优先、推测执行等,如果资源少于任务数,则应考虑将优先的资源优先分配给哪些队列中的哪些作业中的哪些任务? 注意几个概念的范围:队列、作业和任务, 调度器一定是为资源选定一个task,因为task才是真正运行的实体,而队列和作业只是任务的组织方式。
    问题2:io应该一样,正常的话。

    [回复]

    mrzhou 回复:

    简单理解 一个job就是一个作业,而一个作业有多个任务task,而多个 task 加入到一个队列中
    那调度器 作用 范围 其实是 如何从队列中取出任务,分配到具体的node 去执行 这个层次。
    再向上 到job 这一层 只能根据优先级进行调度
    我的理解是否有问题

    [回复]

  • 15楼xiaolu8869 回复

    Post: 2012-12-21 13:27

    您好,想请教您一下
    我是研二的学生,研究MapReduce有一小段时间,明白它的运行机理,现在我的毕业设计想做Hadoop作业调度算法的改进,开题时老师们说这个太难,我看您上面回复别的人说只要知道几个接口就行。所以,我想请教您一下,我的这个想法对我来说是否可行,还有,需要了解的接口大概是哪些?谢谢您

    [回复]

    Dong 回复:

    你需要了解JobTracker和调度器是如何交互的和调度器的基类TaskScheduler,另外,再学习一下当前已存在的调度器,包括FIFO,Capacity Scheduler等。

    [回复]

    xiaolu8869 回复:

    好的,明白了,谢谢您我先学习着,如果有问题还希望您不吝赐教,谢谢您

    [回复]

  • 16楼Born to Win 回复

    Post: 2013-01-08 08:48

    您好,
    看了您的文章受益匪浅,想向您咨询下Hadoop中的守护进程与Linux中的守护进程有区别吗?

    [回复]

  • 17楼Born to Win 回复

    Post: 2013-01-08 08:51

    一直不太明白Hadoop守护进程,期望您给予解释,谢谢您

    [回复]

    Dong 回复:

    Hadoop守护进程跟linux的类似,都类似后台进程,它们不断地在轮转,等待外部访问者发来请求,然后处理这些请求,一句话,就是随时待命,有任务就干,没任务就等着!

    [回复]

  • 18楼Born to Win 回复

    Post: 2013-01-12 02:12

    您好,
    看到Fair Sharing Algorithm有点疑惑,想向您请教一下,公平调度器中选择pool以及job所用的都是用的Fair Sharing Algorithm吗,pool和job都有相应的weight吗?谢谢

    [回复]

    Dong 回复:

    pool的选择是依据资源利用率,比如一个pool配置了6个slot可用,当前已经使用了2个,另外一个配置了12个slot,当前已经使用另外3个,则优先给第2个(2/6>3/12),而pool内部的作业分配基本上可看做是轮询,如果作业权重相同的话。
    pool的权重是配置文件中设置的,而job的权重跟其作业优先级和task个数有关。

    [回复]

  • 19楼Born to Win 回复

    Post: 2013-01-12 02:27

    FairShareComparator类中的public int compare(Schedulable s1,Schedulable s2){}中的Schedulable指的是pool还是job,谢谢您

    [回复]

    Dong 回复:

    Schedulable是JobSchedulable和PoolSchedulable的共同基类,pool和job都是一种scheduable。

    [回复]

  • 20楼Born to Win 回复

    Post: 2013-01-12 05:34

    谢谢您

    [回复]

  • 21楼陈小飞 回复

    Post: 2013-06-09 14:58

    您好,再看09年那篇论文时,有一个例子,就是给出4个pool,每个pool分别有一个min share和demand.这个demand是从何而来的?是根据什么设置的?

    [回复]

    Dong 回复:

    demand是用户自己分配的,根据业务需求分配。

    [回复]

  • 22楼yinjz 回复

    Post: 2013-07-12 06:59

    您好,能不能给我公平调度器的jar包的?谢谢。

    [回复]

  • 23楼ycc 回复

    Post: 2013-09-02 03:31

    楼主能不能给一下公平调度器的源码框架分析,万分感谢

    [回复]

  • 24楼呵呵 牛人 卖书了 回复

    Post: 2013-09-22 01:22

    史上最装b的程序员

    [回复]

  • 25楼krazyhe 回复

    Post: 2014-11-12 08:38

    你好,我用的2.x的版本,公平调度器,设置优先级怎么没有生效set mapreduce.job.priority=HIGH;
    求解答?

    [回复]

发表评论