[关闭]
@changedi 2016-11-20T06:25:01.000000Z 字数 6959 阅读 3045

Hadoop兼容性

大数据 Hadoop



原文:http://hadoop.apache.org/docs/r2.6.4/hadoop-project-dist/hadoop-common/Compatibility.html

兼容性类型

Java API

Hadoop的接口和类都有对应的标注,注解说明了为了维持兼容性而与之前版本的受众和稳定性方面的变化。参见Hadoop接口分类。

用例

Public-Stable的API兼容性,对于端用户和下游系统不做修改持续运行是非常必要的。
LimitedPrivate-Stable的API兼容性,对于允许通过镜像发布版升级的单体组件来说是必须的。
Private-Stable的API对于滚动升级是必须的。

策略

语义兼容性

Apache Hadoop 努力保证API的跨版本一致性,尽管对于正确性的修正可能导致行为的不一致。Tests和javadoc声明了API的行为。社区也在更严格的推进对一些API的声明以及增强测试用例来校验API是否满足声明要求,有效地为一些可以容易得被测试的API行为创建一个正规的声明。

策略

API的行为发生不正确的情况下可以被修正,这样的修正需要更新已存在的bug测试或者在之前不存在时添加新的测试。

通信兼容性

通信兼容性关注的是数据在Hadoop进程之间被传输的问题。Hadoop对于大多数的RPC通信使用Protocal Buffers。保持兼容性需要禁止修改如下所述。非RPC通信也需要被考虑,比如使用HTTP来传输一个HDFS镜像用来快照,或者传输MapTask的输出。潜在的通信分类如下:

用例

策略

端用户程序使用的Java Binary的兼容性,比如Apache Hadoop ABI

在Hadoop版本升级过程,端用户合理的期望他们的应用程序不需要任何修改可以持续运行。这是通过支持API兼容性、语义兼容性和通信兼容性来实现的。

然而,Hadoop非常复杂的分布式系统,它提供了对广泛的用例场景的支持。特别的,Hadoop MapReduce是一套使用广泛的API;在此意义上,用户可以假设他们的MapReduce任务运行、他们的任务的环境变量像在本地磁盘上布局一样。在此情况下,这就很难来完整地声明并支持绝对的兼容性。

用例

策略

REST APIs

REST API的兼容性对应了请求和响应。Hadoop REST APIs被声明在读个主版本间兼容。以下是暴露出来的REST APIs:

策略

被标注为stable的API支持至少一个主版本间的兼容性,也可能在新的版本中的REST API被deprecated。

Metrics/JMX

Metric API的兼容性由Java API的兼容性决定。实际由Hadoop暴露的metric需要和用户的兼容以便用户可以自动(通过脚本)使用。添加额外的metric也是兼容的。修改和删除已有的Metric会破坏兼容性。类似的,改变JMX MBean对象的名字也会破坏兼容性。

策略

Metrics要保证主版本内的兼容性。

文件格式&元数据

用户和系统层面的数据(包含元数据)都存储在不同格式的文件里。对于元数据或者存储数据和元数据的文件格式的变动会导致不同版本间的不兼容。

用户级别的文件格式

对于端用户存储数据文件格式的变更可以防止访问更新发布版本中的数据,因此对于保持这些文件格式兼容非常重要。可以添加一种新的格式来改善已有的文件格式。这类文件格式的例子包括har, war, SequenceFileFormat等。

Policy

系统内部文件格式

Hadoop内部数据也被存储在文件里并且改变这些文件的格式会导致不兼容。当然这样的变动不像用户文件格式变动那么灾难性,但是对于兼容性被破坏的策略也是很重要的。

MapReduce

MapReduce使用类似I-File格式的文件来存储MapReduce数据。

策略

MapReduce内部格式类似IFile在一个主发行版本内保持兼容性。对于此格式的改变会导致在运行的作业失败,因此我们应该保证版本更新的客户端可以以老版本服务端支持的兼容行为来获取shuffle数据。

HDFS 元数据

HDFS将元数据(镜像和edit日志)持久化为特定格式的文件。对于文件格式或者元数据做不兼容的变更会防止后续的发行版本读取老版本的元数据。这样的不兼容的变更可能需要一个HDFS的升级来转换元数据以达到元数据可访问的目的。而一些变化可能需要更多的“升级”。

依赖于不兼容性变化的程度,包含以下潜在的场景:

策略

命令行界面(CLI)

Hadoop命令行程序可以被系统shell直接使用也可以通过脚本使用。改变一个命令的路径,删除或者重命名命令行选项、参数的顺序或者命令返回的code和输出output都会破坏兼容性并影响用户。

策略

CLI命令在主版本后续升级不再支持或者兼容性发生变动时要被标记为deprecated。

Web UI

Web UI, 页面布局和内容的变化会潜在影响试图抓取页面内容的动作。

策略

网站页面不建议被抓取,因此任何时刻做不兼容的变动都是可以接受的。用户应该通过REST API来获取信息而不是通过抓页面。

Hadoop配置文件

用户会使用Hadoop提供的属性来配置Hadoop集群,也会自定义一些属性文件来传递信息给作业。因此配置文件的兼容性从两方面来考虑:

策略

目录结构

源代码,artifacts(源和测试),用户日志,配置文件,输出和作业历史都是存储到磁盘上的,或者在HDFS上或者在本地文件系统。改变这些用户可访问的文件的目录结构会破坏兼容性,极端情况下某些原始路径是通过符号连接来创建的(有时候一个路径如果被一个servlet访问,那这个servlet其实是不允许follow符号连接的)。

Policy

Java类路径

基于Hadoop构建的用户程序需要添加所有的Hadoop jar到应用程序类路径下(包括Hadoop本身依赖的库)。添加新的依赖或者改变已有依赖的版本可能会影响应用程序的类路径。

策略

当前没有策略关于Hadoop的依赖可以被改变。

环境变量

用户以及相关的项目经常使用被导出的环境变量(比如HADOOP_CONF_DIR),因此移除或者重命名环境变量会导致不兼容。

策略

当前没有策略关于环境变量可以被改变。开发者应该限制在Hadoop主发行版本中修改。

构建artifacts

Hadoop使用maven做项目管理,对于artifacts的变更会影响已有的用户工作流。

策略

硬件/软件的需求

为保持硬件、操作系统、JVM和其他软件上的最新特性和优势,新的Hadoop发行版或者部分feature也需要更新版本的依赖。特定环境下,对于Hadoop版本的升级可能需要升级依赖的软件组件。

策略

引用

这里是一些主题相关的JIRAs和页面:

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注