您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn.

将 Apache HBase 群集迁移到新版本

本文介绍如何通过必要步骤将 Azure HDInsight 上的 Apache HBase 群集更新为新版本。

升级造成的停机时间应该很短,以分钟计。 停机是执行刷新所有内存中数据的步骤,然后在新群集上配置和重启服务造成的。 根据节点数目、数据量和其他变数,结果会有所不同。

检查 Apache HBase 兼容性

在升级 Apache HBase 之前,请确保源群集和目标群集上的 HBase 版本兼容。 有关详细信息,请参阅 HDInsight 提供的 Apache Hadoop 组件和版本

备注

我们强烈建议查看 HBase 书册中的版本兼容性矩阵。 HBase 版本发行说明中应会阐述任何重大的不兼容性。

下面是一个示例性的版本兼容性对照表。 Y 表示兼容,N 表示可能不兼容:

兼容性类型 主版本 次版本 修补程序
客户端-服务器网络兼容性 N Y Y
服务器-服务器兼容性 N Y Y
文件格式兼容性 N Y Y
客户端 API 兼容性 N Y Y
客户端二进制文件兼容性 N N Y
服务器端受限的 API 兼容性
Stable N Y Y
不断变化 N N Y
不稳定 N N N
依赖项兼容性 N Y Y
操作兼容性 N N Y

使用相同的 Apache HBase 主版本升级

若要升级 Azure HDInsight 上的 Apache HBase 群集,请完成以下步骤:

  1. 请确保应用程序与新版本兼容,如 HBase 兼容性矩阵和发行说明中所述。 在运行 HDInsight 和 HBase 目标版本的群集中测试应用程序。

  2. 使用相同的存储帐户、不同的容器名称设置新的目标 HDInsight 群集

    使用相同的存储帐户,但创建不同的容器

  3. 刷新源 HBase 群集,即正在升级的群集。 HBase 将传入的数据写入名为 memstore 的内存中存储。 memstore 达到特定的大小后,HBase 会将其刷新到群集存储帐户中用作长期存储的磁盘中。 删除旧群集时,将回收 memstores,这可能会丢失数据。 若要将每个表的 memstore 手动刷新到磁盘,请运行以下脚本。 Azure 的 GitHub 中提供了此脚本的最新版本。

    #!/bin/bash
    
    #-------------------------------------------------------------------------------#
    # SCRIPT TO FLUSH ALL HBASE TABLES.
    #-------------------------------------------------------------------------------#
    
    LIST_OF_TABLES=/tmp/tables.txt
    HBASE_SCRIPT=/tmp/hbase_script.txt
    TARGET_HOST=$1
    
    usage ()
    {
        if [[ "$1" == "-h" ]] || [[ "$1" == "--help" ]]
        then
            cat << ...
    
    Usage: 
    
    $0 [hostname]
    
    Providing hostname is optional and not required when the script is executed within HDInsight cluster with access to 'hbase shell'.
    
    However hostname should be provided when executing the script as a script-action from HDInsight portal.
    
    For Example:
    
        1.  Executing script inside HDInsight cluster (where 'hbase shell' is 
            accessible):
    
            $0 
    
            [No need to provide hostname]
    
        2.  Executing script from HDinsight Azure portal:
    
            Provide Script URL.
    
            Provide hostname as a parameter (i.e. hn0, hn1, hn2.. or wn2 etc.).
    ...
            exit
        fi
    }
    
    validate_machine ()
    {
        THIS_HOST=`hostname`
    
        if [[ ! -z "$TARGET_HOST" ]] && [[ $THIS_HOST  != $TARGET_HOST* ]]
        then
            echo "[INFO] This machine '$THIS_HOST' is not the right machine ($TARGET_HOST) to execute the script."
            exit 0
        fi
    }
    
    get_tables_list ()
    {
    hbase shell << ... > $LIST_OF_TABLES 2> /dev/null
        list
        exit
    ...
    }
    
    add_table_for_flush ()
    {
        TABLE_NAME=$1
        echo "[INFO] Adding table '$TABLE_NAME' to flush list..."
        cat << ... >> $HBASE_SCRIPT
            flush '$TABLE_NAME'
    ...
    }
    
    clean_up ()
    {
        rm -f $LIST_OF_TABLES
        rm -f $HBASE_SCRIPT
    }
    
    ########
    # MAIN #
    ########
    
    usage $1
    
    validate_machine
    
    clean_up
    
    get_tables_list
    
    START=false
    
    while read LINE 
    do 
        if [[ $LINE == TABLE ]] 
        then
            START=true
            continue
        elif [[ $LINE == *row*in*seconds ]]
        then
            break
        elif [[ $START == true ]]
        then
            add_table_for_flush $LINE
        fi
    
    done < $LIST_OF_TABLES
    
    cat $HBASE_SCRIPT
    
    hbase shell $HBASE_SCRIPT << ... 2> /dev/null
    exit
    ...
    
    
  4. 停止引入到旧 HBase 群集。

  5. 为确保刷新 memstore 中的所有最新数据,请再次运行前面的脚本。

  6. 登录到旧群集上的 Apache Ambari (https://OLDCLUSTERNAME.azurehdidnsight.net) 并停止 HBase 服务。 当系统提示你确认想要停止这些服务时,请选中为 HBase 启用维护模式的框。 有关连接和使用 Ambari 的详细信息,请参阅使用 Ambari Web UI 管理 HDInsight 群集

    在 Ambari 中的“服务操作”下,单击“服务”>“HBase”>“停止”

    选中“为 HBase 启用维护模式”复选框,然后确认

  7. 如果不使用带增强写入功能的 HBase 群集,请跳过此步骤。 带增强写入功能的 HBase 群集才需要它。

    通过从原始群集的任何 zookeeper 节点或工作器节点上的 ssh 会话运行以下命令,在 HDFS 下备份 WAL 目录。

    hdfs dfs -mkdir /hbase-wal-backup**
    hdfs dfs -cp hdfs://mycluster/hbasewal /hbase-wal-backup**
    
  8. 在新 HDInsight 群集上登录到 Ambari。 将 fs.defaultFS HDFS 设置更改为指向原始群集所用的容器名称。 此设置位于“HDFS”>“配置”>“高级”>“高级 core-site”下。

    在 Ambari 中单击“服务”>“HDFS”>“配置”>“停止”

    在 Ambari 中更改容器名称

  9. 如果不使用带增强写入功能的 HBase 群集,请跳过此步骤。 带增强写入功能的 HBase 群集才需要它。

    hbase.rootdir 路径改为指向原始群集的容器。

    在 Ambari 中更改 HBase rootdir 的容器名称

  10. 如果不使用带增强写入功能的 HBase 群集,请跳过此步骤。 只有带增强写入功能的 HBase 群集才需要它,并且只有在原始群集是带增强写入功能的 HBase 群集的情况下才需要它。

    清除此新群集的 zookeeper 和 WAL FS 数据。 在任何 zookeeper 节点或工作器节点中发出以下命令:

    hbase zkcli
    rmr /hbase-unsecure
    quit
    
    hdfs dfs -rm -r hdfs://mycluster/hbasewal**
    
  11. 如果不使用带增强写入功能的 HBase 群集,请跳过此步骤。 带增强写入功能的 HBase 群集才需要它。

    通过新群集的任何 zookeeper 节点或工作器节点上的 ssh 会话,将 WAL 目录还原到新群集的 HDFS 中。

    hdfs dfs -cp /hbase-wal-backup/hbasewal hdfs://mycluster/**
    
  12. 如果要将 HDInsight 3.6 升级到4.0,请遵循以下步骤,否则请跳到步骤13:

    1. 选择“服务” > “重启所有必需服务”,以便重启 Ambari 中的所有必需服务。
    2. 停止 HBase 服务。
    3. 通过 SSH 连接到 Zookeeper 节点,执行 zkCli 命令 rmr /hbase-unsecure,以便从 Zookeeper 中删除 HBase 根 znode。
    4. 重启 HBase。
  13. 若要升级到 4.0 之外的任何其他 HDInsight 版本,请执行以下步骤:

    1. 保存所做更改。
    2. 根据 Ambari 中的指示重启全部所需的服务。
  14. 将应用程序指向新群集。

    备注

    升级时,应用程序的静态 DNS 会更改。 不要硬编码此 DNS,可以在域名的 DNS 设置中配置一个指向群集名称的 CNAME。 另一种做法是使用应用程序的、无需重新部署即可更新的配置文件。

  15. 启动引入,确定一切是否按预期正常运行。

  16. 如果新群集符合预期,请删除原始群集。

后续步骤

若要详细了解 Apache HBase 以及如何升级 HDInsight 群集,请参阅以下文章: