升级时无法跳过主要版本。 如果要从版本0.98.x升级到2.x,则必须先从0.98.x升级到1.2.x,然后再从1.2.x升级到2.x.
查看Apache HBase配置,特别是Hadoop。 熟悉支持和测试期望。
从1.0.0版本开始,HBase正在为其发布版本进行语义版本控制。综上所述:
给定版本号MAJOR.MINOR.PATCH,增加:
兼容性尺寸
客户端 - 服务器线协议兼容性
Server-Server协议兼容性
文件格式兼容性
客户端API兼容性
允许更改或删除现有客户端API。
在我们更改/删除API之前,需要弃用整个主要版本的API。
修补程序版本中提供的API将在所有后续修补程序版本中提供。但是,可能会添加新的API,这些API在早期的修补程序版本中不可用。
补丁版本中引入的新API将仅以源兼容的方式添加[1:请参阅“源兼容性”https://blogs.oracle.com/darcy/entry/kinds_of_compatibility]:即实现公共API的代码将继续编译。
客户端二进制兼容性
服务器端有限API兼容性(取自Hadoop)
依赖性兼容性
以前,我们尝试维护基础Hadoop服务的依赖兼容性,但在过去几年中,这已被证明是站不住脚的。虽然HBase项目试图维持对旧版本Hadoop的支持,但我们删除了未能继续查看版本的次要版本的“受支持”指示符。此外,Hadoop项目有自己的一组兼容性指南,这意味着在某些情况下,必须更新到较新的受支持的次要版本可能会破坏我们的一些兼容性承诺。
滚动升级是一次在服务器中更新服务器的过程。 如果它们是二进制或线路兼容的,您可以在HBase版本之间滚动升级。 有关这意味着什么的更多信息,请参阅在二进制/有线兼容的版本之间滚动升级。 粗略地说,滚动升级是优雅停止每个服务器,更新软件,然后重新启动。 您可以为群集中的每个服务器执行此操作。 通常先升级Master,然后升级RegionServers。 有关可以帮助使用滚动升级过程的工具,请参阅滚动重新启动。
例如,在下面,HBase被符号链接到实际的HBase安装。 在升级时,在通过群集运行滚动重新启动之前,我们将符号链接更改为指向新的HBase软件版本,然后运行
$ HADOOP_HOME=~/hadoop-2.6.0-CRC-SNAPSHOT ~/hbase/bin/rolling-restart.sh --config
~/conf_hbase
滚动重启脚本将首先正常停止并重新启动主服务器,然后依次启动每个RegionServers。 由于符号链接已更改,因此在重新启动时,服务器将使用新的HBase版本。 随着滚动升级的进行,检查日志中的错误。
在二进制/有线兼容的版本之间滚动升级
除非另有说明,否则HBase次要版本是二进制兼容的。 您可以在HBase点版本之间进行滚动升级。 例如,您可以通过在集群中进行滚动升级来替换1.2.4二进制文件,使用1.2.6二进制文件从1.2.6转到1.2.4。
在下面的次要版本特定部分中,我们将调出版本与线路/协议兼容的位置,在这种情况下,还可以执行滚动升级。
有时在尝试升级时,事情没有按计划进行。本节介绍如何执行回滚到早期HBase版本。请注意,只有在Major和一些Minor版本之间才需要这样做。您应始终能够在同一次要版本中的HBase Patch版本之间降级。这些说明可能要求您在开始升级过程之前采取措施,因此请务必事先仔细阅读本节。
本节介绍如何在HBase次要版本和主要版本之间的升级上执行回滚。在本文档中,回滚是指获取已升级的群集并将其还原到旧版本,同时丢失自升级后发生的所有更改的过程。相比之下,群集降级会将升级的群集还原到旧版本,同时保留自升级以来写入的任何数据。我们目前只提供回滚HBase集群的说明。此外,只有在执行升级之前遵循这些说明时,回滚才有效。
当这些说明谈到先决条件集群服务(即HDFS)的回滚与降级时,您应该将服务版本与退化的退化情况相同。
除非您正在执行全服务回滚,否则HBase群集将丢失任何已配置的HBase复制对等项。如果您的群集已配置为HBase复制,则在遵循这些说明之前,您应记录所有复制对等项。执行回滚后,您应该将每个记录的对等体添加回群集。有关启用HBase复制,列出对等项和添加对等方的详细信息,请参阅管理和配置群集复制。另请注意,自升级以来写入群集的数据可能已经或可能尚未复制到任何对等方。确定哪些对等方看到了复制数据以及回滚这些对等方中的数据是否超出了本指南的范围。
除非您正在执行全服务回滚,否则执行回滚过程可能会破坏区域服务器的所有位置。在群集有时间进行压缩以恢复数据位置之前,您应该期望性能下降。 (可选)您可以强制执行压缩以加速此过程,但代价是生成群集负载。
以下说明假定HBase数据目录和HBase znode的默认位置。这两个位置都是可配置的,您应该在继续之前验证群集中使用的值。如果您有不同的值,只需将默认值替换为配置中找到的值* HBase数据目录是通过密钥’hbase.rootdir’配置的,默认值为’/ hbase’。 * HBase znode通过密钥’zookeeper.znode.parent’配置,默认值为’/ hbase’。
如果您要执行HDFS和ZooKeeper服务的回滚,那么HBase的数据将在此过程中回滚。
升级前
升级前无需其他步骤。 作为额外的预防措施,您可能希望使用distcp备份要升级的群集的HBase数据。 为此,请按照“HDFS降级后回滚”部分的“升级前”部分中的步骤进行操作,但要复制到另一个HDFS实例而不是同一实例中。
如果您将回滚HDFS但是经过ZooKeeper降级,那么HBase将处于不一致状态。在完成此过程之前,必须确保未启动集群。
升级前
升级前无需其他步骤。作为额外的预防措施,您可能希望使用distcp备份要升级的群集的HBase数据。为此,请按照“HDFS降级后回滚”部分的“升级前”部分中的步骤进行操作,但要复制到另一个HDFS实例而不是同一实例中。
清除ZooKeeper中的HBase信息
[hpnewton@gateway_node.example.com ~]$ zookeeper-client -server
zookeeper1.example.com:2181,zookeeper2.example.com:2181,zookeeper3.example.com:2181
Welcome to ZooKeeper!
JLine support is disabled
rmr /hbase
quit
Quitting...
5.启动HBase
6.验证HBase内容 - 使用HBase shell列出表并扫描一些已知值。
如果您要执行HDFS降级,那么无论ZooKeeper是通过回滚,降级还是重新安装,您都需要遵循这些说明。
升级前
在开始升级过程之前,您必须完整备份HBase的后备数据。以下说明包括备份当前HDFS实例中的数据。或者,您可以使用distcp命令将数据复制到另一个HDFS集群。
使用distcp备份HBase数据目录
[hpnewton@gateway_node.example.com ~]$ kinit -k -t hdfs.keytab hdfs@EXAMPLE.COM
[hpnewton@gateway_node.example.com ~]$ hadoop distcp /hbase /hbase-pre-upgrade-
backup
执行回滚
恢复HBase数据目录
[hpnewton@gateway_node.example.com ~]$ kinit -k -t hdfs.keytab hdfs@EXAMPLE.COM
[hpnewton@gateway_node.example.com ~]$ hdfs dfs -mv /hbase /hbase-upgrade-rollback
[hpnewton@gateway_node.example.com ~]$ hdfs dfs -mv /hbase-pre-upgrade-backup
/hbase
清除ZooKeeper中的HBase信息
[hpnewton@gateway_node.example.com ~]$ zookeeper-client -server
zookeeper1.example.com:2181,zookeeper2.example.com:2181,zookeeper3.example.com:2181
Welcome to ZooKeeper!
JLine support is disabled
rmr /hbase
quit
Quitting...