Hadoop 文档

General

Common

HDFS

MapReduce

MapReduce REST APIs

YARN

YARN REST APIs

YARN Service

Submarine

Hadoop Compatible File Systems

Auth

Tools

Reference

Configuration

目的

本文档的目的是将Hadoop兼容性指南简化为与系统管理员相关的信息。

目标观众

目标受众是负责维护Apache Hadoop集群并且必须计划和执行集群升级的管理员。

Hadoop版本

Hadoop开发社区会定期发布新的Hadoop版本,以引入新功能并解决现有问题。Realeses分为三类:

  • 主要版本:主要版本通常会包含重要的新功能,并且通常会带来最大的升级兼容性风险。主要发行版将发行版本的第一个数字递增,例如从2.8.2增至3.0.0。
  • 次要版本:次要版本通常会包含一些新功能以及一些值得注意的问题的修复程序。在大多数情况下,较小的发行版不会带来太大的升级风险。次要发行版会增加发行版的中间数量,例如从2.8.2升级到2.9.0。
  • 维护:维护版本不应包含任何新功能。维护版本的目的是解决开发人员社区认为非常重要的一系列问题,以至于值得推动一个新版本来解决这些问题。维护版本应几乎没有升级风险。维护版本会增加版本中的最终编号,例如从2.8.2到2.8.3。

平台依赖

Hadoop依赖的一组本机组件被视为Hadoop ABI的一部分。Hadoop开发社区致力于最大程度地保持ABI兼容性。在次要版本之间,除非有必要(例如出于安全性或许可问题),否则不会增加Hadoop本地依赖项的最低支持版本号。发生此类更改时,Hadoop开发人员社区将尝试保留相同的主要版本,而仅更新次要版本。

Hadoop取决于Java虚拟机。在Hadoop的主要发行版之间,最低支持的JVM版本不会更改。如果在主要发行版之间不支持当前的最低支持的最低JVM版本,则在次要发行版中可能会更改最低支持的JVM版本。

网络

Hadoop依赖于某些传输级技术,例如SSL。除非必要(例如出于安全性或许可问题),否则不会增加这些依赖项的最低受支持版本。发生此类更改时,Hadoop开发人员社区将尝试保留相同的主要版本,而仅更新次要版本。

在主要版本中,Hadoop的服务端口号将保持不变,尽管在主要版本中可能会更改。

Hadoop的内部有线协议将在客户端和服务器之间以及服务器之间在同一个主要版本中的次要版本之间保持向前和向后兼容性,以实现滚动升级。在主要版本中,有线协议的向前和向后兼容性是可能的,并且可能允许在某些条件下进行滚动升级,但不能保证。

脚本和自动化

REST API

Hadoop REST API提供了一种简单的机制来收集有关Hadoop系统状态的信息。为了支持REST客户端,已对Hadoop REST API进行了版本控制,并且不会在版本内发生不兼容的更改。禁止端点本身以及支持的参数列表以及该端点的输出在REST端点版本内不兼容地更改。但是请注意,引入新字段和其他附加更改被视为兼容更改,因此REST API的任何使用者都应足够灵活以忽略未知字段。

REST API版本为单个编号,与Hadoop版本编号无关。版本号在端点URL中编码,前缀为“ v”,例如“ v1”。只能在次要或主要版本中引入新的REST端点版本。REST端点版本只能在被标记为已针对完整的主要版本弃用后才能删除。

解析Hadoop输出

Hadoop产生各种输出,可以想象通过自动化工具进行解析。使用Hadoop的输出时,请考虑以下因素:

  • 除非解决了正确性问题,否则预计Hadoop日志输出不会随维护版本而更改。虽然日志输出可以直接由软件使用,但主要是供人类读者使用的。
  • Hadoop会为各种操作生成审核日志。尽管添加了新记录和字段被认为是兼容的更改,但审核日志的目的是使机器可读。审核日志的任何使用者都应允许意外的记录和字段。审核日志格式在主要版本之间可能不会不兼容地更改。
  • Hadoop生成的指标数据主要用于自动使用。指标格式在主要版本之间可能不会以不兼容的方式更改,但是可以随时兼容地添加新记录和字段。指标数据的使用者应允许未知的记录和字段。

命令行界面

Hadoop的一组CLI提供了管理系统各个方面以及发现有关系统状态信息的能力。在主要版本之间,不会删除CLI工具选项或在语义上进行更改。该规则的例外是CLI工具和工具选项,这些工具和工具选项被明确标记为实验性的,并且可能会发生变化。除非另有说明,否则CLI工​​具的输出将在主要版本号内保持不变。

请注意,对CLI工具输出的任何更改都被视为不兼容的更改,因此在主要版本之间,CLI输出不会更改。请注意,CLI工具的输出不同于CLI工具产生的日志输出。日志输出不用于自动使用,并且可能随时更改。

网页界面

Hadoop公开的Web UI仅供人类使用。不支持对UI进行爬取以获取数据。不会努力确保各个版本的任何Web UI中显示的数据之间的兼容性。

Hadoop状态数据

Hadoop的内部系统状态是私有的,不应直接修改。以下策略控制着各种内部状态存储的升级特征:

  • 内部MapReduce状态数据将在同一主要版本中的次要版本之间保持兼容,以在MapReduce工作负载执行时促进滚动升级。
  • HDFS以版本化的专用内部格式维护有关存储在HDFS中的数据的元数据。如果发生不兼容的更改,则商店的版本号将增加。升级现有群集时,如果可能,元数据存储将自动升级。在升级元数据存储后,始终可以撤消升级过程。
  • AWS S3A保护装置保留一个私有的内部元数据存储,该存储已版本化。不兼容的更改将导致版本号增加。如果升级要求重新格式化商店,则会在发行说明中指出。
  • YARN资源管理器保留版本化的应用程序和调度程序信息的私有内部状态存储。不兼容的更改将导致版本号增加。如果升级要求重新格式化商店,则会在发行说明中指出。
  • YARN节点管理器保留版本化的应用程序信息的私有内部状态存储。不兼容的更改将导致版本号增加。如果升级要求重新格式化商店,则会在发行说明中指出。
  • YARN联合身份验证服务保留版本化的应用程序和群集信息的内部内部私有存储。不兼容的更改将导致版本号增加。如果升级要求重新格式化商店,则会在发行说明中指出。

Hadoop配置

Hadoop使用两种主要形式的配置文件:XML配置文件和日志记录配置文件。

XML配置文件

XML配置文件包含一组作为名称/值对的属性。属性的名称和含义由Hadoop定义,并保证在次要版本中稳定。只有在至少一个完整的主要版本中将其标记为不推荐使用时,才可以在主要版本中删除该属性。如果未在XML配置文件中显式设置该属性,则大多数属性都有默认值。在维护发布期间不会更改默认属性值。有关各种Hadoop组件支持的属性的详细信息,请参阅组件文档。

下游项目和用户可以将自己的属性添加到XML配置文件中,以供其工具和应用程序使用。尽管Hadoop在定义新属性方面没有正式的限制,但是与Hadoop定义的属性冲突的新属性可能会导致意想不到的不良结果。鼓励用户避免使用与Hadoop定义的属性的名称空间冲突的自定义配置属性名称,因此应避免使用Hadoop使用的任何前缀,例如hadoop,io,ipc,fs,net,f​​ile,ftp,kfs,ha,文件,dfs,mapred,mapreduce和yarn。

记录配置文件

Hadoop守护程序和CLI生成的日志输出由一组配置文件控制。这些文件控制Hadoop的各个组件将输出的日志消息的最低级别,以及这些消息的存储位置和方式。在次要发行版之间,不会对日志配置进行任何更改,以减少,消除或重定向日志消息。

其他配置文件

Hadoop使用各种格式的许多其他类型的配置文件,例如JSON资源配置文件配置或XML Fair Scheduler配置。在次要版本中,不会对配置文件格式引入不兼容的更改。即使在次要发行版之间,如果可能,也将避免不兼容的配置文件格式更改。

Hadoop发行版

配置文件

Hadoop配置文件的位置和一般结构,作业历史记录信息(由作业历史记录服务器使用)以及由Hadoop生成的日志文件将在维护版本之间进行维护。

JAR等

Hadoop发行版的内容(例如JAR文件)随时可能更改,除了客户端工件外,不应将其视为可靠的。客户端工件及其内容将在主要版本中保持兼容。Hadoop开发社区的目标是允许应用程序代码在次要版本之间以及可能的情况下在主要版本之间继续保持不变。当前客户端工件的列表如下:

  • hadoop客户端
  • hadoop-client-api
  • hadoop-client-minicluster
  • hadoop客户端运行时
  • hadoop-hdfs-client
  • hadoop-hdfs-native-client
  • hadoop-mapreduce-client-app
  • hadoop-mapreduce-client-common
  • hadoop-mapreduce-client-core
  • hadoop-mapreduce-client-jobclient
  • hadoop-mapreduce-client-nativetask
  • hadoop-yarn-client

环境变量

某些Hadoop组件通过环境变量接收信息。例如,大多数Hadoop进程将HADOOP_OPTS环境变量解释为在启动新JVM时将使用的其他JVM参数字符串。在次要版本之间,Hadoop解释环境变量的方式不会以不兼容的方式发生变化。换句话说,对于相同主版本中的所有Hadoop版本,将相同的值放入相同的变量应产生相同的结果。

图书馆依赖

Hadoop依靠大量第三方库进行操作。Hadoop开发人员社区尽可能地向下游开发人员隐藏这些依赖项。但是,Hadoop确实会公开其某些依赖性,尤其是在Hadoop 3之前。Hadoop不会通过主要版本之间的客户端工件公开任何新的依赖性。

常见的下游反模式是使用hadoop classpath的输出设置下游应用程序的类路径,或将Hadoop随附的所有第三方JAR添加到下游应用程序的类路径中。这种做法在下游应用程序和Hadoop的第三方依赖关系之间建立了紧密的耦合,这导致了脆弱的应用程序,随着Hadoop依赖关系的变化,该应用程序难以维护。强烈建议不要这样做。

Hadoop还包括几个本地组件,包括压缩,容器执行程序二进制文件和各种本地集成。这些本机组件为Hadoop引入了一组本机依赖性。一组本机依赖项可以在次要版本中更改,但是Hadoop开发人员社区将尝试将任何依赖项版本更改尽可能地限制为次要版本更改。

硬件和操作系统依赖性

Hadoop目前受到运行在x86和AMD处理器上的Linux和Windows上的Hadoop开发人员社区的支持。在可预见的将来,这些操作系统和处理器可能仍会受到支持。如果支持计划发生更改,则要删除的OS或处理器至少在完整的次要版本(但最好是完整的主要版本)之前被记录为已弃用,然后才实际删除。Hadoop可以在其他OS和处理器体系结构上运行,但是社区可能无法在出现问题时提供帮助。

不能保证Hadoop守护程序所需的最小资源在各个版本(甚至维护版本)之间如何变化。尽管如此,Hadoop开发人员社区将尽力避免在次要版本中增加要求。

在大多数情况下,在整个主要版本中,将继续继续支持所有受支持的Hadoop文件系统(例如通过FileSystem API)。可以在主要版本中放弃对文件系统的支持的唯一情况是,是否提供了到备用客户端实现的干净迁移路径。

问题

有关根据Apache Hadoop开发应用程序和项目的问题,请联系用户邮件列表