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

如何编写Hadoop调度器

Category: hadoop 1.0 View: 16,564 Author: Dong
, ,

  • 评论 (14)
  • 引用通告 (1)
发表评论 发起引用

  • 1楼弹棉花的夏天 回复

    Post: 2011-08-30 07:12

    最近也有做hadoopo上的相关项目,感觉博主这方面做的很多,幸会幸会

    [回复]

    Dong 回复:

    O(∩_∩)O~

    [回复]

  • 2楼大雄 回复

    Post: 2012-03-29 02:37

    请教一下,如何测试自己编写的hadoop调度器的性能好坏,用什么工具来仿真呢,是用cloudsim吗?

    [回复]

    Dong 回复:

    仿真只是实验环境的结果,真实环境下应采用真正的Hadoop作业。Hadoop有自己的测试benchmark,叫gridmix,具体在src/benchmarks/gridmix2/下,使用方法见我的一篇博文。

    [回复]

    大雄 回复:

    谢谢你

    [回复]

  • 3楼莫语 回复

    Post: 2012-05-12 14:01

    有个问题想请教下,如果自己设计调度器,应该要进行单元测试。比如计算能力调度器里,核心的CapacityTaskScheduler类,有一个对应的TestCapacityScheduler的单元测试类,但这种情况下,单元测试是如何执行的呢?用启动hadoop集群吗?
    总之,就是想问下如何在编写或修改开源项目的源码时进行单元测试?

    [回复]

    Dong 回复:

    你可以参考:http://www.tbdata.org/archives/1133

    [回复]

  • 4楼fredyyang 回复

    Post: 2012-06-15 14:44

    理解得很到位,有个问题想请教下,hadoop是怎么样做到将map任务定位到数据存放的tasktracker

    [回复]

    Dong 回复:

    (1)当用户提交作业之后,Hadoop会按照输入文件大小切分成若干个InputSplit,其中每个InputSplit封装到Task中处理,这些Task刚开始存放在JobTracker端,等待被调度。
    (2)每个TaskTracker会周期性(默认3s)地向JobTracker上报信息,其中包括slot空闲数目。 如果JobTracker发现某个TaskTracker出现了空闲的slot slot, 则会让调度器选择一个job,然后在该job中选择一个locality的task。
    (3)不同的调度器选择Job的策略不同,但无外乎两种:按照到达时间和按照优先级。 我们假设已经按照某种策略选择出了job, 则下一步是在这个job中选择一个task, 此时会扫描该TaskTracker上所有的block,选择一个locality的task。
    大体过程就是这样的,但具体细节可能会不太一样,比如:“扫描该TaskTracker上所有的block”,实际上并不会每次扫描,一个task对应的处理数据位于哪几个节点上是已经提前算好的,直接查找就行。

    [回复]

    fredyyang 回复:

    假如该tasktracker上面没有空闲的slot,调度器会等待吗?还是随便选择一个tasktraker.

    [回复]

    Dong 回复:

    一个Job对应的所有task均放在JobTracker端,哪个taskTracker上有空闲slot,调度器就会为该slot选派task,没有则不选。

    [回复]

    fredyyang 回复:

    谢谢解答,我的意思是,当jobtracker在该有空闲slot的tasktracker上没有找到locality的task,会为他分配任务吗?

    [回复]

    Dong 回复:

    会的。 不过现在最新版本里加了一些新的优化机制:如果没有locality的 task,则会等待一个时间间隔(可自己设定),直到发现有一个locality的task或者时间间隔用完。

    [回复]

  • 5楼宁小鱼 回复

    Post: 2012-10-07 08:38

    楼主,我现在想改进公平调度算法中的延迟调度,有点不知如何下手,能给点指导吗?

    [回复]

  • 6楼小虾米 回复

    Post: 2012-10-22 11:47

    我不知道怎么实现LATE调度算法,给点指导

    [回复]

  • 7楼和谐小冬瓜 回复

    Post: 2012-10-22 12:17

    楼主写的Hadoop作业调度算法解析我都仔细的看了。我有个问题想请问楼主,我想改进现有的调度器,是要在原来的调度器内部改写呢,还是自己创建一个自己的调度器呢?

    [回复]

  • 8楼Dong 回复

    Post: 2012-10-23 01:03

    都可以的, 如果只是想添加一种机制,就重用现有的吧。

    [回复]

  • 9楼Dong 回复

    Post: 2012-10-23 01:04

    1.0 0.21.0 0.22.0等版本已经实现,自己参考一下就OK了。

    [回复]

  • 10楼Jiang 回复

    Post: 2013-02-25 15:20

    你好,我看了你写的有关Hadoop调度器的所有博客,收获很多。有些问题想请教一下博主。我刚接触Hadoop,想做的课题是有关调度器的,想改进现有的调度器,然后实现它,成为我的论文。但是因为刚接触Hadoop,很多内容都是模棱两可,不知道楼主能不能分享一下自己的经验,或者能否告知对于初学者怎么开始进行这方面的实验,我一直觉得无从下手,没有头绪。也有7楼的困惑,是不是重用现有的调度器会更容易些,例如在LATE上面直接修改它或者添加一些东西。希望楼主能够帮忙回答一下,万分感谢~~或者有什么好的资料能够分享一下

    [回复]

    Dong 回复:

    科研方面调度器一般只是验证一些机制或者调度策略,为了减少代码开发复杂度,完全可以重用现有的调度器。 在调度器方面,调度器功能介绍可以参考Apache Hadoop官方文档,这些文档可能只是一些皮毛,如果想更深入了解,需要自己看源代码,没有太好的文档供你参考,你可以在网上看一些别的零星的源代码分析或者搜一些论文,当然,这也只是原理方面的介绍。

    [回复]

    zhaoshuobupt 回复:

    自己重写调度器的方法是什么呢?自己重新做一个JAR包,然后像使用公平调度器JAR那样,插到hadoop里面运行?

    [回复]

    Dong 回复:

    是的。

    [回复]

    和谐的小冬瓜 回复:

    我现在就是在原来调度的基础上修改作业调度算法,但是没有找到方法将修改好的代码重新生成JAR包。我用的是eclipse进行编译的,请问知道怎么处理吗?

    [回复]

    Dong 回复:

    推荐在linux下,比如,编译fairscheduler,则到$HADOOP_HOME/src/contrib/fairscheduler下,直接输入ant命令即可完成编译,然后在$HADOOP_HOME/build/contrib/fairscheduler中有生成的jar包。

    [回复]

  • 11楼xiaovan 回复

    Post: 2013-05-22 09:38

    你好,请问下影响任务数据本地性的到底是mapred.submit.replication属性,还是dfs.replication属性值,或者说是两者都有影响?如果两者都有影响,各自起着什么样作用?麻烦有空帮忙解答一下哈,不胜感激。

    [回复]

  • 12楼seanalex 回复

    Post: 2014-05-21 09:59

    你好, 我是澳洲QUT大学的博士研究生,研究方向是MapReduce,我想跟你请教下调度器的重写问题

    [回复]

  • 13楼seanalex 回复

    Post: 2014-05-21 10:00

    如果您愿意的话 可以把qq号发到我的邮箱吗 我加你一下 seanalex@126.com

    [回复]

  • 14楼xinzhu 回复

    Post: 2014-07-11 04:06

    您好董老师~ 我是Hadoop的研究生,想跟您请教一下FileSplit的覆盖问题~
    希望您抽空之余能给我一点指教。
    这是我的邮箱和qq号
    邮箱:luxinzhu198198@hotmail.com
    qq:807652639(姓卢)

    [回复]

发表评论