分享

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

pig2 2015-11-19 19:54:19 发表于 连载型 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 1 26179
问题导读



1.根据下文hadoop2.1.1客户端与hadoop2.4.0集群是否可以通信?
2.hadoop2.4.0客户端与hadoop2.3.0集群【服务器】是否可以通信?
3.升级后集群,hdfs,mapreduce,yarn程序是否需要修改?
4.hadoop单独组建是否可以升级?
5.hadoop主版本升级后,如flume是否受影响?




目的

这个文档介绍了 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

下一篇:
Apache Hadoop高级篇:hadoop的兼容性说明【下】
http://www.aboutyun.com/thread-16095-1-1.html




已有(1)人评论

跳转到指定楼层
fsxdxh 发表于 2015-11-25 11:09:29
怎么样才能升级用户
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条