你好,游客 登录 注册 搜索
背景:
阅读新闻

Apache Hadoop高级篇:hadoop的兼容性说明-相关hadoop项目版本之间的关系等【上】

[日期:2015-11-23] 来源:极客头条  作者: [字体: ]

  目的

  这个文档介绍了 Apache Hadoop 项目的兼容性,在hadoop发布版之间的兼容性,影响了hadoop开发者,hadoop相关项目,终端用户。

  描述了hadoop终端用户及相关项目的影响

  Hadoop开发人员采用的政策为了适用,不兼容的改变是允许的

  兼容类型

  Java API

  hadoop接口和类都是有注释的,描述了使用者和稳定性,来保持与以前的版本兼容。更多细节查看 Hadoop Interface Classification

  InterfaceAudience:描述了什么类型是允许改变的,可能的值是 Stable, Evolving, Unstable, 和 Deprecated.

  用例

  Public-Stable API兼容性,从而确保最终用户的方案和下游项目继续不加修改工作。

  LimitedPrivate-Stable API 兼容性,需要允许跨越小版本单个组件升级。

  Private-Stable API 兼容性,需要滚动升级

  Policy

  Public-Stable APIs在一个主要版本发布前,从版本中移除,必须被弃用。

  LimitedPrivate-Stable APIs在主版本中可以改变,但是仅在发布的主版本之内。

  Private-Stable APIs在主版本中可以改变,但是仅在发布的主版本之内。

  没有注解的类为“Private”.类成员没有注释继承封闭类的注释。

  注意:从原始文件生成API需要兼容滚动升级,更多细节 查看wire-compatibility 部分.

  语义兼容 Hadoop努力确保API behavior版本保持稳定,尽管改变可能导致behavior改变

  测试和Javadoc指定API的behavior。hadoop社区指定API的过程更加严格,加强测试套件,以验证符合规范。有效地产生正式规范行为,可以容易地测试的子集。

  Policy

  API behavior可以改变,以解决不正确的行为,比如伴随着升级已存在的bug修改等。

  Wire 兼容性

  Wire 兼容性相关数据通过wire 传播在hadoop进程之间。hadoop使用协议缓存区【大多数使用RPC通信】

  保护兼容性需要禁止修改,如下描述。非RPC通信也应考虑。比如使用HTTP传输HDFS镜像作为快照或则传输MapTask输出。潜在的通信可以分类如下:

  Client-Server: hadoop客户端和server通信(等HDFS客户端与NameNode协议,或则YARN客户端与ResourceManager协议)

  Client-Server (Admin):它是值得区分的一个子集的 Client-Server协议仅由管理员命令使用(等HAAdmin协议)。由于这些协议只影响管理员(可以容忍的变化),最终用户(使用一般的 Client-Server 协议)不能。

  Server-Server:服务器之间的通信

  Use Cases【用例】

  Client-Server兼容性需要允许用户继续使用旧版本客户端,甚至是升级后的集群到新的版本【反之亦然】。比如hadoop2.1.0客户端与hadoop2.3.0集群通信【这里只是整理自官网,升级时许谨慎】这里附上原文【Client-Server compatibility is required to allow users to continue using the old clients even after upgrading the server (cluster) to a later version (or vice versa). For example, a Hadoop 2.1.0 client talking to a Hadoop 2.3.0 cluster.】

  Client-Server 兼容性也需要允许用户在升级服务器(集群)之前升级客户端。例如,hadoop2.4.0客户端与hadoop2.3.0集群【服务器】通信。这允许客户端在集群升级之前修复bug. 请注意 ,新的客户端的API或shell命令调用新的集群功能将无法使用。YARN应用程序尝试使用新的APIs(包括数据结构的新领域),APIs尚未部署到集群可以预期 link exceptions.

  Client-Server兼容性需要允许单独组件升级,其它组件不升级。例如hdfs从版本 2.1.0到 2.2.0,MapReduce不需要升级

  Server-Server兼容性需要允许在一个集群中存在混合版本,因此集群需要在不停止的情况下滚动升级

  Policy

  在一个主要版本中保留了Client-Server 和 Server-Server的兼容性。(不同的类型不同的Policy尚待考虑)

  在主要版本中可以打破兼容性,但是打破兼容性会有严重后果,因此需要在hadoop社区讨论

  Hadoop的协议在.proto(ProtocolBuffers)文件中定义。Client-Server和Server-protocol .proto文件被标记为稳定的。当一个.proto标记为稳定这意味着变化应兼容的方式如下所述:

  下列变化是兼容的,并且在任何时间都可以被允许:

  添加一个可选字段,期望代码处理由于与旧版本通信丢失的字段

  添加一个新的RPC/方法到服务

  向消息添加新的可选请求

  重命名字段

  重命名 .proto 文件

  改变 .proto注释影响代码生成(如Java包名称)

  下面改变是不兼容的,但仅在主版本中考虑

  改变rpc/method名

  改变rpc/method参数类型和返回类型

  移除 rpc/method

  改变service名称

  改变消息名称

  以不兼容的方式修改字段类型(递归定义)

  改变一个可选的必须字段

  改变或则删除一个必须字段

  删除一个可选的字段,只要可选字段允许删除合理的默认值

  下面改变不兼容,因此不允许

  改变一个字段的id

  重新使用以前删除的字段

  字段是非常便宜的,改变和重用是不好的

  Java二进制兼容性最终用户应用程序即Apache Hadoop的ABI

  作为hadoop修订升级终端用户期望它们的程序不做任何修改继续工作。为满足这一期望,因此支持API 兼容, Semantic 兼容 和 Wire 兼容.

  尽管如此, Hadoop是非常复杂的,分布式系统和服务各种类型的用户案例。特别是 map/reduce 是一个非常广泛的API;在某种意义上终端用户有非常大的空间,比如当运行mapreduce任务,本地磁盘的分配,任务的环境变量【配置】等。在这种情况下,它变得非常难以完全指定,支持,绝对兼容性。

  用例

  现有的mapreduce程序,包括现有jars 最终用户应用程序和项目比如Apache Pig, Apache Hive, Cascading 等当指向在一个主版本中升级的Hadoop集群,可以无修改的工作。

  现有的Yarn程序,包括现有jars 最终用户应用程序和项目比如 Apache Tez 等当指向在一个主版本中升级的Hadoop集群,可以无修改的工作。

  现有的传输数据(输入/输出hdfs文件)应用程序,包括已存在的终端用户jar包应用程序比如Apache Flume,在主版本内当指向升级的Apache Hadoop 集群应该无修改的工作。

  Policy

  现在有的MapReduce, YARN & HDFS 应用程序和框架应该在一个主版本内,不做任何修改就可以工作。 Apache Hadoop ABI 是支持的。

  应用程序很小的一部分可能影响到磁盘的分布等。开发者社区将努力减少这些变化,不会使他们在一个小版本。更糟糕的情况,我们将考虑强还原这些重大更改,如果有必要将取消版本发布。

  尤其是MapReduce应用,开发者社区将尽力支持提供二进制兼容性在各主要版本如应用org.apache.hadoop.mapred。

  APIs支持兼容性hadoop-1.x 和 hadoop-2.x.查看在hadoop-1.x 和 hadoop-2.x MapReduce应用程序,更多细节点此

 

  版本:hadoop2.7.1





收藏 推荐 打印 | 录入:elainebo | 阅读:
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款