当前位置: 首页>>hadoop 2.0之YARN>> 阅读正文

浅析MRv1与MRv2的API兼容性

Category: hadoop 2.0之YARN View: 6,606 Author: Dong
, ,

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

  • 1楼wzqaustin 回复

    Post: 2013-08-10 08:59

    要想从hadoop v1过渡到hadoop v2,不仅要解决mr兼容性的问题,更重要的要解决dfs和hadoop生态系统中其他组件的兼容性,之前做过一些让yarn直接运行在hadoop v1 dfs上的工作,做了adapter,工作量太大,而且怕不稳定,所以没敢上线,现在再搞corona。corona的兼容性没有问题,就是自身的实现很粗糙,facebook开源的东西真的不敢恭维,还正在改进中。

    [回复]

    Dong 回复:

    不建议使用facebook的corona,YARN或者corona这样的资源管理系统,已经不单单用于运行MapReduce这类程序,更重要的是支持其他框架,进而形成一个以YARN或者Corona的生态系统(可阅读我的这篇文章:http://dongxicheng.org/mapreduce-nextgen/run-systems-on-hadoop-yarn/),但目前看来,corona远远不行。 在DFS方面,如果公司内部没有自己修改过DFS,兼容性主要原因是Protocol Buffers序列化框架的引入,这个是插拔式的,可以切成传统的基于Writable的实现,但是这个实现YARN本身没有提供,很遗憾。由于hdfs 2.0增加了Federation和HA,性能、可靠性和扩扩展性都有很大改进,一般建议MR和HDFS一起升级,而不是混搭,比如将YARN运行在HDFS 1.0上。

    [回复]

    wzqaustin 回复:

    目前我们的HDFS和MR都是基于hadoop-0.20上开发的,做了些性能和稳定性方面的改进。由于公司内部集群规模也比较大(几千台),hdfs和mr一起升级的话,风险太高。个人认为,yarn没有做到向前兼容,导致大公司的迁移成本过大,也是阻碍yarn发展的一大原因。而且yarn现在还没有一个稳定的版本,感觉都是社区自己在玩。

    [回复]

    Dong 回复:

    从计算角度看,yarn做到了向后兼容性,因为在Hadoop中,计算和存储是分离的,HDFS和MR并不是耦合在一起的,从兼容性角度看,yarn无需完全兼容某一个存储系统,也谈不上兼容,因为它们之间仅通过API相连,而HDFS对外API做到了向后兼容性,这个可能是因为你们用的默认基于protocol buffers序列化方式,换成基于原始的writable即可。yarn是未来发展趋势,很多新的框架只能运行在yarn上,这一步必须走出去。yarn才发展了2年,而mr发展了7年,不要着急,要给yarn留足时间,从社区看,yarn最近会发布beta版。

    [回复]

    wzqaustin 回复:

    嗯。谢谢你的回复。保持对yarn的关注。也谢谢你的一系列文章。

    [回复]

    bryanxu 回复:

    我们目前也面临类似的事情,正努力试着让Yarn跑在0.20系列的HDFS

    [回复]

    wzqaustin 回复:

    估计会比较痛苦,有进展的话期待分享和交流。当时这个事把我折磨了一段时间。飞信号:13488627521。

    [回复]

    bryanxu 回复:

    我们已经完成了上面说的yarn到0.20系列HDFS兼容的工作,总体思路是将0.20系列的HDFS之上实现2.0HDFS所需要的API。

    [回复]

    Dong 回复:

    API貌似本来就没变吧,变得是序列化方式,你们应该是每个RPC函数的参数增加了protocol buffer序列化/反序列化吧。

    [回复]

    bryanxu 回复:

    对外的API接口还是有些变化的,没有为每个RPC函数增加protocol buffer的序列化、反序列化。访问0.20HDFS使用的还是原来的RPC方式,访问2.0的使用protobuf buffer不变。

    [回复]

    Dong 回复:

    为何不写一篇文章介绍一下呢,呵呵。

    [回复]

  • 2楼dipper 回复

    Post: 2013-08-13 08:24

    不知道是否有可能让Yarn跑tfs

    [回复]

    Dong 回复:

    可以,但你需要对tfs进行封装,使其支持FileSystem类中定义的接口。

    [回复]

  • 3楼黑石头 回复

    Post: 2013-08-14 09:27

    上面几位要让yarn跑0.20的兄弟,是淘宝或者百度的吧,淘宝现在难道还没有迁移到yarn上吗

    [回复]

    wzqaustin 回复:

    不是只有淘宝和百度是hadoop的早期用户哈。yarn现在还没有经过大规模的实践验证吧。国内有哪个大公司已经开始用了么?

    [回复]

  • 4楼MR 回复

    Post: 2013-09-25 03:03

    你文中最后给出的API变动的列表是什么?基于哪两个版本间的比较?看jira上给出好像还有不少

    [回复]

    Dong 回复:

    2.1.0-beta版本之前和之后(包括2.1.0-beta)版本。

    [回复]

  • 5楼Jacob_Huo 回复

    Post: 2013-10-18 06:20

    楼主,本人初学。
    你所说的旧API是不是指0.20版本以前的,新API是指0.20版本以后的?

    [回复]

    Dong 回复:

    0.20.2之后的版本都同时提供了新API和旧API,新API位于org.apache.hadoop.mapreduce包中,旧API位于org.apache.hadoop.mapred包中。

    [回复]

    Jacob_Huo 回复:

    也就是说,在Hadoop2.0上也可以运行旧API编写的程序?

    [回复]

    cin_jing 回复:

    所以说你本文中的新旧弄的有点混乱

    [回复]

  • 6楼徐徐的 回复

    Post: 2013-12-24 01:58

    第2章的第一句话
    “我们都知道,MapReduce应用程序编程接口有两套,分别是新API(mapred)和旧API(mapredue)”说反了,笔误了。。。

    [回复]

  • 7楼Zavier Gao 回复

    Post: 2013-12-31 03:19

    文章里新旧接口对应的包刚好说反了….
    org.apache.hadoop.mapreduce 对应的是新api,用抽象类实现。
    org.apache.hadoop.mapred 对应的是旧接口,用接口类实现。

    [回复]

  • 8楼Ting 回复

    Post: 2014-05-04 09:17

    董老师,你好:
    对于hadoop2.0的api还是有些迷惑,据您所说,“采用MRv1 新API编写的应用程序则不可以,需要使用MRv2编程库重新编译并根据编译错误提示修改不兼容的参数和返回值,MRv2对API的修改主要集中在函数参数和返回值上”,除了这点区别外,MRv2是否增加了其它的一些新的api,具体有哪些呢?

    [回复]

    Dong 回复:

    对于MapReduce而言,据我了解,没有增加新api。注意,这里的MRv2和YARN不是一个概念。

    [回复]

发表评论