Hadoop 文档

General

Common

HDFS

MapReduce

MapReduce REST APIs

YARN

YARN REST APIs

YARN Service

Submarine

Hadoop Compatible File Systems

Auth

Tools

Reference

Configuration

目的

本文档介绍了Apache Hadoop项目的兼容性目标。列举了影响Hadoop开发人员,下游项目和最终用户的Hadoop版本之间的不同类型的兼容性。对于每种类型的兼容性,本文档将:

  • 描述对下游项目或最终用户的影响
  • 如果适用,请在允许进行不兼容的更改时调出Hadoop开发人员采用的策略。

所有Hadoop接口均根据目标受众和稳定性进行分类,以保持与先前版本的兼容性。有关分类的详细信息,请参见Hadoop接口分类法

目标观众

本文档供Hadoop开发人员社区使用。本文档描述了应该从哪个角度查看对Hadoop项目的更改。为了使最终用户和第三方开发人员对跨发行版兼容性充满信心,开发人员社区必须确保开发工作遵守这些策略。项目提交者有责任验证所有更改是保持兼容性还是被明确标记为不兼容。

在组件内,Hadoop开发人员可以自由使用私有和受限私有API,但是在使用来自其他模块的组件时,Hadoop开发人员应遵循与第三方开发人员相同的准则:请勿使用私有或受限私有(除非明确允许)接口和在可能的情况下,更喜欢稳定接口而不是演进接口或不稳定接口。在不可能的情况下,首选解决方案是扩大API的受众范围,而不是引入或永久保留这些兼容性准则的例外。在Maven模块中工作时,Hadoop开发人员应在使用其他Maven模块中的组件时应遵守相同的限制条件。

最重要的是,Hadoop开发人员必须注意其变更的影响。稳定的接口在主要版本之间不得更改。不断发展的接口在次要版本之间不得更改。必须为观众和稳定性适当地标记新的类和组件。有关何时使用各种标签的详细信息,请参见Hadoop接口分类法。通常,所有新接口和API都应使用标签数量最多的标签(例如,私有不稳定),以免妨碍接口或API的意图。

结构体

根据各种兼容性问题,本文档分为几节。在每个部分中,介绍性文字解释了兼容性在该部分中的含义,重要意义以及支持兼容性的目的。然后,随后的“策略”部分以特定术语阐述了什么是治理策略。

符号约定

关键字“必须”,“不得”,“必须”,“应”,“不得”,“应”,“不应”,“推荐”,“可”和“可选”应解释为在RFC 2119中进行了描述。

弃用

Java API提供了@Deprecated批注,以将API元素标记为标记为要删除。注释的标准含义是不应使用API​​元素,并且可以在更高版本中将其删除。

在所有情况下,从API中删除元素都是不兼容的更改。元素的稳定性应确定何时允许这种更改。一个稳定为过时了整整主要版本才能删除它,并不得在未成年人或维护版本中移除的元素必须标明。一个不断发展为过时了整整次要版本后才能删除它和一个维护发行期间不得拆除元素必须标明。一个不稳定元件可以在任何时候被除去。在可能的情况下,应至少将不稳定元素标记为已弃用,至少释放一个之后再将其删除。例如,如果某个方法在Hadoop 2.8中被标记为已弃用,则直到Hadoop 4.0才能将其删除。

政策

稳定的 API元素在完整的主要版本中被标记为已弃用(通过@Deprecated批注或其他适当的文档)之前,不得删除。如果一个API元素被弃用(表示它是一个打算删除的临时措施),则该API元素可以在以下主要版本中删除。在修改稳定的 API时,开发人员应该更喜欢引入一种新的方法或端点,而不推荐使用现有的方法或端点,以对方法或端点进行不兼容的更改。

相容性类型

Java API

开发人员应该使用@InterfaceAudience和@InterfaceStability注释对所有Hadoop接口和类进行注释,以描述目标受众和稳定性。

  • @InterfaceAudience捕获了目标受众。可能的值为Public(对于最终用户和外部项目),Limited Private(对于其他Hadoop组件,以及与YARN,MapReduce,HBase等密切相关的项目)和Private(对于组件内部使用)。
  • @InterfaceStability描述了允许哪些类型的接口更改。可能的值是“ 稳定”,“ 不断发展 ”和“ 不稳定”
  • @Deprecated指出,包,类,成员变量或方法将来可能会被删除,因此不应使用。

注释可以在包,类或方法级别应用。如果方法没有隐私或稳定性注释,则它应从其所属的类继承其预期的受众或稳定性级别。如果一个类没有隐私或稳定性注释,则它将从其所属的包继承其预期的受众或稳定性级别。如果一个包没有隐私或稳定性注释,则应分别将其假定为PrivateUnstable

如果元素的听众或稳定注解与其父级的相应注解(无论是显式的还是继承的)相冲突,则该元素的听众或稳定性(分别)应由限制性更强的注解来确定。例如,如果Public类中包含Private方法,则该方法应被视为Private。如果Private类中包含Public方法,则该方法应视为Private

用例

  • 公共 - 稳定的 API兼容性是必需的,以确保最终用户程序和下游项目可以继续工作而无需修改。
  • 公共 - 不断发展的 API兼容性对于使功能在完全烘焙之前可供使用是很有用的。
  • 需要有限的私有稳定 API兼容性,才能跨次要版本升级单个组件。
  • 专用 - 滚动升级需要稳定的 API兼容性。
  • 专用 - 不稳定的 API兼容性使内部组件可以快速发展,而无需下游消费者关注,这是大多数接口应如何标记的。

政策

兼容性策略应由相关的包,类或成员变量或方法注释确定。

注意:从原始文件生成的API必须与滚动升级兼容。有关更多详细信息,请参见“有线协议兼容性”部分。因此,API和有线协议的兼容性策略必须齐头并进。

语义兼容性

Apache Hadoop努力确保API的行为在各个版本之间保持一致,尽管正确性的更改可能会导致行为的更改。API行为应由JavaDoc API文档(在此文档中存在且完整)指定。当JavaDoc API文档不可用时,应由相关单元测试所期望的行为来指定行为。如果没有JavaDoc API文档或单元测试的内容,则预期的行为被认为是显而易见的,并且应该假定是接口命名所暗示的最小功能。社区正在更加严格地指定一些API,并增强测试套件以验证是否符合规范,从而为可轻松测试的行为子集有效地创建了正式规范。

可以更改任何API的行为,以根据API的稳定性来修复错误行为,并伴随更新现有文档和测试和/或添加新文档或测试来进行。

最终用户应用程序的Java Binary兼容性,例如Apache Hadoop ABI

Apache Hadoop修订版应该保留二进制兼容性,以便最终用户应用程序可以继续工作而无需进行任何修改。同一主要版本中的次要Apache Hadoop版本必须保持兼容性,以便现有的MapReduce应用程序(例如,最终用户应用程序和项目,例如Apache Pig,Apache Hive等),现有的YARN应用程序(例如,最终用户应用程序和项目,例如Apache Spark,Apache Tez等人)以及直接访问HDFS的应用程序(例如,最终用户应用程序和项目,例如Apache HBase,Apache Flume等人)在与同一主要版本中的任何Apache Hadoop集群一起使用时均无需修改即可工作,并且无需重新编译发布为原始构建目标。

特别是对于MapReduce应用程序,即使用org.apache.hadoop.mapred和/或org.apache.hadoop.mapreduce API的应用程序,开发人员社区应支持主要版本之间的二进制兼容性。所有主要版本均应兼容支持MapReduce API。有关更多详细信息,请参见hadoop-1.x和hadoop-2.x之间的MapReduce应用程序兼容性

某些应用程序可能会受到磁盘布局更改或其他内部更改的影响。有关如何处理对非API接口的不兼容更改的策略,请参阅以下各节。

本机依赖

Hadoop包括几个本地组件,包括压缩,容器执行程序二进制文件和各种本地集成。这些本机组件在编译时和运行时都为Hadoop引入了一组本机依赖关系,例如cmake,gcc,zlib等。这组本机依赖关系是Hadoop ABI的一部分。

政策

Hadoop在编译时和/或运行时所依赖的本机组件的最低要求版本应被视为Evolving。在主要版本的次要版本之间,最低要求版本不应增加,尽管可能会由于安全问题,许可问题或其他原因而进行更新。当必须在主要版本的次要版本之间更新Hadoop依赖的本机组件时,在可能的情况下,更改应仅更改组件的次要版本,而不更改主要版本。

有线协议

线兼容性是指数据在Hadoop流程之间“通过线”传输。Hadoop使用协议缓冲区进行大多数RPC通信。保持兼容性要求禁止如下所述的修改。还应考虑非RPC通信,例如,使用HTTP传输HDFS映像作为快照的一部分或传输MapReduce映射任务输出。通信可以分类如下:

  • 客户端-服务器:Hadoop客户端和服务器之间的通信(例如,HDFS客户端到NameNode协议,或者YARN客户端到ResourceManager协议)。
  • 客户端服务器(Admin):值得区分仅由管理命令使用的一部分客户端服务器协议(例如HAAdmin协议),因为这些协议仅影响可以容忍最终用户(使用通用客户端-服务器协议)不能。
  • 服务器之间的服务器:服务器之间的通信(例如,DataNode和NameNode之间的协议,或NodeManager和ResourceManager)

协议依赖

Apache Hadoop的组件可能具有包含其自己的协议的依赖项,例如Zookeeper,S3,Kerberos等。这些协议依赖项应被视为内部协议,并由同一策略控制。

运输工具

除了协议本身的兼容性以外,维持跨版本通信还要求所支持的传输也要稳定。传输更改的最可能来源来自安全传输,例如SSL。将服务从SSLv2升级到SSLv3可能会破坏现有的SSLv2客户端。在主要版本的次要版本之间,不应提高任何传输的受支持的最低主要版本,尽管可能会由于安全问题,许可问题或其他原因而进行更新。当必须在主要版本的次要版本之间更新传输时,在可能的情况下,更改应仅更改组件的次要版本而不更改主要版本。

服务端口被视为传输机制的一部分。默认服务端口号必须保持一致,以防止破坏客户端。

政策

Hadoop有线协议在.proto(ProtocolBuffers)文件中定义。客户端-服务器和服务器-服务器协议应根据其.proto文件中注明的受众群体和稳定性分类进行分类。在没有分类的情况下,应该假定协议是PrivateStable

对.proto文件的以下更改应被认为是兼容的:

  • 添加一个可选字段,期望该代码处理由于与旧版本代码通信而丢失的字段
  • 向服务添加新的rpc /方法
  • 向消息添加新的可选请求
  • 重命名字段
  • 重命名.proto文件
  • 更改影响代码生成的.proto注释(例如Java包的名称)

对.proto文件的以下更改应被视为不兼容:

  • 更改rpc /方法名称
  • 更改rpc /方法参数类型或返回类型
  • 删除rpc /方法
  • 更改服务名称
  • 更改消息名称
  • 以不兼容的方式修改字段类型(递归定义)
  • 将可选字段更改为必填
  • 添加或删除必填字段
  • 只要可选字段具有合理的默认值以允许删除,就删除该可选字段

对.proto文件的以下更改应被视为不兼容:

  • 变更栏位编号
  • 重用以前删除的旧字段。

未通过.proto文件定义的Hadoop有线协议应被视为PrivateStable

除了稳定性之外,Hadoop的有线协议还必须根据以下规定在主要版本的次要版本之间向前兼容:

  • 必须保持客户端-服务器兼容性,以便即使在将服务器(群集)升级到更高版本(反之亦然)之后,用户仍可以继续使用旧客户端。例如,与Hadoop 2.3.0集群通信的Hadoop 2.1.0客户端。
  • 必须保持客户端-服务器兼容性,以便允许用户在升级服务器(群集)之前升级客户端。例如,与Hadoop 2.3.0集群通信的Hadoop 2.4.0客户端。这允许在完整集群升级之前部署客户端错误修复程序。请注意,新的客户端API或Shell命令调用的新群集功能将不可用。尝试使用尚未部署到群集的新API(包括数据结构中的新字段)的YARN应用程序可能会遇到链接异常。
  • 必须保持客户端-服务器兼容性,以便允许升级单个组件而不升级其他组件。例如,将HDFS从版本2.1.0升级到2.2.0,而不升级MapReduce。
  • 必须保持服务器与服务器的兼容性,以便允许在活动群集中使用混合版本,以便可以滚动升级群集而无需停机。

新的传输机制只能在次要或主要版本更改的情况下引入。现有传输机制必须在主要版本中的所有次要版本中继续得到支持。默认服务端口号应视为稳定

REST API

REST API兼容性适用于公开的REST端点(URL)和响应数据格式。Hadoop REST API专门用于客户端在各个版本(甚至主要版本)中的稳定使用。就本文档而言,公开的PEST API是公开文档中记录的API。以下是公开的REST API的非详尽列表:

每个API都有一个特定于API的版本号。任何不兼容的更改都必须增加API版本号。

政策

公开的Hadoop REST API应该被认为是公共的不断发展的。关于API版本号,应将公开的Hadoop REST API视为公开稳定的,即,不允许在API版本号内进行不兼容的更改。对于完整的主要版本,必须将REST API版本标记为已弃用,然后才能将其删除。

日志输出

Hadoop守护程序和CLI通过Log4j生成日志输出,旨在帮助管理员和开发人员了解集群故障并对其进行故障排除。日志消息旨在供人类使用,尽管还支持自动化用例。

政策

所有日志输出均应视为“ 公共”和“ 不稳定”。对于日志输出,不兼容的更改是使解析器无法找到或识别一行日志输出的更改。

审核日志输出

几个组件具有审核日志记录系统,它们以机器可读格式记录系统信息。对该数据格式进行不兼容的更改可能会破坏现有的自动化实用程序。对于审核日志,不兼容的更改是指更改格式的任何更改,以使现有解析器不再能够解析日志。

政策

所有审核日志输出均应视为“ 公共”和“ 稳定”。数据格式的任何更改均应视为不兼容的更改。

指标/ JMX

虽然Metrics API兼容性受Java API兼容性支配,但Hadoop公开的Metrics数据格式必须保持与数据使用者(例如自动化任务)兼容。

政策

通过Metrics公开的数据格式应被视为“ 公共”和“ 稳定”

文件格式和元数据

用户和系统级数据(包括元数据)存储在各种格式的文件中。对用于存储数据/元数据的元数据或文件格式的更改可能会导致版本之间的不兼容性。每种文件格式都在下面介绍。

用户级文件格式

最终用户用来存储其数据的格式的更改可能会阻止他们在以后的版本中访问数据,因此对于兼容至关重要。这些格式的示例包括har,war,SequenceFileFormat等。

政策

用户级文件格式应被视为PublicStable。用户杠杆文件格式的更改应在主要版本之间向前兼容,而在主要版本内必须向前兼容。开发人员社区应该更喜欢创建新的派生文件格式,而不是对现有文件格式进行不兼容的更改。此类新文件格式必须以加入方式创建,这意味着用户必须能够继续使用现有的兼容格式,直到并且除非他们明确选择加入新文件格式。

系统内部数据架构

Hadoop内部数据也可以存储在文件或其他数据存储中。更改这些数据存储的架构可能会导致不兼容。

MapReduce

MapReduce使用I文件之类的格式来存储MapReduce特定的数据。

政策

所有MapReduce内部文件格式(例如I-File格式或作业历史服务器的jhist文件格式)均应视为PrivateStable

HDFS元数据

HDFS以专用文件格式保留元数据(图像和编辑日志)。格式或元数据的不兼容更改会阻止后续版本读取较旧的元数据。不兼容的更改必须包括一个可以升级现有元数据的过程。

根据更改的不兼容程度,可能会出现以下潜在情况:

  • 自动:图像自动升级,无需明确的“升级”。
  • 直接:映像可以升级,但是可能需要一个明确的发行版“升级”。
  • 间接的:映像是可升级的,但可能需要先升级到中间版本。
  • 不可升级:映像不可升级。

HDFS数据节点将数据存储在专用目录结构中。对目录结构的不兼容更改可能会阻止较早的发行版访问存储的数据。不兼容的更改必须包括一个可以升级现有数据目录的过程。

政策

HDFS元数据格式应被视为私有且在不断发展。不兼容的更改必须包括可以升级现有元数据的过程。升级过程应允许进行多个升级。升级过程必须允许群集元数据回滚到旧版本及其旧磁盘格式。回滚必须还原原始数据,但不需要还原更新的数据。格式的任何不兼容更改都必须导致架构的主要版本号增加。

数据节点目录格式应被视为“ 专用且正在发展”。不兼容的更改必须包括一个可以升级现有数据目录的过程。升级过程应允许进行多个升级。升级过程必须允许数据目录回滚到较早的布局。

AWS S3A Guard元数据

对于Hadoop S3客户端(s3a)中读取或修改文件元数据的每个操作,该文件元数据的卷影副本都存储在单独的元数据存储中,这为元数据提供了类似HDFS的一致性,并且还可以提供更快的查找速度。文件状态或目录列表之类的东西。使用指示兼容性的版本标记创建S3A保护表。

政策

S3A保护元数据模式应被视为私有不稳定。对模式的任何不兼容更改必须导致模式的版本号增加。

YARN资源管理器状态存储

YARN资源管理器将有关群集状态的信息存储在外部状态存储中,以用于故障转移和恢复。如果用于状态存储数据的架构不保持兼容,则资源管理器将无法恢复其状态,并且将无法启动。状态存储数据模式包括指示兼容性的版本号。

政策

YARN资源管理器状态存储数据模式应被视为私有且在不断发展。对模式的任何不兼容更改必须导致模式的主要版本号增加。对模式的任何兼容更改必须导致次要版本号增加。

YARN节点管理器状态存储

YARN节点管理器将有关节点状态的信息存储在外部状态存储中,以用于恢复。如果用于状态存储数据的模式不保持兼容,则节点管理器将无法恢复其状态并且将无法启动。状态存储数据模式包括指示兼容性的版本号。

政策

YARN节点管理器状态存储数据模式应被视为私有且正在演变。对模式的任何不兼容更改必须导致模式的主要版本号增加。对模式的任何兼容更改必须导致次要版本号增加。

纱联合州立商店

YARN资源管理器联合服务将有关联合群集,正在运行的应用程序和路由策略的信息存储在外部状态存储中,以用于复制和恢复。如果用于状态存储数据的架构不保持兼容,则联合身份验证服务将无法初始化。状态存储数据模式包括指示兼容性的版本号。

政策

YARN联合身份验证服务状态存储数据模式应被视为私有且正在演变。对模式的任何不兼容更改必须导致模式的主要版本号增加。对模式的任何兼容更改必须导致次要版本号增加。

命令行界面(CLI)

Hadoop命令行程序可以直接通过系统外壳或外壳脚本使用。CLI既包括面向用户的命令(例如hdfs命令或yarn命令),也包括面向管理员的命令(例如用于启动和停止守护程序的脚本)。更改命令路径,删除或重命名命令行选项,参数顺序或命令返回代码以及输出中断兼容性会给用户带来不利影响。

政策

除非记录为试验性的并且随时可能更改,否则所有Hadoop CLI路径,用法和输出均应视为“ 公共”和“ 稳定”

请注意,应该将CLI输出与Hadoop CLI生成的日志输出区分开来。后者应受日志输出策略的约束。还要注意,对于CLI输出,所有更改均应视为不兼容的更改。

网页界面

Web UI(尤其是网页的内容和布局)的更改可能会干扰屏幕上抓取网页以获取信息的尝试。但是,Hadoop Web UI页面并不意味着要被删除,例如出于自动化目的。希望用户使用REST API以编程方式访问群集信息。

政策

Hadoop Web UI应被视为公共不稳定

功能兼容性

用户依赖于Hadoop集群的行为在各个版本之间保持一致。导致群集行为异常不同的更改可能会导致沮丧和长时间的采用周期。假设群集的配置文件保持不变,则不应添加任何新配置来更改现有群集的行为。对于定义的任何新设置,应注意确保新设置不会更改现有群集的行为。

政策

对现有功能的更改绝不能在同一次要版本内的维护版本之间更改默认行为或现有配置设置的含义,无论更改是由于系统或逻辑更改还是内部或外部默认配置值引起的。

对现有功能的更改不应更改同一主要版本内次要版本之间的默认行为或现有配置设置的含义,尽管诸如修正正确性或安全性问题之类的更改可能需要不兼容的行为更改。在默认情况下,应尽可能关闭此类行为更改。

Hadoop配置文件

用户使用Hadoop定义的属性来配置并向Hadoop和自定义属性提供提示,以将信息传递给作业。鼓励用户避免使用与Hadoop定义的属性的名称空间冲突的自定义配置属性名称,并应避免使用Hadoop使用的任何前缀,例如hadoop,io,ipc,fs,net,f​​ile,ftp,kfs,ha,file ,dfs,mapred,mapreduce和yarn。

除了属性文件之外,Hadoop还使用其他配置文件来设置系统行为,例如公平调度程序配置文件或资源配置文件配置文件。

政策

Hadoop定义的属性(名称和含义)应视为PublicStable。即使在主要版本之间,由Hadoop定义的属性隐含的单位也不得更改。Hadoop定义的属性的默认值应被视为PublicEvolving

不受上述关于Hadoop定义的属性的规则支配的Hadoop配置文件应被视为PublicStable。不兼容更改的定义取决于特定的配置文件格式,但是一般规则是,兼容更改将允许更改前有效的配置文件在更改后仍然有效。

Log4j配置文件

Hadoop守护程序和CLI生成的日志输出由一组配置文件控制。这些文件控制Hadoop的各个组件将输出的日志消息的最低级别,以及这些消息的存储位置和方式。

政策

所有Log4j配置均应视为“ 公共”和“正在发展”

目录结构

源代码,工件(源和测试),用户日志,配置文件,输出和作业历史记录都存储在本地文件系统或HDFS的磁盘上。更改这些用户可访问文件的目录结构可能会破坏兼容性,即使在原始路径是通过符号链接保留的情况下(例如,当路径被配置为不遵循符号链接的servlet访问时)。

政策

源代码和构建工件的布局应视为“ 私有”和“ 不稳定”。在主要版本中,开发人员社区应保留整个目录结构,尽管可以在不警告的情况下添加,移动或删除单个文件。

配置文件,用户日志和作业历史记录的目录结构应被视为Public and Evolving

Java类路径

Hadoop provides several client artifacts that applications use to interact with the system. These artifacts typically have their own dependencies on common libraries. In the cases where these dependencies are exposed to end user applications or downstream consumers (i.e. not shaded) changes to these dependencies can be disruptive. Developers are strongly encouraged to avoid exposing dependencies to clients by using techniques such as shading.

With regard to dependencies, adding a dependency is an incompatible change, whereas removing a dependency is a compatible change.

Some user applications built against Hadoop may add all Hadoop JAR files (including Hadoop’s library dependencies) to the application’s classpath. Adding new dependencies or updating the versions of existing dependencies may interfere with those in applications’ classpaths and hence their correct operation. Users are therefore discouraged from adopting this practice.

Policy

The set of dependencies exposed by the Hadoop client artifacts SHALL be considered Public and Stable. Any dependencies that are not exposed to clients (either because they are shaded or only exist in non-client artifacts) SHALL be considered Private and Unstable

Environment variables

Users and related projects often utilize the environment variables exported by Hadoop (e.g. HADOOP_CONF_DIR). Removing or renaming environment variables can therefore impact end user applications.

Policy

The environment variables consumed by Hadoop and the environment variables made accessible to applications through YARN SHALL be considered Public and Evolving. The developer community SHOULD limit changes to major releases.

Build artifacts

Hadoop uses Maven for project management. Changes to the contents of generated artifacts can impact existing user applications.

Policy

The contents of Hadoop test artifacts SHALL be considered Private and Unstable. Test artifacts include all JAR files generated from test source code and all JAR files that include “tests” in the file name.

The Hadoop client artifacts SHALL be considered Public and Stable. Client artifacts are the following:

  • hadoop-client
  • hadoop-client-api
  • hadoop-client-minicluster
  • hadoop-client-runtime
  • hadoop-hdfs-client
  • hadoop-hdfs-native-client
  • hadoop-mapreduce-client-app
  • hadoop-mapreduce-client-common
  • hadoop-mapreduce-client-core
  • hadoop-mapreduce-client-hs
  • hadoop-mapreduce-client-hs-plugins
  • hadoop-mapreduce-client-jobclient
  • hadoop-mapreduce-client-nativetask
  • hadoop-mapreduce-client-shuffle
  • hadoop-yarn-client

All other build artifacts SHALL be considered Private and Unstable.

Hardware/Software Requirements

To keep up with the latest advances in hardware, operating systems, JVMs, and other software, new Hadoop releases may include features that require newer hardware, operating systems releases, or JVM versions than previous Hadoop releases. For a specific environment, upgrading Hadoop might require upgrading other dependent software components.

Policies

  • Hardware
    • Architecture: Intel and AMD are the processor architectures currently supported by the community. The community has no plans to restrict Hadoop to specific architectures, but MAY have family-specific optimizations. Support for any processor architecture SHOULD NOT be dropped without first being documented as deprecated for a full major release and MUST NOT be dropped without first being deprecated for at least a full minor release.
    • Minimum resources: While there are no guarantees on the minimum resources required by Hadoop daemons, the developer community SHOULD avoid increasing requirements within a minor release.
  • Operating Systems: The community SHOULD maintain the same minimum OS requirements (OS kernel versions) within a minor release. Currently GNU/Linux and Microsoft Windows are the OSes officially supported by the community, while Apache Hadoop is known to work reasonably well on other OSes such as Apple MacOSX, Solaris, etc. Support for any OS SHOULD NOT be dropped without first being documented as deprecated for a full major release and MUST NOT be dropped without first being deprecated for at least a full minor release.
  • The JVM requirements SHALL NOT change across minor releases within the same major release unless the JVM version in question becomes unsupported. The JVM version requirement MAY be different for different operating systems or even operating system releases.
  • File systems supported by Hadoop, e.g. through the FileSystem API, SHOULD not become unsupported between minor releases within a major version unless a migration path to an alternate client implementation is available.

References

Here are some relevant JIRAs and pages related to the topic: